fix(sideBarUserInfo): 修复奖衔展示错误的问题 bug-93
This commit is contained in:
parent
905f2ea14c
commit
f5bb9fe310
|
@ -53,17 +53,14 @@
|
|||
<!--! 用户卡片信息 -->
|
||||
<div class="awardscard">
|
||||
<!-- NEW: Awards Sprint Text -->
|
||||
<div
|
||||
v-if="awards.tarAwardsName && sprintProgress"
|
||||
class="awards-progress-summary"
|
||||
>
|
||||
<div v-if="awards.tarAwardsName" class="awards-progress-summary">
|
||||
<span class="descriptive-text">当前距离</span>
|
||||
<span class="highlight-name">
|
||||
{{ awards.tarAwardsName }}
|
||||
</span>
|
||||
<span class="descriptive-text">奖衔,小区仅需</span>
|
||||
<span class="highlight-pv">
|
||||
{{ sprintProgress.gapText }}
|
||||
{{ sprintProgress.achieved }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
@ -153,10 +150,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<!-- NEW: Awards Sprint Progress Bar -->
|
||||
<div
|
||||
v-if="awards.tarAwardsName && sprintProgress"
|
||||
class="progress-wrapper"
|
||||
>
|
||||
<div v-if="awards.tarAwardsName" class="progress-wrapper">
|
||||
<div class="progress-wrapper__label">奖衔冲刺</div>
|
||||
<div class="sprint-progress-container">
|
||||
<div
|
||||
|
@ -164,8 +158,8 @@
|
|||
:style="{ width: sprintProgress.percentageString }"
|
||||
></div>
|
||||
<div class="sprint-progress-text">
|
||||
已完成 {{ sprintProgress.actualAchievedText }} / 目标
|
||||
{{ sprintProgress.targetText }}
|
||||
已完成 {{ awards.sumRealPv }} / 目标
|
||||
{{ sprintProgress.target }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -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;
|
||||
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;
|
||||
} else {
|
||||
actualAchievedPv = 0;
|
||||
percentage = 0;
|
||||
}
|
||||
}
|
||||
|
||||
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,
|
||||
};
|
||||
},
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue