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

3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
6 days ago
3 weeks ago
3 weeks ago
3 weeks ago
6 days ago
3 weeks ago
3 weeks ago
3 weeks ago
6 days ago
3 weeks ago
6 days ago
3 weeks ago
6 days ago
3 weeks ago
6 days ago
3 weeks ago
6 days ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
2 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
6 days ago
3 weeks ago
3 weeks ago
3 weeks ago
6 days ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
6 days ago
6 days ago
6 days ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
6 days ago
6 days ago
6 days ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks 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">ID: {{userInfo.intentioCode}}</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">{{totalOrders}}</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" @tap="viewAllOrders">
  74. <view class="section-header">
  75. <text class="title">我的订单</text>
  76. <view class="view-all">
  77. <text>查看全部</text>
  78. <text class="arrow">></text>
  79. </view>
  80. </view>
  81. <view class="order-tabs" @tap.stop>
  82. <view
  83. v-for="(tab, index) in orderTabs"
  84. :key="index"
  85. class="tab-item"
  86. :class="{ active: currentTab === index }"
  87. @tap.stop="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. totalOrders: 0 // 添加累计回收单数字段
  237. }
  238. },
  239. methods: {
  240. async onRefresh() {
  241. console.log('开始刷新')
  242. try {
  243. await this.fetchUserInfo()
  244. console.log('刷新完成')
  245. return true // 返回 true 表示刷新成功
  246. } catch (error) {
  247. console.error('刷新失败', error)
  248. throw error // 抛出错误表示刷新失败
  249. }
  250. },
  251. changeTo(e){
  252. this.value = e
  253. console.log(e,'111')
  254. if(e==0){
  255. uni.reLaunch({
  256. url: '/pages/component/home'
  257. });
  258. }else if(e == 1){
  259. uni.reLaunch({
  260. url: '/pages/component/recycle'
  261. });
  262. }
  263. },
  264. goWithdraw() {
  265. uni.navigateTo({
  266. url: '/pages/subcomponent/wallet'
  267. })
  268. },
  269. viewAllOrders() {
  270. uni.navigateTo({
  271. url: '/pages/subcomponent/order'
  272. })
  273. },
  274. switchTab(index) {
  275. this.currentTab = index
  276. this.fetchOrderList()
  277. },
  278. handleFunction(index) {
  279. const pages = [
  280. // '/pages/subcomponent/promotion',
  281. '/pages/subcomponent/select',
  282. '/pages/subcomponent/admin_faq',
  283. '/pages/subcomponent/edit_profile',
  284. 'logout'
  285. ]
  286. if (pages[index] === 'logout') {
  287. uni.showModal({
  288. title: '提示',
  289. content: '确定要退出登录吗?',
  290. success: (res) => {
  291. if (res.confirm) {
  292. // 执行退出登录逻辑
  293. getApp().globalData.login_status = false;
  294. console.log(getApp().globalData.login_status);
  295. this.login_status = false;
  296. uni.removeStorageSync('token');
  297. }
  298. }
  299. })
  300. return
  301. }
  302. uni.navigateTo({
  303. url: pages[index]
  304. })
  305. },
  306. logout(){
  307. uni.reLaunch({
  308. url: '/pages/index/index'
  309. });
  310. },
  311. onShareCommission() {
  312. uni.showToast({ title: '分享赚佣金', icon: 'none' });
  313. uni.navigateTo({ url: '/pages/subcomponent/promotion' })
  314. },
  315. goOrderManage() {
  316. uni.navigateTo({ url: '/pages/manager/order' })
  317. },
  318. goAppletUserManage() {
  319. uni.navigateTo({ url: '/pages/manager/user' })
  320. },
  321. goStaffManage() {
  322. uni.navigateTo({ url: '/pages/manager/staff' })
  323. },
  324. goTuiManage() {
  325. uni.navigateTo({ url: '/pages/manager/tui' })
  326. },
  327. fetchUserInfo() {
  328. if(uni.getStorageSync('token')){
  329. this.login_status = getApp().globalData.login_status;
  330. this.$api("getUserByToken",{},(res)=>{
  331. if(res.code == 200){
  332. this.userInfo = res.result
  333. }
  334. })
  335. } else {
  336. this.login_status = false;
  337. }
  338. },
  339. fetchOrderList() {
  340. let status = ''
  341. if (this.currentTab === 1) status = 1 // 进行中
  342. if (this.currentTab === 2) status = 3 // 已完成
  343. const params = { pageSize: 1, current: 1 }
  344. if (status !== '') params.status = status
  345. this.$api && this.$api('getOrderListPage', params, res => {
  346. if (res && res.code === 200 && res.result && Array.isArray(res.result.records)) {
  347. this.orderList = res.result.records
  348. // 更新累计回收单数
  349. } else {
  350. this.orderList = []
  351. }
  352. })
  353. },
  354. getTotalOrders(){
  355. this.$api && this.$api('getOrderListPage', {}, res => {
  356. if (res && res.code === 200 && res.result && Array.isArray(res.result.records)) {
  357. // 更新累计回收单数
  358. this.totalOrders = res.result.total || 0
  359. } else {
  360. this.totalOrders = 0
  361. }
  362. })
  363. }
  364. },
  365. computed: {
  366. customStyle() {
  367. return {
  368. // height: '80rpx',
  369. width: '70%',
  370. }
  371. },
  372. bannerList() {
  373. return getApp().globalData.bannerList || []
  374. }
  375. },
  376. onLoad() {
  377. // 移除自动下拉刷新
  378. // uni.startPullDownRefresh()
  379. uni.$on('refreshUserInfo', () => {
  380. this.fetchUserInfo()
  381. })
  382. this.fetchUserInfo()
  383. this.fetchOrderList()
  384. this.getTotalOrders()
  385. uni.$on('bannerListUpdated', () => {
  386. this.$forceUpdate && this.$forceUpdate()
  387. })
  388. if (getApp().globalData.bannerList && getApp().globalData.bannerList.length > 0) {
  389. this.$forceUpdate && this.$forceUpdate()
  390. }
  391. },
  392. onShow() {
  393. this.fetchUserInfo()
  394. this.getTotalOrders()
  395. },
  396. onPullDownRefresh() {
  397. this.fetchUserInfo()
  398. this.getTotalOrders()
  399. setTimeout(() => {
  400. uni.stopPullDownRefresh()
  401. uni.showToast({
  402. title: '刷新成功',
  403. icon: 'success',
  404. duration: 2000
  405. })
  406. }, 1000)
  407. },
  408. onUnload() {
  409. uni.$off('bannerListUpdated')
  410. },
  411. }
  412. </script>
  413. <style lang="scss" scoped>
  414. .container {
  415. min-height: 100vh;
  416. background: #f8f8f8;
  417. padding-bottom: 120rpx;
  418. }
  419. .banner {
  420. height: 400rpx;
  421. background: #ff6b35;
  422. position: relative;
  423. overflow: hidden;
  424. border-radius:0 0 30rpx 30rpx;
  425. .banner-title {
  426. position: absolute;
  427. top: 30%;
  428. left: 20%;
  429. color: #fff;
  430. font-family: DingTalk JinBuTi;
  431. font-weight: 400;
  432. font-style: italic;
  433. font-size: 30px;
  434. line-height: 100%;
  435. letter-spacing: 0%;
  436. vertical-align: bottom;
  437. z-index: 2;
  438. }
  439. .banner-bg {
  440. position: absolute;
  441. width: 100%;
  442. height: 100%;
  443. object-fit: cover;
  444. }
  445. }
  446. .user-card {
  447. margin: -50rpx 30rpx 0;
  448. background: #fff;
  449. border-radius: 24rpx;
  450. padding: 30rpx;
  451. position: relative;
  452. z-index: 2;
  453. // box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
  454. .user-info {
  455. display: flex;
  456. align-items: center;
  457. margin-bottom: 40rpx;
  458. .avatar {
  459. width: 110rpx;
  460. height: 110rpx;
  461. border-radius: 12rpx;
  462. margin-right: 24rpx;
  463. }
  464. .info {
  465. .name {
  466. font-size: 34rpx;
  467. font-weight: 600;
  468. color: #222;
  469. margin-bottom: 12rpx;
  470. display: block;
  471. }
  472. .id {
  473. font-size: 26rpx;
  474. color: #999;
  475. display: flex;
  476. align-items: center;
  477. &::before {
  478. // content: 'ID: ';
  479. color: #999;
  480. margin-right: 4rpx;
  481. }
  482. }
  483. }
  484. }
  485. .wallet-info {
  486. display: flex;
  487. padding: 30rpx;
  488. background: #fff8ea;
  489. border-radius: 16rpx;
  490. position: relative;
  491. &::after {
  492. content: '';
  493. position: absolute;
  494. top: 50%;
  495. left: 50%;
  496. transform: translate(-50%, -50%);
  497. width: 1rpx;
  498. height: 50%;
  499. background: #FFE4D9;
  500. }
  501. .balance {
  502. flex: 1;
  503. padding-right: 30rpx;
  504. .label {
  505. font-size: 26rpx;
  506. color: #999;
  507. margin-bottom: 12rpx;
  508. display: block;
  509. }
  510. .amount {
  511. display: flex;
  512. align-items: baseline;
  513. margin-bottom: 20rpx;
  514. .symbol {
  515. font-size: 30rpx;
  516. color: #FF5B05;
  517. font-weight: normal;
  518. margin-right: 4rpx;
  519. }
  520. .value {
  521. font-size: 46rpx;
  522. font-weight: 600;
  523. color: #FF5B05;
  524. line-height: 1;
  525. }
  526. }
  527. .withdraw-btn {
  528. display: inline-flex;
  529. align-items: center;
  530. padding: 8rpx 16rpx;
  531. background:#fff0d2;
  532. border: 1rpx solid rgba(255, 91, 5, 0.2);
  533. border-radius: 13rpx;
  534. color: #FF5B05;
  535. font-size: 24rpx;
  536. .arrow {
  537. margin-left: 6rpx;
  538. font-family: "PingFang SC";
  539. }
  540. }
  541. }
  542. .recycle-count {
  543. flex: 1;
  544. padding-left: 30rpx;
  545. .label {
  546. font-size: 26rpx;
  547. color: #999;
  548. margin-bottom: 12rpx;
  549. display: block;
  550. }
  551. .count {
  552. display: flex;
  553. align-items: baseline;
  554. .value {
  555. font-size: 46rpx;
  556. font-weight: 600;
  557. color: #222;
  558. line-height: 1;
  559. }
  560. .unit {
  561. font-size: 26rpx;
  562. color: #999;
  563. margin-left: 8rpx;
  564. font-weight: normal;
  565. }
  566. }
  567. }
  568. }
  569. }
  570. .order-section {
  571. margin: 20rpx 30rpx;
  572. background: linear-gradient(to bottom, #fff4e0 0%, #fff 10%);
  573. border-radius: 20rpx;
  574. padding: 20rpx 30rpx;
  575. .section-header {
  576. display: flex;
  577. justify-content: space-between;
  578. align-items: center;
  579. margin-bottom: 30rpx;
  580. .title {
  581. font-size: 34rpx;
  582. font-weight: bold;
  583. color: #333;
  584. }
  585. .view-all {
  586. font-size: 26rpx;
  587. color: #999;
  588. display: flex;
  589. align-items: center;
  590. .arrow {
  591. margin-left: 4rpx;
  592. }
  593. }
  594. }
  595. .order-tabs {
  596. display: flex;
  597. margin-bottom: 30rpx;
  598. background: #f8f8f8;
  599. border-radius: 8rpx;
  600. padding: 4rpx;
  601. .tab-item {
  602. flex: 1;
  603. text-align: center;
  604. padding: 16rpx 0;
  605. position: relative;
  606. color: #666;
  607. font-size: 28rpx;
  608. border-radius: 6rpx;
  609. &.active {
  610. color: #333;
  611. font-weight: bold;
  612. background: #fff;
  613. box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.05);
  614. }
  615. }
  616. }
  617. .order-item {
  618. background: #fff;
  619. border-radius: 16rpx;
  620. padding: 24rpx;
  621. border: none;
  622. box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.02);
  623. .order-header {
  624. margin-bottom: 24rpx;
  625. .order-id {
  626. font-size: 26rpx;
  627. color: #666;
  628. }
  629. }
  630. .order-content {
  631. display: flex;
  632. margin-bottom: 24rpx;
  633. align-items: center;
  634. justify-content: space-between;
  635. position: relative;
  636. &::after {
  637. content: '';
  638. position: absolute;
  639. left: 50%;
  640. top: 50%;
  641. transform: translate(-50%, -50%);
  642. width: 60rpx;
  643. height: 60rpx;
  644. background: #f8f8f8;
  645. border-radius: 50%;
  646. z-index: 1;
  647. }
  648. &::before {
  649. content: '⇌';
  650. position: absolute;
  651. left: 50%;
  652. top: 50%;
  653. transform: translate(-50%, -50%);
  654. color: #999;
  655. font-size: 32rpx;
  656. z-index: 2;
  657. }
  658. .goods-image {
  659. width: 200rpx;
  660. height: 200rpx;
  661. border-radius: 16rpx;
  662. background: #fffbe6;
  663. padding: 20rpx;
  664. box-sizing: border-box;
  665. display: block;
  666. }
  667. .order-info-opt {
  668. width: 200rpx;
  669. min-height: 110rpx;
  670. background: linear-gradient(180deg, #fffbe6 0%, #fff 100%);
  671. border-radius: 16rpx;
  672. display: flex;
  673. flex-direction: column;
  674. align-items: center;
  675. justify-content: space-between;
  676. padding: 24rpx 0 16rpx 0;
  677. box-sizing: border-box;
  678. margin-left: 16rpx;
  679. }
  680. .order-info-top {
  681. display: flex;
  682. flex-direction: column;
  683. align-items: center;
  684. margin-bottom: 8rpx;
  685. }
  686. .order-info-count {
  687. font-size: 32rpx;
  688. color: #222;
  689. font-weight: bold;
  690. margin-bottom: 4rpx;
  691. }
  692. .order-info-price {
  693. font-size: 22rpx;
  694. color: #999;
  695. }
  696. .order-info-estimate {
  697. background: linear-gradient(90deg, #ffd01e 0%, #ff8917 100%);
  698. color: #fff;
  699. font-size: 24rpx;
  700. font-weight: bold;
  701. border-radius: 0 0 16rpx 16rpx;
  702. padding: 12rpx 0;
  703. width: 100%;
  704. text-align: center;
  705. margin-top: 8rpx;
  706. box-shadow: 0 2rpx 8rpx rgba(255, 156, 0, 0.08);
  707. }
  708. }
  709. .order-footer {
  710. display: flex;
  711. align-items: center;
  712. padding: 24rpx;
  713. border-top: 1rpx solid #f5f5f5;
  714. background: #fafafa;
  715. border-radius: 12rpx;
  716. margin: 0 -24rpx -24rpx;
  717. .courier-avatar {
  718. width: 80rpx;
  719. height: 80rpx;
  720. border-radius: 12rpx;
  721. margin-right: 20rpx;
  722. background: #fff;
  723. }
  724. .delivery-info {
  725. flex: 1;
  726. display: flex;
  727. flex-direction: column;
  728. .status {
  729. font-size: 28rpx;
  730. color: #333;
  731. margin-bottom: 8rpx;
  732. font-weight: bold;
  733. }
  734. .time {
  735. font-size: 26rpx;
  736. color: #999;
  737. }
  738. }
  739. }
  740. }
  741. }
  742. .function-list {
  743. margin: 20rpx 30rpx;
  744. background: #fff;
  745. border-radius: 20rpx;
  746. padding: 0 30rpx;
  747. .function-item {
  748. display: flex;
  749. justify-content: space-between;
  750. align-items: center;
  751. padding: 30rpx 0;
  752. border-bottom: 1rpx solid #f5f5f5;
  753. &:last-child {
  754. border-bottom: none;
  755. }
  756. .item-left {
  757. display: flex;
  758. align-items: center;
  759. .icon {
  760. width: 40rpx;
  761. height: 40rpx;
  762. margin-right: 16rpx;
  763. }
  764. text {
  765. font-size: 28rpx;
  766. color: #333;
  767. }
  768. }
  769. .arrow {
  770. color: #999;
  771. font-size: 24rpx;
  772. }
  773. }
  774. }
  775. .tab-bar {
  776. position: fixed;
  777. bottom: 0;
  778. left: 0;
  779. right: 0;
  780. height: 100rpx;
  781. background: #fff;
  782. display: flex;
  783. padding-bottom: env(safe-area-inset-bottom);
  784. border-top: 1rpx solid #f5f5f5;
  785. .tab-item {
  786. flex: 1;
  787. display: flex;
  788. flex-direction: column;
  789. align-items: center;
  790. justify-content: center;
  791. padding: 10rpx 0;
  792. image {
  793. width: 48rpx;
  794. height: 48rpx;
  795. margin-bottom: 6rpx;
  796. }
  797. text {
  798. font-size: 20rpx;
  799. color: #999;
  800. }
  801. &.active {
  802. text {
  803. color: #ff6b35;
  804. }
  805. }
  806. }
  807. }
  808. .user-cards {
  809. margin: -50rpx 30rpx 0;
  810. background: #fff;
  811. border-radius: 24rpx;
  812. padding: 30rpx;
  813. position: relative;
  814. z-index: 2;
  815. box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
  816. .user-info {
  817. display: flex;
  818. align-items: center;
  819. margin-bottom: 40rpx;
  820. .avatars {
  821. width: 110rpx;
  822. height: 110rpx;
  823. border-radius: 50%;
  824. margin-right: 24rpx;
  825. }
  826. }
  827. .info {
  828. .name {
  829. font-size: 34rpx;
  830. font-weight: 600;
  831. color: #222;
  832. margin-bottom: 12rpx;
  833. display: block;
  834. }
  835. }
  836. }
  837. .btns{
  838. width: 100%;
  839. margin: 0 auto;
  840. margin-top: 30%;
  841. display: flex;
  842. flex-direction: column;
  843. justify-content: center;
  844. align-items: center;
  845. .uv-button, .btn{
  846. width: 100%;
  847. height: 100rpx;
  848. background: linear-gradient(90deg, #FFD36D 0%, #FFA800 100%);
  849. color: #fff;
  850. font-size: 36rpx;
  851. border-radius: 50rpx;
  852. font-weight: bold;
  853. display: flex;
  854. align-items: center;
  855. justify-content: center;
  856. box-shadow: 0 4rpx 16rpx rgba(255, 168, 0, 0.08);
  857. border: none;
  858. margin: 0 auto;
  859. }
  860. text{
  861. margin-top: 20rpx;
  862. font-family: PingFang SC;
  863. font-weight: 400;
  864. font-size: 13px;
  865. line-height: 100%;
  866. letter-spacing: 0%;
  867. text-align: center;
  868. color: #a3a3a3;
  869. }
  870. }
  871. .share-commission-card {
  872. width: 90%;
  873. margin: 32rpx auto 24rpx auto;
  874. height: 90rpx;
  875. background: linear-gradient(90deg, #ffd01e 0%, #ff8917 100%);
  876. border-radius: 24rpx;
  877. display: flex;
  878. align-items: center;
  879. justify-content: center;
  880. box-shadow: 0 4rpx 16rpx rgba(255, 156, 0, 0.08);
  881. cursor: pointer;
  882. }
  883. .share-commission-text {
  884. color: #fff;
  885. font-size: 32rpx;
  886. font-weight: bold;
  887. letter-spacing: 2rpx;
  888. }
  889. .manage-list {
  890. margin-bottom: 20rpx;
  891. }
  892. </style>