爱简收旧衣按件回收前端代码仓库
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.

946 lines
23 KiB

3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
  1. <template>
  2. <view class="container" >
  3. <!-- 顶部banner -->
  4. <view class="banner">
  5. <image v-if="myBannerImage" :src="myBannerImage" mode="aspectFill" style="width: 100%; height: 100%;" />
  6. </view>
  7. <view class="user-cards" v-if="!login_status">
  8. <view class="user-info">
  9. <image class="avatars" src="/static/暂未登录 请先登录.png" mode="aspectFill"></image>
  10. <view class="info">
  11. <text class="names">暂未登录请先登录</text>
  12. </view>
  13. </view>
  14. </view>
  15. <view class="btns" v-if="!login_status">
  16. <uv-button
  17. class="btn"
  18. type="primary"
  19. text="立即登录"
  20. :custom-style="customStyle"
  21. color="linear-gradient(to right, rgb(255, 190, 61), rgb(255, 171, 2))"
  22. shape="circle"
  23. @click="logout"
  24. ></uv-button>
  25. <text>暂未登录请先登录</text>
  26. </view>
  27. <!-- 用户信息卡片 -->
  28. <view class="user-card" v-if="login_status">
  29. <view class="user-info">
  30. <image class="avatar" :src="userInfo.headImage" mode="aspectFill"></image>
  31. <view class="info">
  32. <text class="name">{{userInfo.nickName}}</text>
  33. <text class="id">ID: {{userInfo.intentioCode}}</text>
  34. </view>
  35. </view>
  36. <view class="wallet-info">
  37. <view class="balance">
  38. <text class="label">我的余额</text>
  39. <view class="amount">
  40. <text class="symbol">¥</text>
  41. <text class="value">{{userInfo.money}}</text>
  42. </view>
  43. <view class="withdraw-btn" @tap="goWithdraw">
  44. <text>去提现</text>
  45. <uni-icons type="right" size="10" color="#df8155" class="arrow"></uni-icons>
  46. </view>
  47. </view>
  48. <view class="recycle-count">
  49. <text class="label">累计回收</text>
  50. <view class="count">
  51. <text class="value">{{totalOrders}}</text>
  52. <text class="unit"></text>
  53. </view>
  54. </view>
  55. </view>
  56. </view>
  57. <!-- 分享赚佣金模块 -->
  58. <view class="share-commission-card" @tap="onShareCommission" v-if="login_status">
  59. <text class="share-commission-text">分享赚佣金</text>
  60. </view>
  61. <!-- 订单区域 -->
  62. <view class="order-section" v-if="login_status" @tap="viewAllOrders">
  63. <view class="section-header">
  64. <text class="title">我的订单</text>
  65. <view class="view-all">
  66. <text>查看全部</text>
  67. <text class="arrow">></text>
  68. </view>
  69. </view>
  70. <view class="order-tabs" @tap.stop>
  71. <view
  72. v-for="(tab, index) in orderTabs"
  73. :key="index"
  74. class="tab-item"
  75. :class="{ active: currentTab === index }"
  76. @tap.stop="switchTab(index)"
  77. >
  78. <text>{{tab.name}}</text>
  79. <!-- <text class="badge" v-if="tab.badge">{{tab.badge}}</text> -->
  80. </view>
  81. </view>
  82. <!-- 订单列表 -->
  83. <view class="order-list">
  84. <view class="order-item" v-for="order in orderList" :key="order.id">
  85. <view class="order-header">
  86. <text class="order-id">订单编号 {{order.ordeNo}}</text>
  87. </view>
  88. <view class="order-content">
  89. <image class="goods-image" :src="order.image || '/static/回收/衣物.png'" mode="aspectFill"></image>
  90. <view class="order-info-opt">
  91. <view class="order-info-top">
  92. <text class="order-info-count">{{order.num || 1}} </text>
  93. <text class="order-info-price">{{order.onePrice || 0}} /</text>
  94. </view>
  95. <view class="order-info-estimate">
  96. 预估 ¥ {{order.price}}
  97. </view>
  98. </view>
  99. </view>
  100. <view class="order-footer">
  101. <view class="delivery-info">
  102. <text class="status">{{order.status === 0 ? '【在线预约】' : order.status === 1 ? '【快递上门】' : order.status === 2 ? '【透明质检】' : order.status === 3 ? '【现金打款】' : ''}}</text>
  103. <text class="time">{{order.goTime}}</text>
  104. </view>
  105. </view>
  106. </view>
  107. </view>
  108. </view>
  109. <!-- 管理中心列表型卡片 -->
  110. <view
  111. class="function-list manage-list"
  112. v-if="login_status && (userInfo.isOrderRole==='Y' || userInfo.isAppletUserRole==='Y' || userInfo.isUserRole==='Y' || userInfo.isTuiRole==='Y')"
  113. >
  114. <view
  115. class="function-item"
  116. v-if="userInfo.isOrderRole==='Y'"
  117. @tap="goOrderManage"
  118. >
  119. <view class="item-left">
  120. <image class="icon" src="/static/my/订单管理.png" mode="aspectFit"></image>
  121. <text>订单管理</text>
  122. </view>
  123. <uni-icons type="right" size="15"></uni-icons>
  124. </view>
  125. <view
  126. class="function-item"
  127. v-if="userInfo.isAppletUserRole==='Y'"
  128. @tap="goAppletUserManage"
  129. >
  130. <view class="item-left">
  131. <image class="icon" src="/static/my/用户管理.png" mode="aspectFit"></image>
  132. <text>用户管理</text>
  133. </view>
  134. <uni-icons type="right" size="15"></uni-icons>
  135. </view>
  136. <view
  137. class="function-item"
  138. v-if="userInfo.isUserRole==='Y'"
  139. @tap="goStaffManage"
  140. >
  141. <view class="item-left">
  142. <image class="icon" src="/static/my/员工管理.png" mode="aspectFit"></image>
  143. <text>员工管理</text>
  144. </view>
  145. <uni-icons type="right" size="15"></uni-icons>
  146. </view>
  147. <view
  148. class="function-item"
  149. v-if="userInfo.isTuiRole==='Y'"
  150. @tap="goTuiManage"
  151. >
  152. <view class="item-left">
  153. <image class="icon" src="/static/my/推广官管理.png" mode="aspectFit"></image>
  154. <text>推广官管理</text>
  155. </view>
  156. <uni-icons type="right" size="15"></uni-icons>
  157. </view>
  158. </view>
  159. <!-- 功能列表 -->
  160. <view class="function-list" v-if="login_status">
  161. <view class="function-item" v-for="(item, index) in functionList" :key="index" @tap="handleFunction(index)">
  162. <view class="item-left">
  163. <image class="icon" :src="item.icon" mode="aspectFit"></image>
  164. <text>{{item.name}}</text>
  165. </view>
  166. <uni-icons type="right" size="15"></uni-icons>
  167. </view>
  168. </view>
  169. <!-- 根据角色显示不同的导航栏 -->
  170. <uv-tabbar
  171. :value="value"
  172. :fixed="true"
  173. @change="changeTo"
  174. >
  175. <uv-tabbar-item text="首页" >
  176. <template v-slot:active-icon>
  177. <image class="icon" src="/static/home/首页-点击.png"></image>
  178. </template>
  179. <template v-slot:inactive-icon>
  180. <image class="icon" src="/static/home/首页-未点击.png"></image>
  181. </template>
  182. </uv-tabbar-item>
  183. <uv-tabbar-item text="回收" >
  184. <template v-slot:active-icon>
  185. <image class="icon" src="/static/home/回收-点击.png"></image>
  186. </template>
  187. <template v-slot:inactive-icon>
  188. <image class="icon" src="/static/home/回收-未点击.png"></image>
  189. </template>
  190. </uv-tabbar-item>
  191. <uv-tabbar-item text="我的" >
  192. <template v-slot:active-icon>
  193. <image class="icon" src="/static/home/我的-点击.png"></image>
  194. </template>
  195. <template v-slot:inactive-icon>
  196. <image class="icon" src="/static/home/我的-未点击.png"></image>
  197. </template>
  198. </uv-tabbar-item>
  199. </uv-tabbar>
  200. </view>
  201. </template>
  202. <script>
  203. import pullRefreshMixin from '@/pages/mixins/pullRefreshMixin.js'
  204. export default {
  205. mixins: [pullRefreshMixin],
  206. data() {
  207. return {
  208. value:2,
  209. currentTab: 1,
  210. login_status:false,
  211. userInfo:{},
  212. orderTabs: [
  213. { name: '全部' },
  214. { name: '进行中', badge: '2' },
  215. { name: '已完成' }
  216. ],
  217. functionList: [
  218. // { name: '推广官', icon: '/static/my/promote.png' },
  219. { name: '我的地址', icon: '/static/my/地址.png' },
  220. { name: '联系客服', icon: '/static/my/客服.png' },
  221. { name: '修改信息', icon: '/static/my/修改信息.png' },
  222. { name: '退出登录', icon: '/static/my/退出登录.png' }
  223. ],
  224. orderList: [],
  225. totalOrders: 0 // 添加累计回收单数字段
  226. }
  227. },
  228. methods: {
  229. async onRefresh() {
  230. console.log('开始刷新')
  231. try {
  232. await this.fetchUserInfo()
  233. console.log('刷新完成')
  234. return true // 返回 true 表示刷新成功
  235. } catch (error) {
  236. console.error('刷新失败', error)
  237. throw error // 抛出错误表示刷新失败
  238. }
  239. },
  240. changeTo(e){
  241. this.value = e
  242. console.log(e,'111')
  243. if(e==0){
  244. uni.reLaunch({
  245. url: '/pages/component/home'
  246. });
  247. }else if(e == 1){
  248. uni.reLaunch({
  249. url: '/pages/component/recycle'
  250. });
  251. }
  252. },
  253. goWithdraw() {
  254. uni.navigateTo({
  255. url: '/pages/subcomponent/wallet'
  256. })
  257. },
  258. viewAllOrders() {
  259. uni.navigateTo({
  260. url: '/pages/subcomponent/order'
  261. })
  262. },
  263. switchTab(index) {
  264. this.currentTab = index
  265. this.fetchOrderList()
  266. },
  267. handleFunction(index) {
  268. const pages = [
  269. // '/pages/subcomponent/promotion',
  270. '/pages/subcomponent/select',
  271. '/pages/subcomponent/admin_faq',
  272. '/pages/subcomponent/edit_profile',
  273. 'logout'
  274. ]
  275. if (pages[index] === 'logout') {
  276. uni.showModal({
  277. title: '提示',
  278. content: '确定要退出登录吗?',
  279. success: (res) => {
  280. if (res.confirm) {
  281. // 执行退出登录逻辑
  282. getApp().globalData.login_status = false;
  283. console.log(getApp().globalData.login_status);
  284. this.login_status = false;
  285. uni.removeStorageSync('token');
  286. }
  287. }
  288. })
  289. return
  290. }
  291. uni.navigateTo({
  292. url: pages[index]
  293. })
  294. },
  295. logout(){
  296. uni.reLaunch({
  297. url: '/pages/index/index'
  298. });
  299. },
  300. onShareCommission() {
  301. uni.showToast({ title: '分享赚佣金', icon: 'none' });
  302. uni.navigateTo({ url: '/pages/subcomponent/promotion' })
  303. },
  304. goOrderManage() {
  305. uni.navigateTo({ url: '/pages/manager/order' })
  306. },
  307. goAppletUserManage() {
  308. uni.navigateTo({ url: '/pages/manager/user' })
  309. },
  310. goStaffManage() {
  311. uni.navigateTo({ url: '/pages/manager/staff' })
  312. },
  313. goTuiManage() {
  314. uni.navigateTo({ url: '/pages/manager/tui' })
  315. },
  316. fetchUserInfo() {
  317. if(uni.getStorageSync('token')){
  318. this.login_status = getApp().globalData.login_status;
  319. this.$api("getUserByToken",{},(res)=>{
  320. if(res.code == 200){
  321. this.userInfo = res.result
  322. }
  323. })
  324. } else {
  325. this.login_status = false;
  326. }
  327. },
  328. fetchOrderList() {
  329. let status = ''
  330. if (this.currentTab === 1) status = 1 // 进行中
  331. if (this.currentTab === 2) status = 3 // 已完成
  332. const params = { pageSize: 1, current: 1 }
  333. if (status !== '') params.status = status
  334. this.$api && this.$api('getOrderListPage', params, res => {
  335. if (res && res.code === 200 && res.result && Array.isArray(res.result.records)) {
  336. this.orderList = res.result.records
  337. // 更新累计回收单数
  338. } else {
  339. this.orderList = []
  340. }
  341. })
  342. },
  343. getTotalOrders(){
  344. this.$api && this.$api('getOrderListPage', {}, res => {
  345. if (res && res.code === 200 && res.result && Array.isArray(res.result.records)) {
  346. // 更新累计回收单数
  347. this.totalOrders = res.result.total || 0
  348. } else {
  349. this.totalOrders = 0
  350. }
  351. })
  352. }
  353. },
  354. computed: {
  355. customStyle() {
  356. return {
  357. // height: '80rpx',
  358. width: '70%',
  359. }
  360. },
  361. bannerList() {
  362. return getApp().globalData.bannerList || []
  363. },
  364. myBannerImage() {
  365. const banner = (getApp().globalData.bannerList || []).find(item => item.title === '我的-轮播图');
  366. return banner ? banner.image : '';
  367. }
  368. },
  369. onLoad() {
  370. // 移除自动下拉刷新
  371. // uni.startPullDownRefresh()
  372. uni.$on('refreshUserInfo', () => {
  373. this.fetchUserInfo()
  374. })
  375. this.fetchUserInfo()
  376. this.fetchOrderList()
  377. this.getTotalOrders()
  378. uni.$on('bannerListUpdated', () => {
  379. this.$forceUpdate && this.$forceUpdate()
  380. })
  381. if (getApp().globalData.bannerList && getApp().globalData.bannerList.length > 0) {
  382. this.$forceUpdate && this.$forceUpdate()
  383. }
  384. },
  385. onShow() {
  386. this.fetchUserInfo()
  387. this.getTotalOrders()
  388. },
  389. onPullDownRefresh() {
  390. this.fetchUserInfo()
  391. this.getTotalOrders()
  392. setTimeout(() => {
  393. uni.stopPullDownRefresh()
  394. uni.showToast({
  395. title: '刷新成功',
  396. icon: 'success',
  397. duration: 2000
  398. })
  399. }, 1000)
  400. },
  401. onUnload() {
  402. uni.$off('bannerListUpdated')
  403. },
  404. }
  405. </script>
  406. <style lang="scss" scoped>
  407. .container {
  408. min-height: 100vh;
  409. background: #f8f8f8;
  410. padding-bottom: 120rpx;
  411. }
  412. .banner {
  413. height: 400rpx;
  414. background: #ff6b35;
  415. position: relative;
  416. overflow: hidden;
  417. border-radius:0 0 30rpx 30rpx;
  418. .banner-title {
  419. position: absolute;
  420. top: 30%;
  421. left: 20%;
  422. color: #fff;
  423. font-family: DingTalk JinBuTi;
  424. font-weight: 400;
  425. font-style: italic;
  426. font-size: 30px;
  427. line-height: 100%;
  428. letter-spacing: 0%;
  429. vertical-align: bottom;
  430. z-index: 2;
  431. }
  432. .banner-bg {
  433. position: absolute;
  434. width: 100%;
  435. height: 100%;
  436. object-fit: cover;
  437. }
  438. }
  439. .user-card {
  440. margin: -50rpx 30rpx 0;
  441. background: #fff;
  442. border-radius: 24rpx;
  443. padding: 30rpx;
  444. position: relative;
  445. z-index: 2;
  446. // box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
  447. .user-info {
  448. display: flex;
  449. align-items: center;
  450. margin-bottom: 40rpx;
  451. .avatar {
  452. width: 110rpx;
  453. height: 110rpx;
  454. border-radius: 12rpx;
  455. margin-right: 24rpx;
  456. }
  457. .info {
  458. .name {
  459. font-size: 34rpx;
  460. font-weight: 600;
  461. color: #222;
  462. margin-bottom: 12rpx;
  463. display: block;
  464. }
  465. .id {
  466. font-size: 26rpx;
  467. color: #999;
  468. display: flex;
  469. align-items: center;
  470. &::before {
  471. // content: 'ID: ';
  472. color: #999;
  473. margin-right: 4rpx;
  474. }
  475. }
  476. }
  477. }
  478. .wallet-info {
  479. display: flex;
  480. padding: 30rpx;
  481. background: #fff8ea;
  482. border-radius: 16rpx;
  483. position: relative;
  484. &::after {
  485. content: '';
  486. position: absolute;
  487. top: 50%;
  488. left: 50%;
  489. transform: translate(-50%, -50%);
  490. width: 1rpx;
  491. height: 50%;
  492. background: #FFE4D9;
  493. }
  494. .balance {
  495. flex: 1;
  496. padding-right: 30rpx;
  497. .label {
  498. font-size: 26rpx;
  499. color: #999;
  500. margin-bottom: 12rpx;
  501. display: block;
  502. }
  503. .amount {
  504. display: flex;
  505. align-items: baseline;
  506. margin-bottom: 20rpx;
  507. .symbol {
  508. font-size: 30rpx;
  509. color: #FF5B05;
  510. font-weight: normal;
  511. margin-right: 4rpx;
  512. }
  513. .value {
  514. font-size: 46rpx;
  515. font-weight: 600;
  516. color: #FF5B05;
  517. line-height: 1;
  518. }
  519. }
  520. .withdraw-btn {
  521. display: inline-flex;
  522. align-items: center;
  523. padding: 8rpx 16rpx;
  524. background:#fff0d2;
  525. border: 1rpx solid rgba(255, 91, 5, 0.2);
  526. border-radius: 13rpx;
  527. color: #FF5B05;
  528. font-size: 24rpx;
  529. .arrow {
  530. margin-left: 6rpx;
  531. font-family: "PingFang SC";
  532. }
  533. }
  534. }
  535. .recycle-count {
  536. flex: 1;
  537. padding-left: 30rpx;
  538. .label {
  539. font-size: 26rpx;
  540. color: #999;
  541. margin-bottom: 12rpx;
  542. display: block;
  543. }
  544. .count {
  545. display: flex;
  546. align-items: baseline;
  547. .value {
  548. font-size: 46rpx;
  549. font-weight: 600;
  550. color: #222;
  551. line-height: 1;
  552. }
  553. .unit {
  554. font-size: 26rpx;
  555. color: #999;
  556. margin-left: 8rpx;
  557. font-weight: normal;
  558. }
  559. }
  560. }
  561. }
  562. }
  563. .order-section {
  564. margin: 20rpx 30rpx;
  565. background: linear-gradient(to bottom, #fff4e0 0%, #fff 10%);
  566. border-radius: 20rpx;
  567. padding: 20rpx 30rpx;
  568. .section-header {
  569. display: flex;
  570. justify-content: space-between;
  571. align-items: center;
  572. margin-bottom: 30rpx;
  573. .title {
  574. font-size: 34rpx;
  575. font-weight: bold;
  576. color: #333;
  577. }
  578. .view-all {
  579. font-size: 26rpx;
  580. color: #999;
  581. display: flex;
  582. align-items: center;
  583. .arrow {
  584. margin-left: 4rpx;
  585. }
  586. }
  587. }
  588. .order-tabs {
  589. display: flex;
  590. margin-bottom: 30rpx;
  591. background: #f8f8f8;
  592. border-radius: 8rpx;
  593. padding: 4rpx;
  594. .tab-item {
  595. flex: 1;
  596. text-align: center;
  597. padding: 16rpx 0;
  598. position: relative;
  599. color: #666;
  600. font-size: 28rpx;
  601. border-radius: 6rpx;
  602. &.active {
  603. color: #333;
  604. font-weight: bold;
  605. background: #fff;
  606. box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.05);
  607. }
  608. }
  609. }
  610. .order-item {
  611. background: #fff;
  612. border-radius: 16rpx;
  613. padding: 24rpx;
  614. border: none;
  615. box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.02);
  616. .order-header {
  617. margin-bottom: 24rpx;
  618. .order-id {
  619. font-size: 26rpx;
  620. color: #666;
  621. }
  622. }
  623. .order-content {
  624. display: flex;
  625. margin-bottom: 24rpx;
  626. align-items: center;
  627. justify-content: space-between;
  628. position: relative;
  629. &::after {
  630. content: '';
  631. position: absolute;
  632. left: 50%;
  633. top: 50%;
  634. transform: translate(-50%, -50%);
  635. width: 60rpx;
  636. height: 60rpx;
  637. background: #f8f8f8;
  638. border-radius: 50%;
  639. z-index: 1;
  640. }
  641. &::before {
  642. content: '⇌';
  643. position: absolute;
  644. left: 50%;
  645. top: 50%;
  646. transform: translate(-50%, -50%);
  647. color: #999;
  648. font-size: 32rpx;
  649. z-index: 2;
  650. }
  651. .goods-image {
  652. width: 200rpx;
  653. height: 200rpx;
  654. border-radius: 16rpx;
  655. background: #fffbe6;
  656. padding: 20rpx;
  657. box-sizing: border-box;
  658. display: block;
  659. }
  660. .order-info-opt {
  661. width: 200rpx;
  662. min-height: 110rpx;
  663. background: linear-gradient(180deg, #fffbe6 0%, #fff 100%);
  664. border-radius: 16rpx;
  665. display: flex;
  666. flex-direction: column;
  667. align-items: center;
  668. justify-content: space-between;
  669. padding: 24rpx 0 16rpx 0;
  670. box-sizing: border-box;
  671. margin-left: 16rpx;
  672. }
  673. .order-info-top {
  674. display: flex;
  675. flex-direction: column;
  676. align-items: center;
  677. margin-bottom: 8rpx;
  678. }
  679. .order-info-count {
  680. font-size: 32rpx;
  681. color: #222;
  682. font-weight: bold;
  683. margin-bottom: 4rpx;
  684. }
  685. .order-info-price {
  686. font-size: 22rpx;
  687. color: #999;
  688. }
  689. .order-info-estimate {
  690. background: linear-gradient(90deg, #ffd01e 0%, #ff8917 100%);
  691. color: #fff;
  692. font-size: 24rpx;
  693. font-weight: bold;
  694. border-radius: 0 0 16rpx 16rpx;
  695. padding: 12rpx 0;
  696. width: 100%;
  697. text-align: center;
  698. margin-top: 8rpx;
  699. box-shadow: 0 2rpx 8rpx rgba(255, 156, 0, 0.08);
  700. }
  701. }
  702. .order-footer {
  703. display: flex;
  704. align-items: center;
  705. padding: 24rpx;
  706. border-top: 1rpx solid #f5f5f5;
  707. background: #fafafa;
  708. border-radius: 12rpx;
  709. margin: 0 -24rpx -24rpx;
  710. .courier-avatar {
  711. width: 80rpx;
  712. height: 80rpx;
  713. border-radius: 12rpx;
  714. margin-right: 20rpx;
  715. background: #fff;
  716. }
  717. .delivery-info {
  718. flex: 1;
  719. display: flex;
  720. flex-direction: column;
  721. .status {
  722. font-size: 28rpx;
  723. color: #333;
  724. margin-bottom: 8rpx;
  725. font-weight: bold;
  726. }
  727. .time {
  728. font-size: 26rpx;
  729. color: #999;
  730. }
  731. }
  732. }
  733. }
  734. }
  735. .function-list {
  736. margin: 20rpx 30rpx;
  737. background: #fff;
  738. border-radius: 20rpx;
  739. padding: 0 30rpx;
  740. .function-item {
  741. display: flex;
  742. justify-content: space-between;
  743. align-items: center;
  744. padding: 30rpx 0;
  745. border-bottom: 1rpx solid #f5f5f5;
  746. &:last-child {
  747. border-bottom: none;
  748. }
  749. .item-left {
  750. display: flex;
  751. align-items: center;
  752. .icon {
  753. width: 40rpx;
  754. height: 40rpx;
  755. margin-right: 16rpx;
  756. }
  757. text {
  758. font-size: 28rpx;
  759. color: #333;
  760. }
  761. }
  762. .arrow {
  763. color: #999;
  764. font-size: 24rpx;
  765. }
  766. }
  767. }
  768. .tab-bar {
  769. position: fixed;
  770. bottom: 0;
  771. left: 0;
  772. right: 0;
  773. height: 100rpx;
  774. background: #fff;
  775. display: flex;
  776. padding-bottom: env(safe-area-inset-bottom);
  777. border-top: 1rpx solid #f5f5f5;
  778. .tab-item {
  779. flex: 1;
  780. display: flex;
  781. flex-direction: column;
  782. align-items: center;
  783. justify-content: center;
  784. padding: 10rpx 0;
  785. image {
  786. width: 48rpx;
  787. height: 48rpx;
  788. margin-bottom: 6rpx;
  789. }
  790. text {
  791. font-size: 20rpx;
  792. color: #999;
  793. }
  794. &.active {
  795. text {
  796. color: #ff6b35;
  797. }
  798. }
  799. }
  800. }
  801. .user-cards {
  802. margin: -50rpx 30rpx 0;
  803. background: #fff;
  804. border-radius: 24rpx;
  805. padding: 30rpx;
  806. position: relative;
  807. z-index: 2;
  808. box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
  809. .user-info {
  810. display: flex;
  811. align-items: center;
  812. margin-bottom: 40rpx;
  813. .avatars {
  814. width: 110rpx;
  815. height: 110rpx;
  816. border-radius: 50%;
  817. margin-right: 24rpx;
  818. }
  819. }
  820. .info {
  821. .name {
  822. font-size: 34rpx;
  823. font-weight: 600;
  824. color: #222;
  825. margin-bottom: 12rpx;
  826. display: block;
  827. }
  828. }
  829. }
  830. .btns{
  831. width: 100%;
  832. margin: 0 auto;
  833. margin-top: 30%;
  834. display: flex;
  835. flex-direction: column;
  836. justify-content: center;
  837. align-items: center;
  838. .uv-button, .btn{
  839. width: 100%;
  840. height: 100rpx;
  841. background: linear-gradient(90deg, #FFD36D 0%, #FFA800 100%);
  842. color: #fff;
  843. font-size: 36rpx;
  844. border-radius: 50rpx;
  845. font-weight: bold;
  846. display: flex;
  847. align-items: center;
  848. justify-content: center;
  849. box-shadow: 0 4rpx 16rpx rgba(255, 168, 0, 0.08);
  850. border: none;
  851. margin: 0 auto;
  852. }
  853. text{
  854. margin-top: 20rpx;
  855. font-family: PingFang SC;
  856. font-weight: 400;
  857. font-size: 13px;
  858. line-height: 100%;
  859. letter-spacing: 0%;
  860. text-align: center;
  861. color: #a3a3a3;
  862. }
  863. }
  864. .share-commission-card {
  865. width: 90%;
  866. margin: 32rpx auto 24rpx auto;
  867. height: 90rpx;
  868. background: linear-gradient(90deg, #ffd01e 0%, #ff8917 100%);
  869. border-radius: 24rpx;
  870. display: flex;
  871. align-items: center;
  872. justify-content: center;
  873. box-shadow: 0 4rpx 16rpx rgba(255, 156, 0, 0.08);
  874. cursor: pointer;
  875. }
  876. .share-commission-text {
  877. color: #fff;
  878. font-size: 32rpx;
  879. font-weight: bold;
  880. letter-spacing: 2rpx;
  881. }
  882. .manage-list {
  883. margin-bottom: 20rpx;
  884. }
  885. </style>