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.

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