From 113e5e61ff4f08ea5417da6f75f07eb3cb89f41d Mon Sep 17 00:00:00 2001 From: woody Date: Thu, 8 May 2025 12:50:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(mine):=20=E6=B7=BB=E5=8A=A0=E5=A5=96?= =?UTF-8?q?=E8=A1=94=E8=B7=9D=E7=A6=BB=E7=9B=B8=E5=85=B3=E6=96=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/request.js | 2 +- pages/mine/index.vue | 115 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 114 insertions(+), 3 deletions(-) diff --git a/config/request.js b/config/request.js index 5fa9b1b..767eacb 100644 --- a/config/request.js +++ b/config/request.js @@ -13,7 +13,7 @@ module.exports = (vm) => { //#ifdef DEV_SERVER console.log('DEV_SERVER') - config.baseURL = '/prod-api'; + config.baseURL = 'http://192.168.0.103:8080'; //#endif //#ifdef QA_SERVER diff --git a/pages/mine/index.vue b/pages/mine/index.vue index 7b0803a..8a2f1a2 100644 --- a/pages/mine/index.vue +++ b/pages/mine/index.vue @@ -59,7 +59,7 @@ - + 当前距离 {{ awards.tarAwardsName }} @@ -67,7 +67,7 @@ 奖衔,小区仅需 {{ - awards.targetPv + awards.sumRealPv }} @@ -116,6 +116,18 @@ > + + 奖衔冲刺 + + + + 已完成 {{ sprintProgress.achieved }} / 目标 {{ sprintProgress.target }} + + + @@ -459,6 +471,45 @@ export default { this.getUserAwardss(); }, + computed: { + sprintProgress() { + const targetPvStr = this.awards.targetPv; + const sumRealPvStr = this.awards.sumRealPv; // 这是"小区仅需"的量,即差距 + + const targetPv = parseFloat(targetPvStr); + const sumRealPv = parseFloat(sumRealPvStr); + + let achievedPv = 0; + let percentage = 0; + let displayTargetPv = (isNaN(targetPv) ? 0 : targetPv).toFixed(2); + + if (!isNaN(targetPv) && targetPv > 0) { + // sumRealPv 是差距,所以已完成的是 targetPv - sumRealPv + achievedPv = targetPv - (isNaN(sumRealPv) ? 0 : sumRealPv); + + // 确保 achievedPv 不会小于0(如果 sumRealPv > targetPv,理论上不应发生) + // 且不会大于 targetPv (如果 sumRealPv 是负数,表示已超额) + achievedPv = Math.max(0, Math.min(achievedPv, targetPv)); + + percentage = (achievedPv / targetPv) * 100; + } else if (!isNaN(targetPv) && targetPv === 0 && !isNaN(sumRealPv) && sumRealPv <=0) { + // 如果目标是0,且差距也是0或负数(表示已满足或超越0目标),则认为是100% + achievedPv = 0; + percentage = 100; + } + + + const clampedPercentage = Math.min(100, Math.max(0, percentage)); + + return { + percentageString: `${clampedPercentage.toFixed(0)}%`, + achieved: achievedPv.toFixed(2), + target: displayTargetPv, + rawPercentage: clampedPercentage + }; + } + }, + methods: { goYear(){ uni.navigateTo({ @@ -1223,4 +1274,64 @@ export default { margin-top: 30rpx; padding: 20rpx 22rpx 150rpx 22rpx; } + +.sprint-progress-container { + flex: 1; + height: 34rpx; + background: #eeeeee; + border-radius: 20rpx; + margin: 10rpx; + position: relative; + overflow: hidden; +} + +.sprint-current-progress { + position: absolute; + left: 0; + top: 0; + height: 100%; + border-radius: 20rpx; + background: linear-gradient(135deg, #ED9A38 0%, #FDD05F 50%, #E68A2E 100%); + transition: width 0.6s ease-in-out; + box-shadow: none; + overflow: hidden; +} + +.sprint-current-progress::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient( + 100deg, + rgba(255, 255, 255, 0) 20%, + rgba(255, 255, 255, 0.4) 50%, + rgba(255, 255, 255, 0) 80% + ); + transform: translateX(-100%); + animation: premium_shimmer_animation 2.5s infinite linear; +} + +@keyframes premium_shimmer_animation { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } +} + +.sprint-progress-text { + width: 100%; + position: absolute; + top: 60%; + left: 0; + transform: translate(0%, -55%); + white-space: nowrap; + text-align: center; + font-size: 24rpx; + color: #333333; +}