From f5cae88636e922560d9535e1485caab9dffc479b Mon Sep 17 00:00:00 2001 From: woody Date: Thu, 12 Jun 2025 18:04:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(region-select):=20=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=B7=BB=E5=8A=A0=E4=B8=BB=E5=8A=A8=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/region-select/index.vue | 12 +- pages/mine/index.vue | 178 ++++++++++++++++++++++++----- 2 files changed, 158 insertions(+), 32 deletions(-) diff --git a/components/region-select/index.vue b/components/region-select/index.vue index 8b1b0d3..014e94a 100644 --- a/components/region-select/index.vue +++ b/components/region-select/index.vue @@ -70,14 +70,22 @@ export default { res.data.regionStatus === 0 && !res.data.province ) { - await this.loadAreaTree() - this.popupVisible = true + this.open() } } catch (error) { console.error('Failed to get region select info:', error) } }, methods: { + async open() { + return new Promise(async (resolve, reject) => { + if (this.areaTree.length === 0) { + await this.loadAreaTree() + } + this.popupVisible = true + resolve() + }) + }, async loadAreaTree() { try { const res = await getRegionAreaTree() diff --git a/pages/mine/index.vue b/pages/mine/index.vue index fdb6b58..a8b66a9 100644 --- a/pages/mine/index.vue +++ b/pages/mine/index.vue @@ -223,26 +223,42 @@ 收益区域 - - - {{ '省' }} - {{ - regionInfo.provinceVal || '-' - }} + + @@ -258,16 +274,30 @@ 总业绩 - {{ totalSumPv || '0.00' }} + + {{ + formattedTotalSumPv.integer + }} + {{ + formattedTotalSumPv.decimal + }} + 小区业绩 - {{ smallAreaPv || '0.00' }} + + {{ + formattedSmallAreaPv.integer + }} + {{ + formattedSmallAreaPv.decimal + }} + - + 总盒数 - {{ totalBox || '0' }} + + {{ + formattedTotalBox.integer + }} + {{ + formattedTotalBox.decimal + }} + 小区盒数 - {{ smallAreaBox || '0' }} + + {{ + formattedSmallAreaBox.integer + }} + {{ + formattedSmallAreaBox.decimal + }} + - + @@ -382,7 +426,7 @@ - + @@ -568,6 +612,38 @@ export default { regionInfoVisible() { return this.regionInfo?.regionStatus === 0 }, + formattedTotalSumPv() { + const value = String(this.totalSumPv || '0.00') + const parts = value.split('.') + return { + integer: parts[0], + decimal: parts.length > 1 ? `.${parts[1]}` : '', + } + }, + formattedSmallAreaPv() { + const value = String(this.smallAreaPv || '0.00') + const parts = value.split('.') + return { + integer: parts[0], + decimal: parts.length > 1 ? `.${parts[1]}` : '', + } + }, + formattedTotalBox() { + const value = String(this.totalBox || '0') + const parts = value.split('.') + return { + integer: parts[0], + decimal: parts.length > 1 ? `.${parts[1]}` : '', + } + }, + formattedSmallAreaBox() { + const value = String(this.smallAreaBox || '0') + const parts = value.split('.') + return { + integer: parts[0], + decimal: parts.length > 1 ? `.${parts[1]}` : '', + } + }, }, methods: { @@ -578,6 +654,19 @@ export default { } }) }, + openRegionSelect() { + uni.showLoading({ + title: '加载中...', + }) + this.$refs.regionSelect + ?.open() + .then(() => { + uni.hideLoading() + }) + .catch(() => { + uni.hideLoading() + }) + }, goYear() { uni.navigateTo({ url: '/pages/mine/yearGift/index', @@ -1399,6 +1488,7 @@ export default { .stat-block:active { transform: scale(0.98); + filter: brightness(1.1); } .stat-block.primary { @@ -1430,25 +1520,49 @@ export default { .stat-divider { width: 2rpx; height: 60rpx; - background-color: rgba(255, 255, 255, 0.4); + background: linear-gradient( + to bottom, + rgba(255, 255, 255, 0.1), + rgba(255, 255, 255, 0.5), + rgba(255, 255, 255, 0.1) + ); } .stat-label { font-size: 24rpx; - margin-top: 8rpx; opacity: 0.9; } .stat-value { - font-size: 34rpx; - font-weight: 600; - line-height: 1.2; + display: flex; + align-items: baseline; + line-height: 1; + margin-top: 8rpx; word-break: break-all; } +.stat-value__integer { + font-size: 40rpx; + font-weight: 600; +} + +.stat-value__decimal { + font-size: 28rpx; + font-weight: 500; + margin-left: 4rpx; +} + .stat-more-arrow { margin-left: 20rpx; flex-shrink: 0; + width: 50rpx; + height: 50rpx; + border-radius: 50%; + background-color: rgba(255, 255, 255, 0.15); + display: flex; + align-items: center; + justify-content: center; + box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.1); } @keyframes bling_shimmer { @@ -1459,4 +1573,8 @@ export default { transform: translateX(100%); } } + +.region-select-action { + padding: 30rpx 20rpx; +}