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

800 lines
21 KiB

2 months ago
2 months ago
2 months ago
2 months ago
1 month ago
2 months ago
1 month ago
1 month ago
2 months ago
1 month ago
1 month ago
2 months ago
1 month ago
1 month ago
2 months ago
2 months ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
1 month ago
2 months ago
1 month ago
1 month ago
2 months ago
2 months ago
1 month ago
2 months ago
2 months ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
1 month ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
1 month ago
2 months ago
  1. <template>
  2. <view class="promotion-page">
  3. <!-- 顶部渐变导航栏 -->
  4. <view class="nav-bar" :style="{height: navBarTotalHeight + 'px', paddingTop: statusBarHeight + 'px'}">
  5. <view class="nav-bar-inner">
  6. <view class="back-icon" @tap="navigateBack">
  7. <uni-icons type="left" size="22" color="#222" />
  8. </view>
  9. <view class="nav-bar-title">回收侠·推客联盟</view>
  10. <view class="nav-bar-right">
  11. <uni-icons type="more-filled" size="22" color="#222" />
  12. </view>
  13. </view>
  14. </view>
  15. <!-- 打钩标签区 -->
  16. <view class="feature-tags" :style="{marginTop: navBarTotalHeight+statusBarHeight + 'px'}">
  17. <view class="tag" v-for="(t, i) in featureTags" :key="i">
  18. <text class="check"></text>
  19. <text class="text">{{t}}</text>
  20. </view>
  21. </view>
  22. <!-- 主内容区卡片悬浮覆盖打钩区 -->
  23. <view class="main-content">
  24. <!-- 用户卡片 -->
  25. <view class="user-card">
  26. <view class="user-info-row">
  27. <view class="avatar-box">
  28. <view class="avatar-frame">
  29. <image class="avatar-img" :src="userInfo.avatar" mode="aspectFill" />
  30. <view class="user-type">{{userInfo.type}}</view>
  31. </view>
  32. </view>
  33. <view class="user-meta">
  34. <view class="nickname">{{userInfo.name}}</view>
  35. <view class="userid">ID: {{userInfo.intentioCode}}</view>
  36. </view>
  37. <view class="user-count">推广人数</view>
  38. </view>
  39. <view class="user-stats-row">
  40. <view class="stat-block">
  41. <view class="stat-label">可提现佣金()</view>
  42. <view class="stat-value main">{{userInfo.money}}</view>
  43. <button class="withdraw-btn" @click="goWithdraw">提现</button>
  44. </view>
  45. <view class="stat-divider"></view>
  46. <view class="stat-block">
  47. <view class="stat-label">累计提现()</view>
  48. <view class="stat-value">{{userInfo.integerPrice}}</view>
  49. <button class="record-btn" @click="goWithdrawRecord">提现记录</button>
  50. </view>
  51. </view>
  52. <view class="bottom-menu-row">
  53. <view class="menu-item" @tap="goProfitDetail">
  54. <view class="menu-icon red">
  55. <uni-icons type="wallet" size="32" color="#fff" />
  56. </view>
  57. <text class="menu-text">收益明细</text>
  58. </view>
  59. <view class="menu-item" @tap="goTeam">
  60. <view class="menu-icon blue">
  61. <uni-icons type="person" size="32" color="#fff" />
  62. </view>
  63. <text class="menu-text">我的团队</text>
  64. </view>
  65. </view>
  66. </view>
  67. <!-- 推广排行榜 -->
  68. <view class="rank-section">
  69. <view class="rank-title">推广排行榜</view>
  70. <view class="rank-list">
  71. <view class="rank-item" v-for="(item, idx) in rankList.slice(0, 5)" :key="idx">
  72. <view class="rank-icon">
  73. <image v-if="idx<3" :src="getRankIcon(idx+1)" class="crown" mode="aspectFit" />
  74. <image v-else :src="getRankIcon(idx+1)" class="num-icon" mode="aspectFit" />
  75. </view>
  76. <image class="rank-avatar" :src="item.headImage" mode="aspectFill" />
  77. <text class="rank-phone">{{item.nickName}}</text>
  78. <text class="rank-amount">¥{{item.price}}</text>
  79. </view>
  80. </view>
  81. </view>
  82. <!-- 权益说明表格 -->
  83. <view class="rights-section">
  84. <view class="rights-title">权益说明</view>
  85. <view class="rights-table">
  86. <view class="table-header">
  87. <view class="th" v-for="(h, i) in rightsHeader" :key="i">{{h}}</view>
  88. </view>
  89. <view class="table-row" v-for="(row, i) in rightsRows" :key="i">
  90. <view class="td" v-for="(cell, j) in row" :key="j">
  91. <text v-if="cell==='✓'" class="cell-check"></text>
  92. <text v-else-if="cell==='X'" class="cell-x">X</text>
  93. <text v-else>{{cell}}</text>
  94. </view>
  95. </view>
  96. </view>
  97. </view>
  98. <!-- 联系客服二维码 -->
  99. <view class="qrcode-section">
  100. <view class="qrcode-title">联系客服</view>
  101. <image class="qrcode-img" :src="qrcodeUrl" mode="aspectFit" />
  102. </view>
  103. </view>
  104. <!-- 底部按钮区 -->
  105. <view class="bottom-btns">
  106. <button class="btn gray" @tap="goQrcode">我的二维码</button>
  107. <button class="btn green" @tap="goUpgrade" v-if="status===''">立即升级推广官</button>
  108. <button class="btn gray" v-if="status==0" @tap="showProgressModal = true">查看申请进度</button>
  109. </view>
  110. <!-- 申请进度弹窗 -->
  111. <view v-if="showProgressModal" class="progress-modal-mask">
  112. <view class="progress-modal-box">
  113. <view class="progress-modal-title">联系运营商\n升级解锁更多权益</view>
  114. <view class="progress-modal-list">
  115. <view class="progress-modal-item" @tap="goToFaq">
  116. <text>在线客服</text>
  117. <uni-icons type="right" size="22" color="#bbb" />
  118. </view>
  119. <view class="progress-modal-item" @tap="goToFaq">
  120. <text>客服电话</text>
  121. <uni-icons type="right" size="22" color="#bbb" />
  122. </view>
  123. </view>
  124. <button class="progress-modal-btn" @tap="showProgressModal = false">我知道了</button>
  125. </view>
  126. </view>
  127. </view>
  128. </template>
  129. <script>
  130. import pullRefreshMixin from '@/pages/mixins/pullRefreshMixin.js'
  131. export default {
  132. mixins: [pullRefreshMixin],
  133. data() {
  134. return {
  135. statusBarHeight: 0,
  136. navBarHeight: 44, // px
  137. navBarTotalHeight: 44, // px
  138. featureTags: ['收益高', '品类全', '到账快', '城市多'],
  139. userInfo: {
  140. avatar: '',
  141. name: '',
  142. id: '',
  143. type: '',
  144. balance: '',
  145. totalWithdraw: '',
  146. },
  147. tabActive: 0,
  148. rankList: [
  149. ],
  150. rightsHeader: ['推广锁粉权限', '用户', '推广官', '合伙人'],
  151. rightsRows: [
  152. ['推广锁粉权限', 'X', '✓', '✓'],
  153. ['直接推广收益', 'X', '20%', '20%'],
  154. ['间接推广收益', 'X', 'X', '5%'],
  155. ['官方群服务', 'X', '20%', '25%'],
  156. ['推广课程支持', 'X', '5%', '25%'],
  157. ['推广工具包', 'X', '20%', '25%'],
  158. ['VIP专属客服', 'X', 'X', '25%'],
  159. ['收益模式', 'X', '5%', '主动收益'],
  160. ['线下沙龙', 'X', '✓', '主动收益'],
  161. ],
  162. status: 0,
  163. showProgressModal: false
  164. }
  165. },
  166. computed: {
  167. qrcodeUrl() {
  168. console.log(getApp().globalData.configData,'getApp().globalData.configData')
  169. const item = getApp().globalData.configData.find(i => i.keyName === 'kefu_code')
  170. return item ? item.keyContent : ''
  171. },
  172. },
  173. onLoad() {
  174. const sysInfo = uni.getSystemInfoSync()
  175. this.statusBarHeight = sysInfo.statusBarHeight
  176. this.navBarHeight = 44
  177. this.navBarTotalHeight = this.statusBarHeight + this.navBarHeight
  178. this.getUserInfoByToken()
  179. this.getRankList()
  180. this.getMyPromotionInfo()
  181. },
  182. onShow(){
  183. this.getMyPromotionInfo()
  184. },
  185. onPullDownRefresh() {
  186. this.getUserInfoByToken()
  187. uni.stopPullDownRefresh()
  188. },
  189. methods: {
  190. async onRefresh() {
  191. // 模拟刷新数据
  192. await new Promise(resolve => setTimeout(resolve, 1000))
  193. uni.stopPullRefresh()
  194. },
  195. navigateBack() {
  196. uni.navigateBack()
  197. },
  198. getRankIcon(idx) {
  199. return `/static/tui/${idx}.png`
  200. },
  201. goQrcode() {
  202. uni.navigateTo({ url: '/pages/subcomponent/promo-qrcode' })
  203. },
  204. goUpgrade() {
  205. uni.navigateTo({ url: '/pages/subcomponent/upgrad' })
  206. },
  207. getUserInfoByToken() {
  208. this.$api('getUserByToken', {}, (res) => {
  209. if (res && res.success && res.result) {
  210. this.userInfo.avatar = res.result.headImage || ''
  211. this.userInfo.name = res.result.nickName || ''
  212. this.userInfo.id = res.result.id || ''
  213. this.userInfo.intentioCode = res.result.intentioCode || ''
  214. this.userInfo.money = res.result.money || ''
  215. this.userInfo.integerPrice = res.result.integerPrice || ''
  216. // 你可以根据实际接口补充type、balance、totalWithdraw等字段
  217. }
  218. })
  219. },
  220. goWithdrawRecord() {
  221. uni.navigateTo({ url: '/pages/subcomponent/promotion-withdraw-record' })
  222. },
  223. goWithdraw() {
  224. uni.navigateTo({ url: '/pages/subcomponent/withdraw?fromPromotion=true' })
  225. },
  226. goProfitDetail() {
  227. uni.navigateTo({ url: '/pages/subcomponent/promotion-profit-detail' })
  228. },
  229. goTeam() {
  230. uni.navigateTo({ url: '/pages/subcomponent/promotion-team' })
  231. },
  232. getRankList(){
  233. this.$api('getRankList', {}, (res) => {
  234. if (res && res.success && res.result) {
  235. this.rankList = res.result.records || []
  236. }
  237. })
  238. },
  239. getMyPromotionInfo(){
  240. this.$api('getMyPromotionInfo', {}, (res) => {
  241. if (res && res.success && res.result) {
  242. // console.log(res.result,'res.result')
  243. this.status = res.result.status
  244. console.log(this.status,'this.status')
  245. }
  246. })
  247. },
  248. goToFaq() {
  249. uni.navigateTo({ url: '/pages/subcomponent/admin_faq' })
  250. }
  251. }
  252. }
  253. </script>
  254. <style lang="scss" scoped>
  255. .promotion-page {
  256. min-height: 100vh;
  257. background: linear-gradient(to right, #b2f08d 0%, #39e9d2 100%);
  258. padding-bottom: calc(env(safe-area-inset-bottom) + 120rpx);
  259. }
  260. .nav-bar {
  261. position: fixed;
  262. top: 0;
  263. left: 0;
  264. right: 0;
  265. z-index: 1000;
  266. width: 100vw;
  267. background: linear-gradient(to right, #b2f08d 0%, #39e9d2 100%);
  268. box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.03);
  269. .nav-bar-inner {
  270. display: flex;
  271. align-items: center;
  272. height: 44px;
  273. width: 100vw;
  274. position: relative;
  275. }
  276. .back-icon {
  277. width: 44px;
  278. height: 44px;
  279. display: flex;
  280. align-items: center;
  281. justify-content: center;
  282. position: absolute;
  283. left: 0;
  284. top: 0;
  285. }
  286. .nav-bar-title {
  287. flex: 1;
  288. text-align: center;
  289. font-size: 36rpx;
  290. font-weight: bold;
  291. color: #222;
  292. letter-spacing: 2rpx;
  293. line-height: 44px;
  294. }
  295. .nav-bar-right {
  296. width: 44px;
  297. height: 44px;
  298. position: absolute;
  299. right: 0;
  300. top: 0;
  301. display: flex;
  302. align-items: center;
  303. justify-content: center;
  304. }
  305. }
  306. .feature-tags {
  307. // background: linear-gradient(to right, #b2f08d 0%, #39e9d2 100%);
  308. border-radius: 32rpx;
  309. display: flex;
  310. align-items: center;
  311. justify-content: space-between;
  312. padding: 0 24rpx;
  313. height: 80rpx;
  314. box-shadow: 0 4rpx 24rpx rgba(60, 167, 250, 0.08);
  315. .tag {
  316. flex: 1;
  317. display: flex;
  318. align-items: center;
  319. justify-content: center;
  320. .check {
  321. width: 36rpx;
  322. height: 36rpx;
  323. background: #fff;
  324. border-radius: 50%;
  325. display: flex;
  326. align-items: center;
  327. justify-content: center;
  328. font-size: 28rpx;
  329. color: #13ac47;
  330. font-weight: bold;
  331. margin-right: 10rpx;
  332. box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.08);
  333. }
  334. .text {
  335. color: #fff;
  336. font-size: 28rpx;
  337. font-weight: bold;
  338. }
  339. }
  340. }
  341. .main-content {
  342. margin-top: 20rpx;
  343. padding-top: 88rpx;
  344. background: linear-gradient(180deg, #eaffe6 0%, #fff 30%);
  345. min-height: 100vh;
  346. width: 100vw;
  347. box-sizing: border-box;
  348. position: relative;
  349. z-index: 11;
  350. border-radius: 40rpx 40rpx 0 0;
  351. overflow: hidden;
  352. }
  353. .user-card {
  354. margin: 0 32rpx;
  355. background: linear-gradient(to bottom, #f6fff2 0%, #fff 100%);
  356. border-radius: 32rpx;
  357. box-shadow: 0 8rpx 32rpx rgba(60, 167, 250, 0.12);
  358. padding: 48rpx 36rpx 36rpx 36rpx;
  359. border: none;
  360. position: relative;
  361. top: -40rpx;
  362. display: flex;
  363. flex-direction: column;
  364. align-items: stretch;
  365. .user-info-row {
  366. display: flex;
  367. align-items: center;
  368. padding-bottom: 0;
  369. margin-bottom: 32rpx;
  370. // background-color: #fff;
  371. .avatar-box {
  372. margin-right: 24rpx;
  373. display: flex;
  374. flex-direction: column;
  375. align-items: center;
  376. .avatar-frame {
  377. width: 104rpx;
  378. height: 104rpx;
  379. border-radius: 10rpx;
  380. overflow: hidden;
  381. position: relative;
  382. background: #f2f2f2;
  383. box-shadow: 0 4rpx 16rpx rgba(0,0,0,0.10);
  384. .avatar-img {
  385. width: 104rpx;
  386. height: 80rpx;
  387. object-fit: cover;
  388. display: block;
  389. }
  390. .user-type {
  391. position: absolute;
  392. left: 0;
  393. bottom: 0;
  394. width: 100%;
  395. height: 32rpx;
  396. background: #e5e5e5;
  397. color: #888;
  398. font-size: 22rpx;
  399. font-weight: 500;
  400. text-align: center;
  401. line-height: 32rpx;
  402. border-bottom-left-radius: 10rpx;
  403. border-bottom-right-radius: 10rpx;
  404. }
  405. }
  406. }
  407. .user-meta {
  408. flex: 1;
  409. display: flex;
  410. flex-direction: column;
  411. justify-content: center;
  412. .nickname {
  413. font-size: 32rpx;
  414. font-weight: bold;
  415. color: #222;
  416. margin-bottom: 6rpx;
  417. }
  418. .userid {
  419. font-size: 24rpx;
  420. color: #bbb;
  421. }
  422. }
  423. .user-count {
  424. font-size: 30rpx;
  425. color: #222;
  426. font-weight: bold;
  427. text-align: right;
  428. min-width: 120rpx;
  429. margin-left: 16rpx;
  430. align-self: center;
  431. }
  432. }
  433. .user-stats-row {
  434. display: flex;
  435. align-items: stretch;
  436. justify-content: center;
  437. background: #f2fff6;
  438. border-radius: 24rpx;
  439. margin: 0 0 8rpx 0;
  440. padding: 32rpx 0;
  441. box-sizing: border-box;
  442. .stat-block {
  443. flex: 1;
  444. display: flex;
  445. flex-direction: column;
  446. align-items: center;
  447. justify-content: center;
  448. padding: 0 24rpx;
  449. .stat-label {
  450. font-size: 24rpx;
  451. color: #bbb;
  452. margin-bottom: 12rpx;
  453. text-align: center;
  454. }
  455. .stat-value {
  456. font-size: 40rpx;
  457. color: #222;
  458. font-weight: bold;
  459. margin-bottom: 18rpx;
  460. &.main {
  461. color: #13ac47;
  462. font-size: 48rpx;
  463. }
  464. }
  465. .withdraw-btn, .record-btn {
  466. width: 180rpx;
  467. height: 56rpx;
  468. border-radius: 28rpx;
  469. font-size: 26rpx;
  470. font-weight: bold;
  471. margin-top: 0;
  472. display: flex;
  473. align-items: center;
  474. justify-content: center;
  475. text-align: center;
  476. box-sizing: border-box;
  477. }
  478. .withdraw-btn {
  479. background: linear-gradient(90deg, #b2f08d, #39e9d2);
  480. color: #fff;
  481. border: none;
  482. }
  483. .record-btn {
  484. background: #fff;
  485. color: #13ac47;
  486. border: 2rpx solid #13ac47;
  487. &:active, &:focus {
  488. opacity: 0.8;
  489. }
  490. }
  491. }
  492. .stat-divider {
  493. width: 2rpx;
  494. height: 72rpx;
  495. background: #e0e0e0;
  496. margin: 0 16rpx;
  497. border-radius: 2rpx;
  498. align-self: center;
  499. }
  500. }
  501. .bottom-menu-row {
  502. display: flex;
  503. justify-content: center;
  504. align-items: center;
  505. margin: 40rpx 0 0 0;
  506. .menu-item {
  507. display: flex;
  508. align-items: center;
  509. margin: 0 40rpx;
  510. .menu-icon {
  511. width: 56rpx;
  512. height: 56rpx;
  513. border-radius: 50%;
  514. display: flex;
  515. align-items: center;
  516. justify-content: center;
  517. margin-right: 12rpx;
  518. &.red {
  519. background: #ff7e6a;
  520. }
  521. &.blue {
  522. background: #7eb6ff;
  523. }
  524. }
  525. .menu-text {
  526. font-size: 28rpx;
  527. color: #222;
  528. font-weight: 500;
  529. }
  530. }
  531. }
  532. }
  533. .rank-section {
  534. margin: 32rpx 32rpx 0 32rpx;
  535. .rank-title {
  536. font-size: 30rpx;
  537. color: #222;
  538. font-weight: bold;
  539. text-align: center;
  540. margin-bottom: 24rpx;
  541. }
  542. .rank-list {
  543. background: #fff;
  544. border-radius: 24rpx;
  545. box-shadow: 0 2rpx 8rpx rgba(60, 167, 250, 0.04);
  546. overflow: hidden;
  547. .rank-item {
  548. display: flex;
  549. align-items: center;
  550. padding: 0 44rpx;
  551. height: 104rpx;
  552. border-bottom: 1rpx solid #f3f3f3;
  553. &:last-child {
  554. border-bottom: none;
  555. }
  556. .rank-icon {
  557. width: 44rpx;
  558. display: flex;
  559. align-items: center;
  560. justify-content: center;
  561. .crown, .num-icon {
  562. width: 36rpx;
  563. height: 36rpx;
  564. }
  565. }
  566. .rank-avatar {
  567. width: 48rpx;
  568. height: 48rpx;
  569. border-radius: 50%;
  570. margin: 0 18rpx 0 10rpx;
  571. background: #f5f5f5;
  572. }
  573. .rank-phone {
  574. flex: 1;
  575. font-size: 28rpx;
  576. color: #222;
  577. font-weight: bold;
  578. }
  579. .rank-amount {
  580. font-size: 30rpx;
  581. color: #b98c4a;
  582. font-weight: bold;
  583. min-width: 120rpx;
  584. text-align: right;
  585. }
  586. }
  587. }
  588. }
  589. .rights-section {
  590. margin: 40rpx 32rpx 0 32rpx;
  591. .rights-title {
  592. font-size: 30rpx;
  593. color: #222;
  594. font-weight: bold;
  595. text-align: center;
  596. margin-bottom: 24rpx;
  597. }
  598. .rights-table {
  599. background: #fff;
  600. border-radius: 24rpx;
  601. border: 1rpx solid #ff9900;
  602. overflow: hidden;
  603. box-sizing: border-box;
  604. .table-header {
  605. display: flex;
  606. background: #fff7ed;
  607. border-bottom: 1rpx solid #ff9900;
  608. .th {
  609. flex: 1;
  610. text-align: center;
  611. font-size: 26rpx;
  612. color: #ff9900;
  613. font-weight: bold;
  614. padding: 24rpx 0;
  615. border-right: 1rpx solid #ff9900;
  616. &:last-child { border-right: none; }
  617. }
  618. }
  619. .table-row {
  620. display: flex;
  621. border-bottom: 1rpx solid #ffe5c2;
  622. &:last-child { border-bottom: none; }
  623. .td {
  624. flex: 1;
  625. text-align: center;
  626. font-size: 26rpx;
  627. color: #222;
  628. padding: 20rpx 0;
  629. border-right: 1rpx solid #ffe5c2;
  630. &:last-child { border-right: none; }
  631. .cell-check {
  632. color: #13ac47;
  633. font-size: 30rpx;
  634. font-weight: bold;
  635. }
  636. .cell-x {
  637. color: #bbb;
  638. font-size: 30rpx;
  639. }
  640. }
  641. }
  642. }
  643. }
  644. .qrcode-section {
  645. margin: 48rpx 32rpx 0 32rpx;
  646. background: #fff;
  647. border-radius: 32rpx;
  648. box-shadow: 0 4rpx 24rpx rgba(60, 167, 250, 0.08);
  649. display: flex;
  650. flex-direction: column;
  651. align-items: center;
  652. padding: 32rpx 0 40rpx 0;
  653. .qrcode-title {
  654. font-size: 28rpx;
  655. color: #222;
  656. font-weight: bold;
  657. margin-bottom: 24rpx;
  658. }
  659. .qrcode-img {
  660. width: 220rpx;
  661. height: 220rpx;
  662. background: #fff;
  663. border-radius: 24rpx;
  664. box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.08);
  665. }
  666. }
  667. .bottom-btns {
  668. position: fixed;
  669. left: 0;
  670. right: 0;
  671. bottom: 0;
  672. display: flex;
  673. justify-content: space-between;
  674. padding: 24rpx 32rpx calc(env(safe-area-inset-bottom) + 24rpx) 32rpx;
  675. background: #fff;
  676. z-index: 100;
  677. .btn {
  678. flex: 1;
  679. height: 88rpx;
  680. border-radius: 44rpx;
  681. font-size: 32rpx;
  682. font-weight: bold;
  683. margin: 0 12rpx;
  684. border: none;
  685. &.gray {
  686. background: #f5f5f5;
  687. color: #999;
  688. }
  689. &.green {
  690. background: linear-gradient(90deg, #42dfc2, #9be48f);
  691. color: #fff;
  692. }
  693. }
  694. }
  695. .bottom-menu-row {
  696. display: flex;
  697. justify-content: center;
  698. align-items: center;
  699. margin: 40rpx 0 0 0;
  700. .menu-item {
  701. display: flex;
  702. align-items: center;
  703. margin: 0 40rpx;
  704. .menu-icon {
  705. width: 56rpx;
  706. height: 56rpx;
  707. border-radius: 50%;
  708. display: flex;
  709. align-items: center;
  710. justify-content: center;
  711. margin-right: 12rpx;
  712. &.red {
  713. background: #ff7e6a;
  714. }
  715. &.blue {
  716. background: #7eb6ff;
  717. }
  718. }
  719. .menu-text {
  720. font-size: 28rpx;
  721. color: #222;
  722. font-weight: 500;
  723. }
  724. }
  725. }
  726. .progress-modal-mask {
  727. position: fixed;
  728. left: 0; right: 0; top: 0; bottom: 0;
  729. background: rgba(0,0,0,0.25);
  730. z-index: 2000;
  731. display: flex;
  732. align-items: center;
  733. justify-content: center;
  734. }
  735. .progress-modal-box {
  736. width: 80vw;
  737. max-width: 420px;
  738. background: linear-gradient(180deg, #f3fff2 0%, #eafff6 100%);
  739. border-radius: 32rpx;
  740. box-shadow: 0 8rpx 32rpx rgba(60, 167, 250, 0.10);
  741. padding: 56rpx 0 32rpx 0;
  742. display: flex;
  743. flex-direction: column;
  744. align-items: center;
  745. }
  746. .progress-modal-title {
  747. font-size: 34rpx;
  748. color: #222;
  749. font-weight: bold;
  750. text-align: center;
  751. margin-bottom: 48rpx;
  752. white-space: pre-line;
  753. }
  754. .progress-modal-list {
  755. width: 88%;
  756. display: flex;
  757. flex-direction: column;
  758. gap: 18rpx;
  759. margin-bottom: 48rpx;
  760. }
  761. .progress-modal-item {
  762. // background: #fff;
  763. border-radius: 18rpx;
  764. height: 80rpx;
  765. display: flex;
  766. align-items: center;
  767. justify-content: space-between;
  768. font-size: 30rpx;
  769. color: #222;
  770. padding: 0 32rpx;
  771. box-shadow: 0 2rpx 8rpx rgba(60, 167, 250, 0.04);
  772. }
  773. .progress-modal-btn {
  774. width: 88%;
  775. height: 88rpx;
  776. background: linear-gradient(90deg, #b2f08d, #39e9d2);
  777. color: #222;
  778. font-size: 32rpx;
  779. font-weight: bold;
  780. border-radius: 44rpx;
  781. margin-top: 8rpx;
  782. box-shadow: 0 4rpx 16rpx rgba(60, 167, 250, 0.08);
  783. display: flex;
  784. align-items: center;
  785. justify-content: center;
  786. border: none;
  787. }
  788. </style>