diff --git a/src/views/index/components/sidebarUserInfo.vue b/src/views/index/components/sidebarUserInfo.vue index 7039a29..f423e2a 100644 --- a/src/views/index/components/sidebarUserInfo.vue +++ b/src/views/index/components/sidebarUserInfo.vue @@ -53,17 +53,14 @@
-
+
当前距离 {{ awards.tarAwardsName }} 奖衔,小区仅需 - {{ sprintProgress.gapText }} + {{ sprintProgress.achieved }}
@@ -153,10 +150,7 @@
-
+
奖衔冲刺
- 已完成 {{ sprintProgress.actualAchievedText }} / 目标 - {{ sprintProgress.targetText }} + 已完成 {{ awards.sumRealPv }} / 目标 + {{ sprintProgress.target }}
@@ -207,59 +201,42 @@ export default { }, ...mapGetters(["userInfo"]), sprintProgress() { - const awardsData = this.awards || {}; // Handle case where awards might be null/undefined initially - const targetPvStr = awardsData.targetPv; - const sumRealPvStr = awardsData.sumRealPv; // User comment: 这是"小区仅需"的量,即差距 - - if ( - typeof targetPvStr === "undefined" || - typeof sumRealPvStr === "undefined" - ) { - return { - percentageString: "0%", - actualAchievedText: "0.00", - targetText: "0.00", - gapText: "0.00", - }; - } + const targetPvStr = this.awards?.targetPv; + const sumRealPvStr = this.awards?.sumRealPv; // 这是"小区仅需"的量,即差距 const targetPv = parseFloat(targetPvStr); - const gapPv = parseFloat(sumRealPvStr); // sumRealPv is the gap + const sumRealPv = parseFloat(sumRealPvStr); - let actualAchievedPv = 0; + let achievedPv = 0; let percentage = 0; - const numericTargetPv = Math.max(0, isNaN(targetPv) ? 0 : targetPv); + const numericTargetPv = + Math.floor((isNaN(targetPv) ? 0 : targetPv) * 100) / 100; - if (numericTargetPv > 0) { - actualAchievedPv = - numericTargetPv - (isNaN(gapPv) ? numericTargetPv : gapPv); - actualAchievedPv = Math.max(0, actualAchievedPv); - actualAchievedPv = Math.min(actualAchievedPv, numericTargetPv); - percentage = (actualAchievedPv / numericTargetPv) * 100; - } else if (numericTargetPv === 0) { - if (!isNaN(gapPv) && gapPv <= 0) { - actualAchievedPv = 0; - percentage = 100; - } else { - actualAchievedPv = 0; - percentage = 0; - } + if (!isNaN(targetPv) && targetPv > 0) { + // sumRealPv 是差距,所以已完成的是 targetPv - sumRealPv + achievedPv = targetPv - (isNaN(sumRealPv) ? 0 : sumRealPv); + + achievedPv = Math.max(0, Math.min(achievedPv, targetPv)); + + percentage = (sumRealPvStr / 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, isNaN(percentage) ? 0 : percentage) - ); + const clampedPercentage = Math.min(100, Math.max(0, percentage)); return { percentageString: `${Math.floor(clampedPercentage)}%`, - actualAchievedText: (Math.floor(actualAchievedPv * 100) / 100).toFixed( - 2 - ), - targetText: numericTargetPv.toFixed(2), - gapText: (Math.floor((isNaN(gapPv) ? 0 : gapPv) * 100) / 100).toFixed( - 2 - ), + achieved: (Math.floor(achievedPv * 100) / 100).toFixed(2), + target: numericTargetPv.toFixed(2), + rawPercentage: clampedPercentage, }; }, },