diff --git a/package2/group/groupBuySingle.vue b/package2/group/groupBuySingle.vue index 87f7e65..566c631 100644 --- a/package2/group/groupBuySingle.vue +++ b/package2/group/groupBuySingle.vue @@ -838,6 +838,7 @@ navigatingFromPayPopup: false, freeOrderEffectVisible: false, freeOrderAmount: '0.00', + pendingFreeOrderAutoPay: false, popupPageStyle: '', bottomPopupOpenCount: 0 } @@ -1825,15 +1826,15 @@ this.createdOrderInfo = res.result; if (res.result.isFreeOrder == 1) { this.showFreeOrderEffect(res.result); - } - this.pendingPaySpecChoices = null; - if (autoPay) { + this.pendingFreeOrderAutoPay = !!autoPay; + } else if (autoPay) { this.$nextTick(() => { this.wxPayment(); }); } else { this.$refs.payPopup.open('bottom'); } + this.pendingPaySpecChoices = null; if (this.$refs.pintuanPopup) this.$refs.pintuanPopup.close(); } else { uni.showToast({ @@ -1859,6 +1860,12 @@ }, closeFreeOrderEffect() { this.freeOrderEffectVisible = false; + if (this.pendingFreeOrderAutoPay) { + this.pendingFreeOrderAutoPay = false; + this.$nextTick(() => { + this.wxPayment(); + }); + } }, addToCart(item, specs) { let specStr = specs ? JSON.stringify(specs) : ''; diff --git a/package2/group/shopEvaluate.vue b/package2/group/shopEvaluate.vue index a220895..4950110 100644 --- a/package2/group/shopEvaluate.vue +++ b/package2/group/shopEvaluate.vue @@ -54,7 +54,7 @@ - + diff --git a/package2/myCenter/wallet.vue b/package2/myCenter/wallet.vue index ccc66cb..a0ce391 100644 --- a/package2/myCenter/wallet.vue +++ b/package2/myCenter/wallet.vue @@ -2,102 +2,121 @@ - + - + - 我的钱包 + + 我的钱包 + 管理你的每一份收益 + - - - - {{tab.name}} - + + 👛 + - + + + WALLET - {{activeWallet.title}} + + 用户余额(元) + + + 🙈 + + - {{formatMoney(activeWallet.amount)}} + {{ showBalance ? formatMoney(balanceUser.depoBal) : '••••' }} + + + 🛡 + 钱包安全保障中 › - 余额安全保障中 - - - {{activeWallet.icon}} - - 提现 + + 提现 + - - - {{shop.shopName || ('店铺' + (index + 1))}} + + + + + 配送兼职佣金(元)? + {{ showBalance ? formatMoney(balanceWorker.depoBalRel) : '••••' }} + 今日佣金 {{ showBalance ? formatMoney(balanceWorker.depoBal) : '••••' }} + 去查看 › + 🛵 - - - - {{item.icon}} - {{item.name}} + + + 店铺余额(元)? + {{ showBalance ? formatMoney(shopTotalBalance) : '••••' }} + 去查看 › + + + - - - {{item.label}} - {{item.value}} + + + + + 余额明细 + + 全部 - - - - RECENT FLOW - 余额明细 - - - - - - - {{item.flowIcon}} - - - {{item.dealingsWay || '余额变动'}} - {{item.createTime || '刚刚'}} + + + + {{item.flowEmoji}} + + + {{item.dealingsWay || '余额变动'}} + {{dealingsSubtitle(item)}} + + + + {{item.amountText}} + + {{formatFlowTime(item.createTime)}} + - - {{item.amountText}} + + 最近还没有余额流水 - - 最近还没有余额流水 - + + - + + + + + 📢 + 小提示:努力兼职,钱包会鼓鼓的哦 💪 + + + + @@ -149,13 +168,13 @@ commionAmount:0, linkId:'', activeWalletType: 'user', - activeTabIndex: 0, activeShopIndex: 0, targetWalletType: '', autoplay: true, balanceShop:[], submittingWithdraw: false, withdrawRequestId: '', + showBalance: true, } }, computed: { @@ -175,87 +194,19 @@ if (this.hasShopWallet) tabs.push({ key: 'shop', name: '商家钱包' }) return tabs }, - tabSliderWidth() { - const count = this.walletTabs.length || 1 - return (100 / count) + '%' - }, - tabSliderTransform() { - return `translateX(${this.activeTabIndex * 100}%)` - }, currentShop() { return this.shopWallets[this.activeShopIndex] || this.shopWallets[0] || {} }, - activeWallet() { - if (this.activeWalletType === 'worker') { - return { - type: 'worker', - heroClass: 'hero-worker', - title: '配送佣金余额', - amount: this.balanceWorker.depoBal, - withdrawAmount: this.balanceWorker.depoBalRel, - icon: 'DEL', - raw: this.balanceWorker - } - } - if (this.activeWalletType === 'shop') { - return { - type: 'shop', - heroClass: 'hero-shop', - title: '商家余额', - amount: this.currentShop.balance, - withdrawAmount: this.currentShop.balance, - icon: 'SHOP', - raw: this.currentShop - } - } - return { - type: 'user', - heroClass: 'hero-user', - title: '用户余额', - amount: this.balanceUser.depoBal, - withdrawAmount: this.balanceUser.depoBal, - icon: 'USER', - raw: this.balanceUser - } - }, - activeStats() { - if (this.activeWalletType === 'worker') { - return [ - { label: '今日收入', value: this.formatMoney(this.balanceWorker.depoBal) }, - { label: '配送单数', value: this.balanceWorker.orderCount || this.balanceWorker.todayOrderCount || 0 }, - { label: '本周收入', value: this.formatMoney(this.balanceWorker.weekIncome || this.balanceWorker.depoBal) }, - { label: '待结算', value: this.formatMoney(this.balanceWorker.waitSettle || this.balanceWorker.depoBalRel) } - ] - } - if (this.activeWalletType === 'shop') { - return [ - { label: '今日营业额', value: this.formatMoney(this.currentShop.todayIncome || this.currentShop.balance) }, - { label: '待结算', value: this.formatMoney(this.currentShop.waitSettle || 0) }, - { label: '累计营业额', value: this.formatMoney(this.currentShop.totalIncome || this.currentShop.balance) }, - { label: '可提现', value: this.formatMoney(this.currentShop.balance) } - ] - } - return [ - { label: '可提现', value: this.formatMoney(this.balanceUser.depoBal) }, - { label: '今日收益', value: this.formatMoney(this.balanceUser.todayIncome || 0) }, - { label: '累计收益', value: this.formatMoney(this.balanceUser.totalIncome || this.balanceUser.depoBal) }, - { label: '冻结金额', value: this.formatMoney(this.balanceUser.freezeAmount || 0) } - ] + workerTodayCommission() { + if (!this.balanceWorker) return 0 + if (this.balanceWorker.todayCommission != null) return this.balanceWorker.todayCommission + if (this.balanceWorker.todayIncome != null) return this.balanceWorker.todayIncome + return this.balanceWorker.commissionToday || 0 }, - actionEntries() { - return [ - { name: '提现', icon: '提', color: 'green', action: () => this.userCommion(this.activeWallet.type, this.activeWallet.withdrawAmount, this.activeWallet.raw) }, - { name: '余额明细', icon: '明', color: 'blue', action: () => this.rewardList() }, - { name: '提现记录', icon: '记', color: 'yellow', action: () => this.rewardList() }, - { name: '资金规则', icon: '规', color: 'purple', action: null } - ] - }, - displayStats() { - return this.activeStats.map((item, index) => { - return Object.assign({}, item, { - delay: (index * 0.05) + 's' - }) - }) + shopTotalBalance() { + return this.shopWallets.reduce((total, shop) => { + return total + (Number(shop.balance) || 0) + }, 0) }, displayRewardLists() { return (this.rewardLists || []).map((item, index) => { @@ -263,7 +214,8 @@ return Object.assign({}, item, { amountClass, amountText: this.formatSignedAmount(item.amount), - flowIcon: this.flowIcon(item.dealingsWay), + flowIconKey: this.flowIconKey(item.dealingsWay), + flowEmoji: this.flowEmoji(item.dealingsWay), delay: (index * 0.04) + 's' }) }) @@ -282,12 +234,9 @@ this.beginData(); }, onReachBottom() { - if (this.searchForm.pageNum >= this.totalPages) return; - // this.status = 'loading'; this.searchForm.pageNum+=1; this.rewardList(); - }, methods: { beginData(){ @@ -339,16 +288,12 @@ const targetIndex = this.walletTabs.findIndex(tab => tab.key === this.targetWalletType) if (targetIndex >= 0) { this.activeWalletType = this.targetWalletType - this.activeTabIndex = targetIndex this.targetWalletType = '' } } const currentIndex = this.walletTabs.findIndex(tab => tab.key === this.activeWalletType) - if (currentIndex >= 0) { - this.activeTabIndex = currentIndex - } else { + if (currentIndex < 0) { this.activeWalletType = 'user' - this.activeTabIndex = 0 } if (this.activeWalletType === 'shop' && this.activeShopIndex >= this.shopWallets.length) { this.activeShopIndex = 0 @@ -371,10 +316,9 @@ } this.rewardList() }, - switchWallet(type,index){ + switchWallet(type){ if (this.activeWalletType === type) return this.activeWalletType = type - this.activeTabIndex = index this.setCurrentLinkId() }, switchShop(index){ @@ -382,9 +326,6 @@ this.activeShopIndex = index this.setCurrentLinkId() }, - handleAction(item){ - if (item && item.action) item.action() - }, loadMoreFlow(){ if (this.searchForm.pageNum >= this.totalPages) return this.searchForm.pageNum += 1 @@ -467,13 +408,46 @@ const prefix = num < 0 ? '-' : '+' return prefix + Math.abs(num).toFixed(2) }, - flowIcon(title){ + flowIconKey(title) { + const text = title || '' + if (text.indexOf('提现') !== -1) return 'withdraw' + if (text.indexOf('配送') !== -1) return 'worker' + if (text.indexOf('商家') !== -1 || text.indexOf('结算') !== -1 || text.indexOf('店铺') !== -1) return 'shop' + if (text.indexOf('抽奖') !== -1 || text.indexOf('奖励') !== -1) return 'reward' + return 'bill' + }, + flowEmoji(title) { const text = title || '' - if (text.indexOf('提现') !== -1) return '提' - if (text.indexOf('配送') !== -1) return '配' - if (text.indexOf('商家') !== -1 || text.indexOf('结算') !== -1) return '商' - if (text.indexOf('抽奖') !== -1 || text.indexOf('奖励') !== -1) return '奖' - return '账' + if (text.indexOf('提现') !== -1) return '💳' + if (text.indexOf('配送') !== -1) return '🛵' + if (text.indexOf('商家') !== -1 || text.indexOf('结算') !== -1 || text.indexOf('店铺') !== -1) return '🏪' + if (text.indexOf('抽奖') !== -1 || text.indexOf('奖励') !== -1) return '🎁' + return '📄' + }, + dealingsSubtitle(item) { + if (item.remark) return item.remark + if (item.orderNo) return '订单号: #' + item.orderNo + const text = item.dealingsWay || '' + if (text.indexOf('提现') !== -1) return '提现至支付宝' + if (text.indexOf('配送') !== -1) return '配送订单收益' + if (text.indexOf('商家') !== -1 || text.indexOf('店铺') !== -1 || text.indexOf('结算') !== -1) return '店铺订单收益' + if (text.indexOf('抽奖') !== -1 || text.indexOf('奖励') !== -1) return '校内推广活动奖励' + return '余额变动明细' + }, + formatFlowTime(timeStr) { + if (!timeStr) return '刚刚' + const parts = timeStr.split(' ') + if (parts.length >= 2) { + const dateParts = parts[0].split('-') + const timeParts = parts[1].split(':') + if (dateParts.length >= 3 && timeParts.length >= 2) { + return `${dateParts[1]}-${dateParts[2]} ${timeParts[0]}:${timeParts[1]}` + } + } + return timeStr + }, + toggleBalance() { + this.showBalance = !this.showBalance }, rewardList(){ this.loadStatus = 'loading' @@ -500,7 +474,6 @@ uni.navigateBack() } } - } @@ -509,20 +482,22 @@ width: 100%; min-height: 100%; font-size: 24rpx; - background: #F8FCFB; - color: #00231C; + background: #F3FFF8; + color: #153A2E; } - + .wallet-page { width: 100%; min-height: 100vh; position: relative; overflow: hidden; background: - radial-gradient(circle at 50% 210rpx, rgba(255,255,255,0.78), rgba(255,255,255,0) 360rpx), - linear-gradient(155deg, #F4FFF5 0%, #EAF8FF 44%, #F8FCFB 78%, #FFF8E4 100%); + radial-gradient(circle at 18% 8%, rgba(205, 255, 206, 0.78), rgba(205, 255, 206, 0) 220rpx), + radial-gradient(circle at 88% 10%, rgba(142, 239, 255, 0.5), rgba(142, 239, 255, 0) 300rpx), + linear-gradient(180deg, #EFFFF6 0%, #F3FFF8 42%, #F9FFF7 100%); } + /* ---------- 背景光斑 ---------- */ .wallet-bg { position: absolute; top: 0; @@ -537,411 +512,544 @@ .wallet-aura { position: absolute; border-radius: 50%; - filter: blur(4rpx); - opacity: 0.78; + filter: blur(6rpx); + opacity: 0.8; animation: auraFloat 7s ease-in-out infinite alternate; } - .aura-green { - width: 520rpx; - height: 520rpx; - left: -190rpx; - top: 240rpx; - background: radial-gradient(circle, rgba(53,214,166,0.34), rgba(53,214,166,0)); + .aura-purple { + width: 560rpx; + height: 560rpx; + right: -200rpx; + top: -60rpx; + background: radial-gradient(circle, rgba(124,234,194,0.32), rgba(124,234,194,0)); } .aura-blue { - width: 560rpx; - height: 560rpx; - right: -210rpx; - top: 40rpx; - background: radial-gradient(circle, rgba(79,183,255,0.32), rgba(79,183,255,0)); + width: 520rpx; + height: 520rpx; + left: -190rpx; + top: 260rpx; + background: radial-gradient(circle, rgba(137,238,255,0.26), rgba(137,238,255,0)); animation-delay: -2s; } - .aura-yellow { - width: 430rpx; - height: 430rpx; - right: -130rpx; - top: 600rpx; - background: radial-gradient(circle, rgba(255,221,112,0.28), rgba(255,221,112,0)); + .aura-pink { + width: 420rpx; + height: 420rpx; + left: -80rpx; + top: -100rpx; + background: radial-gradient(circle, rgba(255,198,121,0.18), rgba(255,198,121,0)); animation-delay: -4s; } + /* ---------- 导航 ---------- */ .wallet-nav { position: relative; z-index: 2; - height: 128rpx; + height: 124rpx; display: flex; align-items: center; - justify-content: center; - padding-left: 20rpx; - padding-right: 20rpx; + padding-left: 32rpx; + padding-right: 32rpx; box-sizing: content-box; } - .back-btn{ - position: absolute; - left: 20rpx; - bottom: 20rpx; + .back-btn { width: 72rpx; height: 72rpx; - border-radius: 28rpx; - background: rgba(255,255,255,0.72); - box-shadow: 0 14rpx 34rpx rgba(50, 126, 112, 0.12); + border-radius: 50%; + background: rgba(255,255,255,0.8); + box-shadow: 0 8rpx 22rpx rgba(28, 122, 91, 0.08); display: flex; align-items: center; justify-content: center; backdrop-filter: blur(14rpx); + border: 1rpx solid rgba(255, 255, 255, 0.9); } .back-btn text { - font-size: 54rpx; - line-height: 54rpx; - color: #173C35; + font-size: 52rpx; + line-height: 52rpx; + color: #153A2E; transform: translateY(-2rpx); } - .title-name{ - font-size: 38rpx; - font-weight: 800; - letter-spacing: 1rpx; - color: #12342F; + .nav-title-wrap { + margin-left: 22rpx; + display: flex; + flex-direction: column; + justify-content: center; + min-width: 0; } .wallet-scroll { position: relative; z-index: 1; - height: calc(100vh - 128rpx); + height: calc(100vh - 124rpx); } .wallet-content { - padding: 18rpx 20rpx 0; + padding: 0 32rpx; position: relative; z-index: 1; } - .wallet-tabs { - position: relative; - display: flex; - padding: 8rpx; - border-radius: 999rpx; - background: rgba(255,255,255,0.58); - box-shadow: inset 0 0 0 1rpx rgba(255,255,255,0.72), 0 16rpx 42rpx rgba(60, 130, 118, 0.11); - backdrop-filter: blur(18rpx); - margin-bottom: 24rpx; - overflow: hidden; + .title-name { + font-size: 44rpx; + font-weight: 900; + letter-spacing: 1rpx; + color: #153A2E; + } + + .wallet-subtitle { + margin-top: 8rpx; + font-size: 23rpx; + font-weight: 600; + color: rgba(21, 58, 46, 0.52); + } + + .subtitle-spark { + margin-left: 4rpx; } - .tab-slider { + .heading-illus { position: absolute; - top: 8rpx; - bottom: 8rpx; - left: 8rpx; - border-radius: 999rpx; - background: linear-gradient(135deg, #DFFF85 0%, #8CFFE1 100%); - box-shadow: 0 10rpx 26rpx rgba(46, 188, 147, 0.22); - transition: transform 0.28s cubic-bezier(0.22, 0.8, 0.22, 1); + right: 28rpx; + top: -16rpx; + width: 150rpx; + height: 150rpx; + display: flex; + align-items: center; + justify-content: center; + pointer-events: none; } - .wallet-tab { - position: relative; - z-index: 1; - flex: 1; - height: 70rpx; - line-height: 70rpx; - text-align: center; - border-radius: 999rpx; - font-size: 26rpx; - font-weight: 700; - color: rgba(18, 52, 47, 0.58); - transition: color 0.2s ease, transform 0.2s ease; + .illus-main { + font-size: 120rpx; + filter: drop-shadow(0 16rpx 28rpx rgba(44, 174, 127, 0.22)); + animation: illusFloat 4.5s ease-in-out infinite alternate; } - .wallet-tab.active { - color: #12342F; - transform: scale(1.02); + .illus-star { + position: absolute; + left: -14rpx; + top: 4rpx; + font-size: 34rpx; + color: #FFB85C; + animation: starTwinkle 2.4s ease-in-out infinite alternate; } + /* ---------- 用户余额主卡 ---------- */ .hero-card { position: relative; - height: 220rpx; - border-radius: 32rpx; - padding: 32rpx; + height: 324rpx; + border-radius: 40rpx; + padding: 40rpx 40rpx 36rpx; overflow: hidden; box-sizing: border-box; - background: linear-gradient(135deg, rgba(222,255,214,0.88), rgba(255,247,188,0.78)); - box-shadow: 0 22rpx 54rpx rgba(58, 132, 115, 0.16); - backdrop-filter: blur(18rpx); + background: linear-gradient(120deg, #19C889 0%, #38DFA5 52%, #8BF08D 100%); + box-shadow: 0 24rpx 52rpx rgba(34, 198, 137, 0.25); + border: 2rpx solid rgba(255, 255, 255, 0.14); + transition: transform 0.25s ease, box-shadow 0.25s ease; + } + + .hero-card.active { + transform: translateY(-4rpx); + box-shadow: 0 28rpx 60rpx rgba(34, 198, 137, 0.34); } .hero-card::before { content: ''; position: absolute; - right: -80rpx; - top: -120rpx; - width: 320rpx; - height: 320rpx; + right: -90rpx; + top: -130rpx; + width: 340rpx; + height: 340rpx; border-radius: 50%; - background: radial-gradient(circle, rgba(255,255,255,0.62), rgba(255,255,255,0)); - } - - .hero-worker { - background: linear-gradient(135deg, rgba(212,249,255,0.9), rgba(224,255,203,0.82)); + background: radial-gradient(circle, rgba(255,255,255,0.22), rgba(255,255,255,0)); + pointer-events: none; } - .hero-shop { - background: linear-gradient(135deg, rgba(255,244,199,0.9), rgba(198,255,229,0.82)); + .hero-watermark { + position: absolute; + right: 30rpx; + top: 118rpx; + font-size: 72rpx; + font-weight: 900; + letter-spacing: 6rpx; + color: rgba(255, 255, 255, 0.12); + font-style: italic; + pointer-events: none; } .hero-copy { position: relative; z-index: 1; + display: flex; + flex-direction: column; + height: 100%; + justify-content: space-between; } .hero-label { - font-size: 27rpx; + display: flex; + align-items: center; + gap: 14rpx; + font-size: 28rpx; font-weight: 700; - color: rgba(18, 52, 47, 0.7); + color: rgba(255, 255, 255, 0.85); + } + + .eye-badge { + width: 42rpx; + height: 42rpx; + border-radius: 50%; + background: rgba(6, 94, 66, 0.22); + display: flex; + align-items: center; + justify-content: center; + position: relative; + border: 1rpx solid rgba(255, 255, 255, 0.25); + } + + .eye-line { + width: 24rpx; + height: 14rpx; + border: 3rpx solid rgba(255, 255, 255, 0.9); + border-radius: 50%; + position: relative; + box-sizing: border-box; + } + + .eye-line::after { + content: ''; + position: absolute; + left: 50%; + top: 50%; + width: 7rpx; + height: 7rpx; + border-radius: 50%; + background: #FFFFFF; + transform: translate(-50%, -50%); + } + + .eye-badge.closed .eye-line { + height: 3rpx; + border-width: 0; + border-radius: 999rpx; + background: rgba(255, 255, 255, 0.92); + } + + .eye-badge.closed .eye-line::after { + display: none; + } + + .eye-emoji { + font-size: 23rpx; + line-height: 1; } .hero-amount { - margin-top: 12rpx; - font-size: 72rpx; - line-height: 80rpx; + font-size: 88rpx; + line-height: 96rpx; font-weight: 900; letter-spacing: -1rpx; - color: #102F29; + color: #FFFFFF; + margin-top: 6rpx; + margin-bottom: auto; } - .hero-amount text { - font-size: 34rpx; - margin-right: 4rpx; + .hero-safe { + display: inline-flex; + align-items: center; + gap: 8rpx; + padding: 12rpx 26rpx; + border-radius: 999rpx; + background: rgba(255, 255, 255, 0.16); + border: 1rpx solid rgba(255, 255, 255, 0.2); + font-size: 23rpx; + font-weight: 700; + color: #FFFFFF; + width: fit-content; } - .hero-safe { - margin-top: 8rpx; + .safe-shield { font-size: 24rpx; - font-weight: 700; - color: #21A875; } - .hero-icon { + .withdraw-btn { position: absolute; - right: 30rpx; - top: 28rpx; - width: 92rpx; - height: 92rpx; - border-radius: 34rpx; - background: rgba(255,255,255,0.52); + right: 36rpx; + bottom: 46rpx; + z-index: 2; + min-width: 192rpx; + height: 88rpx; + border-radius: 999rpx; + background: #FFFFFF; + color: #138B63; + font-size: 30rpx; + font-weight: 800; + box-shadow: 0 14rpx 30rpx rgba(11, 128, 84, 0.2); + transition: transform 0.16s ease; display: flex; align-items: center; justify-content: center; - box-shadow: inset 0 0 0 1rpx rgba(255,255,255,0.68); + gap: 12rpx; } - .hero-icon text { + .btn-arrow { + width: 40rpx; + height: 40rpx; + border-radius: 50%; + background: #138B63; + color: #FFFFFF; + display: flex; + align-items: center; + justify-content: center; font-size: 24rpx; font-weight: 900; - color: rgba(20, 68, 58, 0.64); - } - - .withdraw-btn { - position: absolute; - right: 30rpx; - bottom: 28rpx; - min-width: 144rpx; - height: 62rpx; - line-height: 62rpx; - text-align: center; - border-radius: 999rpx; - background: linear-gradient(135deg, #25D28E 0%, #72F0CE 100%); - color: #FFFFFF; - font-size: 26rpx; - font-weight: 800; - box-shadow: 0 14rpx 32rpx rgba(37, 210, 142, 0.28); - transition: transform 0.16s ease; } .withdraw-btn:active, .popup-btn:active, - .quick-item:active { + .identity-card:active { transform: scale(0.96); } - .shop-switch { + /* ---------- 配送 & 商家子卡 ---------- */ + .identity-grid { + margin-top: 24rpx; + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 20rpx; + } + + .identity-card { + position: relative; + min-height: 264rpx; + border-radius: 34rpx; + padding: 30rpx 26rpx 26rpx; + box-sizing: border-box; + overflow: hidden; display: flex; - gap: 12rpx; - overflow-x: auto; - margin: 18rpx 0 0; - padding-bottom: 2rpx; + flex-direction: column; + background: #FFFFFF; + box-shadow: 0 14rpx 34rpx rgba(28, 122, 91, 0.06); + border: 2rpx solid rgba(255, 255, 255, 0.9); + transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease; } - .shop-pill { - flex: 0 0 auto; - padding: 16rpx 24rpx; - border-radius: 999rpx; - background: rgba(255,255,255,0.6); - color: rgba(18, 52, 47, 0.62); - font-size: 24rpx; - font-weight: 700; - box-shadow: 0 10rpx 28rpx rgba(55, 118, 107, 0.08); + .identity-card.worker-card { + background: linear-gradient(150deg, #E6FFF0 0%, #F3FFF8 66%, #FFFFFF 100%); } - .shop-pill.active { - color: #12342F; - background: linear-gradient(135deg, rgba(227,255,150,0.9), rgba(166,255,234,0.9)); + .identity-card.shop-card { + background: linear-gradient(150deg, #E9FBF4 0%, #FFF8E9 70%, #FFFFFF 100%); } - .quick-grid { - margin-top: 22rpx; - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 16rpx; + .identity-card.worker-card.active { + border-color: rgba(18, 183, 106, 0.35); + box-shadow: 0 18rpx 42rpx rgba(18, 183, 106, 0.14); + transform: translateY(-4rpx); } - .quick-item { - height: 118rpx; - border-radius: 24rpx; - background: rgba(255,255,255,0.72); - box-shadow: 0 16rpx 42rpx rgba(58, 132, 115, 0.1); + .identity-card.shop-card.active { + border-color: rgba(255, 151, 68, 0.38); + box-shadow: 0 18rpx 42rpx rgba(255, 151, 68, 0.14); + transform: translateY(-4rpx); + } + + .card-title { display: flex; align-items: center; - padding: 0 24rpx; - box-sizing: border-box; - backdrop-filter: blur(16rpx); - transition: transform 0.18s ease; + gap: 8rpx; + font-size: 24rpx; + font-weight: 700; + color: rgba(21, 58, 46, 0.62); } - .quick-icon { - width: 64rpx; - height: 64rpx; - border-radius: 24rpx; - margin-right: 18rpx; + .info-icon { + width: 30rpx; + height: 30rpx; + border-radius: 50%; + border: 2rpx solid rgba(21, 58, 46, 0.2); + color: rgba(21, 58, 46, 0.42); + font-size: 20rpx; display: flex; align-items: center; justify-content: center; - color: #FFFFFF; - font-size: 24rpx; + } + + .card-value { + margin-top: 16rpx; + font-size: 52rpx; + line-height: 58rpx; font-weight: 900; + letter-spacing: -1rpx; + color: #153A2E; } - .quick-icon.green { - background: linear-gradient(135deg, #25D28E, #9DF4B4); + .card-today { + margin-top: 8rpx; + font-size: 22rpx; + font-weight: 700; + color: #12B76A; } - .quick-icon.blue { - background: linear-gradient(135deg, #5AB8FF, #A7F4FF); + .card-link-btn { + margin-top: auto; + width: fit-content; + padding: 12rpx 26rpx; + border-radius: 999rpx; + background: #FFFFFF; + box-shadow: 0 8rpx 20rpx rgba(28, 122, 91, 0.08); + font-size: 23rpx; + font-weight: 800; + color: #137A5A; + position: relative; + z-index: 1; } - .quick-icon.yellow { - background: linear-gradient(135deg, #FFBC55, #FFE78D); + .card-illus { + position: absolute; + right: 12rpx; + bottom: 12rpx; + font-size: 96rpx; + line-height: 1; + filter: drop-shadow(0 10rpx 18rpx rgba(28, 122, 91, 0.14)); + animation: illusFloat 5s ease-in-out infinite alternate; + pointer-events: none; } - .quick-icon.purple { - background: linear-gradient(135deg, #A38BFF, #F0C8FF); + .shop-image-illus { + right: -16rpx; + bottom: -30rpx; + width: 160rpx; + height: 160rpx; + display: flex; + align-items: center; + justify-content: center; + font-size: 0; } - .quick-name { - font-size: 27rpx; - font-weight: 800; - color: #183B35; + .shop-illus-img { + width: 160rpx; + height: 160rpx; + display: block; } - .stats-grid { - margin-top: 18rpx; - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 16rpx; + /* ---------- 余额明细面板 ---------- */ + .flow-panel { + margin-top: 28rpx; + padding: 34rpx 30rpx 16rpx; + border-radius: 40rpx; + background: #FFFFFF; + box-shadow: 0 16rpx 40rpx rgba(28, 122, 91, 0.05); } - .stat-card { - min-height: 142rpx; - border-radius: 24rpx; - padding: 26rpx 24rpx; - box-sizing: border-box; - background: rgba(255,255,255,0.74); - box-shadow: 0 16rpx 42rpx rgba(58, 132, 115, 0.1); - backdrop-filter: blur(16rpx); - transition: transform 0.18s ease, box-shadow 0.18s ease; + .section-head { + display: flex; + align-items: center; + justify-content: space-between; } - .stat-card:active { - transform: translateY(-4rpx); - box-shadow: 0 22rpx 48rpx rgba(58, 132, 115, 0.14); + .flow-tabs { + display: flex; + align-items: center; + gap: 44rpx; } - .stat-label { - font-size: 24rpx; - font-weight: 700; - color: rgba(18, 52, 47, 0.55); + .flow-tab { + position: relative; + padding-bottom: 16rpx; + font-size: 30rpx; + font-weight: 800; + color: rgba(21, 58, 46, 0.36); } - .stat-value { - margin-top: 14rpx; - font-size: 34rpx; - font-weight: 900; - color: #12342F; + .flow-tab.active { + color: #153A2E; } - .section-head { - margin-top: 26rpx; - display: flex; - align-items: flex-end; - justify-content: space-between; + .flow-tab.active::after { + content: ''; + position: absolute; + left: 50%; + bottom: 0; + width: 52rpx; + height: 8rpx; + border-radius: 999rpx; + background: linear-gradient(90deg, #19C889, #FFB84D); + transform: translateX(-50%); } - .section-kicker { - font-size: 20rpx; - font-weight: 900; - color: rgba(37, 210, 142, 0.72); - letter-spacing: 2rpx; + .flow-filter { + flex: none; + padding: 12rpx 26rpx; + border-radius: 999rpx; + background: #F2FFF8; + border: 1rpx solid rgba(28, 122, 91, 0.06); + font-size: 24rpx; + font-weight: 700; + color: rgba(21, 58, 46, 0.58); + display: flex; + align-items: center; + gap: 6rpx; } - .section-title { - margin-top: 4rpx; - font-size: 32rpx; - font-weight: 900; - color: #12342F; + .filter-caret { + font-size: 20rpx; + color: rgba(21, 58, 46, 0.42); } .timeline-list { - margin-top: 16rpx; + margin-top: 20rpx; } .flow-card { - min-height: 120rpx; - border-radius: 24rpx; - background: rgba(255,255,255,0.78); - box-shadow: 0 14rpx 38rpx rgba(58, 132, 115, 0.09); - backdrop-filter: blur(16rpx); + min-height: 132rpx; display: flex; align-items: center; - padding: 22rpx; + padding: 26rpx 0; box-sizing: border-box; - margin-bottom: 12rpx; + border-bottom: 1rpx solid rgba(21, 58, 46, 0.06); + } + + .flow-card:last-child { + border-bottom: 0; } .flow-icon { - width: 70rpx; - height: 70rpx; - border-radius: 28rpx; + flex: none; + width: 88rpx; + height: 88rpx; + border-radius: 26rpx; display: flex; align-items: center; justify-content: center; - margin-right: 18rpx; - color: #FFFFFF; - font-size: 24rpx; - font-weight: 900; - box-shadow: 0 12rpx 26rpx rgba(58, 132, 115, 0.16); + margin-right: 24rpx; + font-size: 44rpx; + } + + .flow-icon.type-worker { + background: #E4FFF0; } - .flow-icon.income { - background: linear-gradient(135deg, #22CF8B, #A7F6BB); + .flow-icon.type-shop { + background: #FFF1DA; } - .flow-icon.outcome { - background: linear-gradient(135deg, #FF9A4B, #FFD97C); + .flow-icon.type-reward { + background: #E9FFF1; + } + + .flow-icon.type-withdraw { + background: #FFF1DA; + } + + .flow-icon.type-bill { + background: #EFFAF4; } .flow-main { @@ -950,83 +1058,157 @@ } .flow-title { - font-size: 28rpx; + font-size: 29rpx; font-weight: 800; - color: #183B35; + color: #153A2E; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } - .flow-time { - margin-top: 8rpx; - font-size: 22rpx; - color: rgba(18, 52, 47, 0.45); + .flow-subtitle { + margin-top: 10rpx; + font-size: 23rpx; + color: rgba(21, 58, 46, 0.4); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .flow-right { + text-align: right; + margin-left: 20rpx; + flex: none; } .flow-amount { - margin-left: 16rpx; - font-size: 30rpx; + font-size: 33rpx; font-weight: 900; } .flow-amount.income { - color: #20AD76; + color: #12B76A; } .flow-amount.outcome { - color: #F08B3A; + color: #F97316; + } + + .flow-time { + margin-top: 10rpx; + font-size: 22rpx; + color: rgba(21, 58, 46, 0.4); } .empty-card { - border-radius: 24rpx; - background: rgba(255,255,255,0.62); - box-shadow: 0 14rpx 38rpx rgba(58, 132, 115, 0.08); - padding: 46rpx 24rpx; + padding: 66rpx 24rpx; text-align: center; - color: rgba(18, 52, 47, 0.48); + color: rgba(21, 58, 46, 0.42); font-weight: 700; } + /* ---------- 底部小提示 ---------- */ + .tip-banner { + position: fixed; + left: 32rpx; + right: 32rpx; + bottom: calc(18rpx + env(safe-area-inset-bottom)); + z-index: 20; + background: linear-gradient(90deg, #F3FFF4 0%, #FFF4DC 100%); + border-radius: 999rpx; + padding: 20rpx 20rpx 20rpx 30rpx; + display: flex; + align-items: center; + justify-content: space-between; + box-shadow: 0 14rpx 34rpx rgba(28, 122, 91, 0.14); + border: 2rpx solid rgba(255, 255, 255, 0.86); + } + + .tip-left { + display: flex; + align-items: center; + gap: 14rpx; + min-width: 0; + } + + .tip-icon { + flex: none; + font-size: 38rpx; + filter: drop-shadow(0 6rpx 12rpx rgba(255, 151, 68, 0.22)); + } + + .tip-text { + font-size: 24rpx; + font-weight: 600; + color: #2F614E; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .tip-bold { + font-weight: 900; + color: #153A2E; + } + + .tip-arrow { + flex: none; + width: 52rpx; + height: 52rpx; + border-radius: 50%; + background: linear-gradient(135deg, #19C889, #FFB84D); + color: #FFFFFF; + display: flex; + align-items: center; + justify-content: center; + font-size: 26rpx; + font-weight: 900; + box-shadow: 0 8rpx 18rpx rgba(28, 122, 91, 0.24); + } + + /* ---------- 提现弹层 ---------- */ .withdraw-popup { width: 650rpx; - border-radius: 36rpx 36rpx 0 0; - padding: 34rpx 32rpx 46rpx; + border-radius: 40rpx; + padding: 44rpx 40rpx; box-sizing: border-box; - background: rgba(255,255,255,0.94); - box-shadow: 0 -20rpx 60rpx rgba(43, 109, 96, 0.18); - backdrop-filter: blur(20rpx); + background: #FFFFFF; + box-shadow: 0 24rpx 64rpx rgba(21, 58, 46, 0.16); } .popup-title { - font-size: 34rpx; + font-size: 36rpx; font-weight: 900; - color: #12342F; - margin-bottom: 26rpx; + color: #153A2E; + margin-bottom: 32rpx; + text-align: center; } .popup-field { - margin-bottom: 20rpx; - padding: 20rpx 24rpx; - border-radius: 24rpx; - background: #F7FBFA; + margin-bottom: 24rpx; + padding: 22rpx 28rpx; + border-radius: 26rpx; + background: #F3FFF8; } .popup-field text { display: block; margin-bottom: 12rpx; - font-size: 23rpx; + font-size: 24rpx; font-weight: 700; - color: rgba(18, 52, 47, 0.56); + color: rgba(21, 58, 46, 0.5); } .popup-field input { height: 54rpx; min-height: 54rpx; - font-size: 28rpx; + font-size: 30rpx; font-weight: 800; - color: #12342F; + color: #153A2E; } .popup-btn { - margin-top: 28rpx; + margin-top: 36rpx; width: 100%; height: 96rpx; line-height: 96rpx; @@ -1034,12 +1216,13 @@ text-align: center; font-size: 30rpx; font-weight: 900; - color: #12342F; - background: linear-gradient(90deg, rgba(227, 255, 150, 1), rgba(166, 255, 234, 1)); - box-shadow: 0 16rpx 34rpx rgba(37, 210, 142, 0.2); + color: #FFFFFF; + background: linear-gradient(90deg, #19C889, #65E08D); + box-shadow: 0 14rpx 30rpx rgba(28, 122, 91, 0.22); transition: transform 0.16s ease; } + /* ---------- 动画 ---------- */ .enter-card { animation: cardIn 0.46s ease both; } @@ -1049,7 +1232,7 @@ } .bottom-space { - height: 42rpx; + height: 170rpx; } @keyframes cardIn { @@ -1082,4 +1265,24 @@ transform: translate3d(18rpx, -18rpx, 0) scale(1.06); } } + + @keyframes illusFloat { + 0% { + transform: translateY(0) rotate(-2deg); + } + 100% { + transform: translateY(-12rpx) rotate(4deg); + } + } + + @keyframes starTwinkle { + 0% { + opacity: 0.35; + transform: scale(0.85); + } + 100% { + opacity: 1; + transform: scale(1.1); + } + } diff --git a/package2/shop/afterService.vue b/package2/shop/afterService.vue index 67efeaa..ffabbea 100644 --- a/package2/shop/afterService.vue +++ b/package2/shop/afterService.vue @@ -75,7 +75,7 @@ 联系 - 退款金额: ¥{{item.refundAmount}} + 退款/售后金额: ¥{{item.settlementAmount || item.refundAmount}} @@ -182,12 +182,12 @@ 联系用户 {{contactItem.mallOrder.receiverPhone}} - 联系商家 {{contactItem.mallOrder.shopPhone}} - 联系配送员 {{contactItem.mallDeliveryOrder.workerPhone}} @@ -220,7 +220,8 @@ pageSize:100, statusList:[0,3], startDate:'', - endDate:'' + endDate:'', + orderDesc:false }, type:'worker', mode:'pending', @@ -289,9 +290,11 @@ if(this.mode == 'record'){ this.searchCountForm.statusList = [1,2,4,5] this.searchCountForm.pageSize = 10 + this.searchCountForm.orderDesc = true }else{ this.searchCountForm.statusList = [0,3] this.searchCountForm.pageSize = 100 + this.searchCountForm.orderDesc = false } this.getReturnCount() }, @@ -606,20 +609,20 @@ } .after-service-fixed-holder { - height: 260rpx; + height: 170rpx; } .title { background: url('https://jewel-shop.oss-cn-beijing.aliyuncs.com/8bc15960c2dc40268e295d6dd23aecce.png') no-repeat; width: 100%; - height: 260rpx; + height: 170rpx; background-size: 100% 100%; } .title-sreach { width: 100%; display: flex; - height: 200rpx; + height: 120rpx; position: relative; } @@ -630,14 +633,14 @@ } .title-name { - padding-top: 110rpx; + padding-top: 88rpx; font-size: 36rpx; font-weight: 700; flex: 1; text-align: center; } .content{ - margin: 20rpx auto 0; + margin: 0 auto; padding-bottom: 60rpx; } .record-search {