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

953 lines
22 KiB

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