You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

751 lines
21 KiB

5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
  1. <template>
  2. <view class="personal-index">
  3. <view class="personal-base-info">
  4. <view style="width: 100%;height: 140px; margin-top: 10px;">
  5. <view style="width: 100%;text-align: center;" @click="openOtherPage('userInfo')">
  6. <img :src="userAvatar"
  7. class="user-avatar-circle"></img>
  8. </view>
  9. <!-- <view style="width: 100%;text-align: center;">
  10. <img src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/cmdf_text.png"style="width:55px;height: 16px;" mode="widthFix"></img>
  11. </view>
  12. -->
  13. <view class="personal-user">
  14. <view class="personal-user-level">
  15. {{userLevel}}
  16. </view>
  17. <view class="personal-user-name" @click="openOtherPage('userInfo')">
  18. {{userName}}
  19. </view>
  20. <view style="width: 62px;margin-left: 15px;"> </view>
  21. </view>
  22. </view>
  23. <view style="padding: 0 15px; width: 100%;">
  24. <view class="personal-progress" @click="openOtherPage('member')">
  25. <view class="progress-text">
  26. {{consumption}}
  27. <!-- 累计消费{{spent}}{{startDate}}起至今 -->
  28. </view>
  29. <view class="progress">
  30. <view class="progress-box">
  31. <progress :percent="process" activeColor="#FFAA48" backgroundColor="#ffffff" border-radius="28px" stroke-width="5" />
  32. </view>
  33. </view>
  34. <view class="progress-text" v-if="userLevel!='金卡会员'">
  35. {{promotionDate}}
  36. <text style="font-weight: bold;font-size: 14px;">
  37. 再消费{{amountNeeded}}
  38. </text>即可升级至
  39. <text style="font-weight: bold;font-size: 14px;">{{nextLevel}}</text>
  40. </view>
  41. </view>
  42. </view>
  43. <view class="personal-stat">
  44. <view class="personal-stat-box">
  45. <view class="personal-stat-box-left" @click="openOtherPage('point')">
  46. <view class="personal-stat-box-label">
  47. 积分
  48. </view>
  49. <view class="personal-stat-box-value">
  50. {{point}}
  51. </view>
  52. </view>
  53. <view class="personal-stat-box-right">
  54. <img src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/point.png" alt="point" class="personal-stat-box-img" mode="widthFix"/>
  55. </view>
  56. <view class="personal-stat-box-bottom">
  57. 查看历史明细
  58. </view>
  59. </view>
  60. <view class="personal-stat-box" @click="openOtherPage('collect')">
  61. <view class="personal-stat-box-left">
  62. <view class="personal-stat-box-label">
  63. 集点
  64. </view>
  65. <view class="personal-stat-box-value">
  66. {{collect}}
  67. </view>
  68. </view>
  69. <view class="personal-stat-box-right">
  70. <img src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/collect.png" alt="collect" class="personal-stat-box-img" mode="widthFix"/>
  71. </view>
  72. <view class="personal-stat-box-bottom">
  73. 下单获得好礼
  74. </view>
  75. </view>
  76. <view class="personal-stat-box" @click="openOtherPage('coupon')">
  77. <view class="personal-stat-box-left">
  78. <view class="personal-stat-box-label">
  79. 卡券
  80. </view>
  81. <view class="personal-stat-box-value">
  82. {{coupon}}
  83. </view>
  84. </view>
  85. <view class="personal-stat-box-right">
  86. <img src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/coupon.png" alt="coupon" class="personal-stat-box-img" mode="widthFix"/>
  87. </view>
  88. <view class="personal-stat-box-bottom">
  89. 我的卡券数量
  90. </view>
  91. </view>
  92. </view>
  93. <view class="personal-order">
  94. <uni-card margin="0 15px 10px" :is-shadow="false">
  95. <view class="personal-order-title" slot="title">
  96. <view class="personal-order-title-text">
  97. 订单状态
  98. </view>
  99. <view class="personal-order-title-link" @click="openOtherPage('order')">
  100. 全部订单 <uni-icons type="right" size="14px" color="#AAA"></uni-icons>
  101. </view>
  102. </view>
  103. <view v-if="isMember">
  104. <view style="padding-bottom: 10px;">
  105. <view style="color: #AAA;
  106. font-size: 14px;
  107. text-align: center;
  108. margin-bottom: 10px;">
  109. 当前订单
  110. </view>
  111. <uni-steps :options="orderStatus" active-icon="checkbox" :active="active" active-color='#ffaa48'
  112. />
  113. <view class="uni-steps-btns" v-if="active == 2">
  114. <u-button
  115. type="primary"
  116. shape="circle"
  117. color="#FFAA48"
  118. text="查看图片"
  119. @click="handleStepClick"></u-button>
  120. </view>
  121. </view>
  122. <view class="personal-order-footer" slot="actions">
  123. <view class="personal-order-footer-text">
  124. {{service}}
  125. <view style="color: #AAA;font-size: 12px;"> (本次服务共{{days}}) </view>
  126. </view>
  127. <view class="personal-order-footer-text">
  128. {{amount}}
  129. </view>
  130. </view>
  131. </view>
  132. <view v-else class="personal-order-login-btn" >
  133. <u-button type="primary"
  134. open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber"
  135. shape="circle" :plain="true"
  136. :hairline="true" color="#FFAA48"
  137. text="登录后方可预约"
  138. @click="toRegister"></u-button>
  139. </view>
  140. </uni-card>
  141. </view>
  142. <view class="personal-functions">
  143. <uni-card margin="0 15px 10px" :is-shadow="false">
  144. <view class="personal-function-title" slot="title">
  145. <view class="personal-function-title-text">
  146. 常用功能
  147. </view>
  148. </view>
  149. <view class="personal-functions-content">
  150. <view v-for="(item,index) in functions" :key="index" class="personal-function" @click="openOtherPage(item.path)">
  151. <img :src="item.icon" alt="item.label" style="width: 30px; height: 30px;" mode="widthFix" />
  152. <view class="personal-function-name">{{item.label}}</view>
  153. </view>
  154. </view>
  155. </uni-card>
  156. </view>
  157. </view>
  158. </view>
  159. </template>
  160. <script>
  161. import {getOpenId,getPhoneNumber} from "@/api/system/user.js"
  162. import { setToken,getToken,getOpenIdKey,setOpenIdKey } from '@/utils/auth'
  163. import {getPersonalInfo} from "@/api/system/personal.js"
  164. import { appletOrderDateFrequencyList } from '@/api/order/order.js'
  165. export default{
  166. data(){
  167. return{
  168. userName:'',
  169. userLevel:'',
  170. userAvatar:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/avatar_1.png',
  171. process:0,
  172. spent:0,
  173. cost:0,
  174. consumption:'',
  175. promotion:'',
  176. point:0,
  177. collect:'0/10',
  178. coupon:0,
  179. active: 0,
  180. isMember:false,
  181. orderStatus: [{
  182. activeImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/sentedOrder.png',
  183. deactiveImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/sentOrder.png',
  184. title: '待派单'
  185. }, {
  186. activeImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/ordered.png',
  187. deactiveImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/order.png',
  188. title: '已派单'
  189. }, {
  190. activeImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/serviced.png',
  191. deactiveImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/service.png',
  192. title: '服务中'
  193. }, {
  194. activeImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/overed.png',
  195. deactiveImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/over.png',
  196. title: '已完成'
  197. }],
  198. service:'专业喂养',
  199. days:0,
  200. amount:0,
  201. promotionDate:'2025年01月01日',
  202. nextLevel:'普卡会员',
  203. amountNeeded:'0',
  204. functions:[
  205. {
  206. icon:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/pet.png',
  207. label: '宠物档案',
  208. path:'pet'
  209. },
  210. {
  211. icon:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/serviceFile.png',
  212. label: '服务档案',
  213. path:'service'
  214. },
  215. {
  216. icon:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/address.png',
  217. label: '地址电话',
  218. path:'address'
  219. },
  220. {
  221. icon:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/lock.png',
  222. label: '门锁信息',
  223. path:'lock'
  224. },
  225. {
  226. icon:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/lock.png',
  227. label: '任务中心',
  228. path:'taskList'
  229. },
  230. {
  231. icon:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/lock.png',
  232. label: '邀请绑定',
  233. path:'InvitationCode'
  234. },
  235. ],
  236. orderDateFrequencyList:[],
  237. orderDateFrequencyId : '',
  238. }
  239. },
  240. onShow() {
  241. if (!getToken() || !getOpenIdKey()) {
  242. this.login()
  243. } else{
  244. this.getPersonalInfo()
  245. // this.initVisitor()
  246. }
  247. },
  248. methods: {
  249. onGetPhoneNumber(e){
  250. if(e.detail.errMsg=="getPhoneNumber:fail user deny"){ //用户拒绝授权
  251. //拒绝授权后弹出一些提示
  252. }else{ //允许授权
  253. if(getOpenIdKey()){
  254. this.getPhoneNumber({"openId":getOpenIdKey(),"code":e.detail.code})
  255. }
  256. // debugger
  257. // console.log(e.detail.encryptedData)
  258. // e.detail.encryptedData //加密的用户信息
  259. // e.detail.iv //加密算法的初始向量 时要用到
  260. }
  261. },
  262. getPhoneNumber(data){
  263. getPhoneNumber(data).then(res=>{
  264. if(res&&res.code==200){
  265. let token = res.data.token
  266. setToken(token)
  267. this.isMember=true
  268. } else{
  269. uni.showToast({
  270. icon:'error',
  271. title:'获取手机号失败'
  272. })
  273. }
  274. })
  275. },
  276. login() {
  277. uni.login({
  278. provider: 'weixin',
  279. success: (loginRes) => {
  280. this.getOpenId(loginRes.code)
  281. },
  282. fail: function(error) {
  283. // 授权失败处理
  284. uni.showToast('授权失败,请授权后再试')
  285. }
  286. });
  287. },
  288. getOpenId(code) {
  289. getOpenId(code).then(res => {
  290. if (res.code == 200 && res.data) {
  291. let resData = JSON.parse(res.data)
  292. let token = resData.token;
  293. let openId = resData.openId;
  294. setOpenIdKey(openId)
  295. if(token){
  296. setToken(token)
  297. this.getPersonalInfo()
  298. }else{
  299. this.initVisitor()
  300. }
  301. }
  302. })
  303. },
  304. getPersonalInfo(){
  305. this.$store.commit('getUserInfo')
  306. this.isMember=true
  307. getPersonalInfo().then(res=>{
  308. if(res&&(res.id || res.id === 0)){
  309. this.userLevel=res.level
  310. this.userName=res.nickname
  311. // 设置用户头像,如果有头像则使用,否则使用默认头像
  312. this.userAvatar = res.avatar || 'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/avatar_1.png'
  313. this.consumption=res.consumption
  314. this.promotion=res.promotion
  315. this.process=res.process*100
  316. this.point=res.integral
  317. this.collect=`${res.centralPoint}/10`
  318. this.coupon=res.coupon
  319. this.promotionDate=res.promotionDate
  320. this.nextLevel=res.nextLevel
  321. this.amountNeeded=res.amountNeeded
  322. if(res.h5OrderVO){
  323. let orderInfo= res.h5OrderVO
  324. if(orderInfo.status) {
  325. if(orderInfo.status==1){
  326. this.active = 0
  327. }else if(orderInfo.status==11){
  328. // let date = new Date();
  329. // let currentDate = `${date.getFullYear()}-${("0" + (date.getMonth() + 1)).slice(-2)}-${("0" + date.getDate()).slice(-2)}`;
  330. // let serviceDate= orderInfo.orderServiceList[0]?.serviceDate
  331. // if(serviceDate.indexOf(currentDate)>-1){
  332. // this.active=2
  333. // }else{
  334. // this.active=1
  335. // }
  336. const params = {
  337. orderId: orderInfo.orderId,
  338. pageNumber: this.page,
  339. pageSize: 9999999,
  340. status : 2
  341. };
  342. appletOrderDateFrequencyList(params).then(res => {
  343. if (res && res.data) {
  344. this.active=2
  345. this.orderDateFrequencyList = res.data
  346. for (let index = 0; index < res.data.length; index++) {
  347. const element = res.data[index];
  348. element.list.forEach(n => {
  349. if (n.status == 2) {
  350. this.orderDateFrequencyId = n.id
  351. }
  352. })
  353. }
  354. }
  355. }).catch(err => {
  356. });
  357. }else if(orderInfo.status==3){
  358. this.active = 3
  359. }
  360. this.setOrderInfo(orderInfo)
  361. }else{
  362. this.active = 0
  363. this.amount=0
  364. this.service='专业喂养'
  365. this.days=0
  366. }
  367. }
  368. }
  369. console.log(res)
  370. })
  371. },
  372. initVisitor(){
  373. let currentYear = new Date().getFullYear()
  374. this.userLevel='游客'
  375. this.userName='游客'
  376. this.userAvatar='https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/avatar_1.png'
  377. this.consumption=`累计消费 0 元( ${currentYear}-01-01起至今)`
  378. this.promotion='注册后即可享受会员权益'
  379. this.process=0
  380. this.point=0
  381. this.collect=`0/10`
  382. this.coupon=0
  383. this.active = 0
  384. this.amount=0
  385. this.service='专业喂养'
  386. this.days=0
  387. },
  388. setOrderInfo(orderInfo){
  389. this.amount=orderInfo.totalAmount
  390. this.service=orderInfo.orderItemList[0]?.productName
  391. let serviceDate= orderInfo.orderServiceList[0]?.serviceDate
  392. this.days = JSON.parse(serviceDate).length
  393. },
  394. toRegister(){
  395. this.$modal.showToast('敬请期待');
  396. },
  397. handleStepClick(orderInfo = {}) {
  398. // if(!this.isMember){
  399. // this.$modal.showToast('暂未匹配到您的会员信息,请先注册成为会员!');
  400. // return;
  401. // }
  402. // 如果点击的是服务中状态(索引为2)且当前订单状态也是服务中
  403. // if (e.index === 2 && this.active === 2) {
  404. // 跳转到订单详情页面
  405. uni.navigateTo({
  406. url: `/pages/personalCenter/orderDetailImage?id=${this.orderDateFrequencyId}`
  407. });
  408. // }
  409. },
  410. openOtherPage(type){
  411. if(!this.isMember){
  412. this.$modal.showToast('暂未匹配到您的会员信息,请先注册成为会员!');
  413. return;
  414. }
  415. switch(type){
  416. case 'member':{
  417. // this.$modal.showToast('页面开发中');
  418. uni.navigateTo({
  419. url: `/pages/personalCenter/member`
  420. });
  421. break;
  422. }
  423. case 'point':{
  424. uni.navigateTo({
  425. url: `/pages/personalCenter/point`
  426. });
  427. break;
  428. }
  429. case 'collect':{
  430. uni.navigateTo({
  431. url: `/pages/personalCenter/collect`
  432. });
  433. break;
  434. }
  435. case 'coupon':{
  436. // uni.showToast({
  437. // title: '敬请期待',
  438. // duration: 3000,
  439. // icon:"none"
  440. // })
  441. // this.$modal.showToast('敬请期待');
  442. uni.navigateTo({
  443. url: `/pages/personalCenter/coupon`
  444. });
  445. break;
  446. }
  447. case 'order':{
  448. uni.navigateTo({
  449. // url: `/pages/details/order`
  450. url: `/pages_order/order/orderList`
  451. });
  452. break;
  453. }
  454. case 'pet':{
  455. uni.navigateTo({
  456. url: `/pages/personalCenter/pet`
  457. });
  458. break;
  459. }
  460. case 'lock':{
  461. uni.navigateTo({
  462. url: `/pages/personalCenter/lock`
  463. });
  464. break;
  465. }
  466. case 'service':{
  467. uni.navigateTo({
  468. url: `/pages/personalCenter/service`
  469. });
  470. break;
  471. }
  472. case 'address':{
  473. uni.navigateTo({
  474. url: `/pages/personalCenter/address`
  475. });
  476. break;
  477. }
  478. case 'taskList':{
  479. uni.navigateTo({
  480. url: `/pages_order/task/taskList`
  481. });
  482. break;
  483. }
  484. case 'InvitationCode':{
  485. uni.navigateTo({
  486. url: `/pages_order/mine/InvitationCode`
  487. });
  488. break;
  489. }
  490. case 'userInfo':{
  491. uni.navigateTo({
  492. url: `/pages/personalCenter/userInfo`
  493. });
  494. break;
  495. }
  496. default:this.$modal.showToast('页面开发中');
  497. }
  498. }
  499. }
  500. }
  501. </script>
  502. <style lang="scss">
  503. .personal-index{
  504. .personal-base-info{
  505. display: flex;
  506. justify-content: center;
  507. flex-wrap: wrap;
  508. align-content:flex-start;
  509. width: 100%;
  510. height: 200px;
  511. flex-shrink: 0;
  512. background: linear-gradient(0deg, #F5F5F7 0%, #FFBF60 99.41%);
  513. .personal-user{
  514. display: flex;
  515. justify-content: center;
  516. align-items: center;
  517. margin-top: 10px;
  518. .personal-user-name{
  519. text-align: center;
  520. color: #111;
  521. font-size: 20px;
  522. font-style: normal;
  523. font-weight: blod;
  524. height: 28px;
  525. }
  526. .personal-user-level{
  527. width: 62px;
  528. height: 22px;
  529. line-height: 22px;
  530. background-color: #ffaa48;
  531. color: #FFF;
  532. text-align: center;
  533. font-size: 12px;
  534. font-style: normal;
  535. font-weight: 500;
  536. border-radius: 20px;
  537. border: #FFF solid 1.5px;
  538. margin-right: 15px;
  539. }
  540. }
  541. .personal-progress{
  542. width: 100%;
  543. height: 80px;
  544. flex-shrink: 0;
  545. border-radius: 8px;
  546. border: 1.5px solid #FFF;
  547. padding: 10px;
  548. background: linear-gradient(107deg, #FFE0BF 8.09%, #FFECD7 21.18%, #FFF4E8 32.78%, #FFEFDE 44.88%, #FEEEDB 57.48%);
  549. .progress-text{
  550. color: #B78B43;
  551. text-align: center;
  552. font-size: 12px;
  553. font-style: normal;
  554. font-weight: 400;
  555. line-height: 20px;
  556. }
  557. .progress{
  558. margin: 5px 0;
  559. }
  560. }
  561. }
  562. .personal-stat{
  563. display: flex;
  564. justify-content: space-between;
  565. align-items: center;
  566. padding: 10px 15px;
  567. .personal-stat-box{
  568. width: 30%;
  569. height: 90px;
  570. flex-shrink: 0;
  571. border-radius: 8px;
  572. background: #FFF;
  573. display: flex;
  574. flex-wrap: wrap;
  575. padding: 10px;
  576. .personal-stat-box-right{
  577. width: 50%;
  578. height: 45px;
  579. text-align: right;
  580. .personal-stat-box-img{
  581. width: 34px;
  582. height: 34px;
  583. }
  584. }
  585. .personal-stat-box-left{
  586. width: 50%;
  587. height: 45px;
  588. display:flex;
  589. flex-flow: column; //垂直排列
  590. justify-content: space-between;//两端对齐
  591. .personal-stat-box-label{
  592. color: #111;
  593. font-size: 14px;
  594. font-style: normal;
  595. font-weight: 400;
  596. line-height: 16px;
  597. }
  598. .personal-stat-box-value{
  599. color: #333;
  600. font-size: 16px;
  601. font-style: normal;
  602. font-weight: 500;
  603. line-height: 14px;
  604. }
  605. }
  606. .personal-stat-box-bottom{
  607. width: 100%;
  608. color: #AAA;
  609. font-size: 12px;
  610. font-style: normal;
  611. font-weight: 400;
  612. line-height: normal;
  613. display: flex;
  614. align-items: flex-end;
  615. }
  616. }
  617. }
  618. .uni-steps-btns{
  619. display: flex;
  620. justify-content: center;
  621. .u-button{
  622. width: 160rpx;
  623. height: 55rpx;
  624. margin-right: 155rpx;
  625. .u-button__text{
  626. font-size: 22rpx !important;
  627. }
  628. }
  629. }
  630. .personal-order{
  631. width: 100%;
  632. .personal-order-title{
  633. width: 100%;
  634. display: flex;
  635. justify-content: space-between;
  636. align-items: center;
  637. border-bottom: 1px solid #efefef;
  638. height: 36px;
  639. .personal-order-title-text{
  640. color: #333;
  641. font-size: 15px;
  642. font-style: normal;
  643. font-weight: 500;
  644. line-height: 16px;
  645. }
  646. .personal-order-title-link{
  647. color: #AAA;
  648. font-size: 13px;
  649. font-style: normal;
  650. font-weight: 400;
  651. line-height: 16px;
  652. }
  653. }
  654. .personal-order-footer{
  655. width: 100%;
  656. display: flex;
  657. justify-content: space-between;
  658. align-items: center;
  659. border-top: 1px solid #efefef;
  660. padding-top: 10px;
  661. .personal-order-footer-text{
  662. display: flex;
  663. color: #333;
  664. font-size: 13px;
  665. font-style: normal;
  666. font-weight: 400;
  667. line-height: normal;
  668. }
  669. }
  670. .personal-order-login-btn{
  671. height: 100px;
  672. display: flex;
  673. justify-content: center;
  674. align-items: center;
  675. }
  676. }
  677. }
  678. .personal-functions{
  679. width: 100%;
  680. .personal-function-title{
  681. width: 100%;
  682. display: flex;
  683. justify-content: space-between;
  684. align-items: center;
  685. border-bottom: 1px solid #efefef;
  686. height: 36px;
  687. .personal-function-title-text{
  688. color: #333;
  689. font-size: 15px;
  690. font-style: normal;
  691. font-weight: 500;
  692. line-height: 16px;
  693. }
  694. }
  695. .personal-functions-content{
  696. width: 100%;
  697. display: flex;
  698. // justify-content: space-between;
  699. align-items: center;
  700. flex-wrap: wrap;
  701. gap: 34rpx 0;
  702. .personal-function{
  703. width: 24%;
  704. display: flex;
  705. justify-content: center;
  706. flex-wrap: wrap;
  707. .personal-function-name{
  708. color: #333;
  709. font-size: 14px;
  710. font-style: normal;
  711. font-weight: 400;
  712. line-height: normal;
  713. margin-top: 5px;
  714. }
  715. }
  716. }
  717. }
  718. .user-avatar-circle {
  719. width: 66px;
  720. height: 66px;
  721. border-radius: 50%;
  722. object-fit: cover;
  723. }
  724. </style>