fix(sideBarUserInfo): 修复奖衔展示错误的问题 bug-93
This commit is contained in:
parent
905f2ea14c
commit
f5bb9fe310
|
@ -53,17 +53,14 @@
|
||||||
<!--! 用户卡片信息 -->
|
<!--! 用户卡片信息 -->
|
||||||
<div class="awardscard">
|
<div class="awardscard">
|
||||||
<!-- NEW: Awards Sprint Text -->
|
<!-- NEW: Awards Sprint Text -->
|
||||||
<div
|
<div v-if="awards.tarAwardsName" class="awards-progress-summary">
|
||||||
v-if="awards.tarAwardsName && sprintProgress"
|
|
||||||
class="awards-progress-summary"
|
|
||||||
>
|
|
||||||
<span class="descriptive-text">当前距离</span>
|
<span class="descriptive-text">当前距离</span>
|
||||||
<span class="highlight-name">
|
<span class="highlight-name">
|
||||||
{{ awards.tarAwardsName }}
|
{{ awards.tarAwardsName }}
|
||||||
</span>
|
</span>
|
||||||
<span class="descriptive-text">奖衔,小区仅需</span>
|
<span class="descriptive-text">奖衔,小区仅需</span>
|
||||||
<span class="highlight-pv">
|
<span class="highlight-pv">
|
||||||
{{ sprintProgress.gapText }}
|
{{ sprintProgress.achieved }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -153,10 +150,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- NEW: Awards Sprint Progress Bar -->
|
<!-- NEW: Awards Sprint Progress Bar -->
|
||||||
<div
|
<div v-if="awards.tarAwardsName" class="progress-wrapper">
|
||||||
v-if="awards.tarAwardsName && sprintProgress"
|
|
||||||
class="progress-wrapper"
|
|
||||||
>
|
|
||||||
<div class="progress-wrapper__label">奖衔冲刺</div>
|
<div class="progress-wrapper__label">奖衔冲刺</div>
|
||||||
<div class="sprint-progress-container">
|
<div class="sprint-progress-container">
|
||||||
<div
|
<div
|
||||||
|
@ -164,8 +158,8 @@
|
||||||
:style="{ width: sprintProgress.percentageString }"
|
:style="{ width: sprintProgress.percentageString }"
|
||||||
></div>
|
></div>
|
||||||
<div class="sprint-progress-text">
|
<div class="sprint-progress-text">
|
||||||
已完成 {{ sprintProgress.actualAchievedText }} / 目标
|
已完成 {{ awards.sumRealPv }} / 目标
|
||||||
{{ sprintProgress.targetText }}
|
{{ sprintProgress.target }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -207,59 +201,42 @@ export default {
|
||||||
},
|
},
|
||||||
...mapGetters(["userInfo"]),
|
...mapGetters(["userInfo"]),
|
||||||
sprintProgress() {
|
sprintProgress() {
|
||||||
const awardsData = this.awards || {}; // Handle case where awards might be null/undefined initially
|
const targetPvStr = this.awards?.targetPv;
|
||||||
const targetPvStr = awardsData.targetPv;
|
const sumRealPvStr = this.awards?.sumRealPv; // 这是"小区仅需"的量,即差距
|
||||||
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 targetPv = parseFloat(targetPvStr);
|
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;
|
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) {
|
if (!isNaN(targetPv) && targetPv > 0) {
|
||||||
actualAchievedPv =
|
// sumRealPv 是差距,所以已完成的是 targetPv - sumRealPv
|
||||||
numericTargetPv - (isNaN(gapPv) ? numericTargetPv : gapPv);
|
achievedPv = targetPv - (isNaN(sumRealPv) ? 0 : sumRealPv);
|
||||||
actualAchievedPv = Math.max(0, actualAchievedPv);
|
|
||||||
actualAchievedPv = Math.min(actualAchievedPv, numericTargetPv);
|
achievedPv = Math.max(0, Math.min(achievedPv, targetPv));
|
||||||
percentage = (actualAchievedPv / numericTargetPv) * 100;
|
|
||||||
} else if (numericTargetPv === 0) {
|
percentage = (sumRealPvStr / targetPv) * 100;
|
||||||
if (!isNaN(gapPv) && gapPv <= 0) {
|
} else if (
|
||||||
actualAchievedPv = 0;
|
!isNaN(targetPv) &&
|
||||||
percentage = 100;
|
targetPv === 0 &&
|
||||||
} else {
|
!isNaN(sumRealPv) &&
|
||||||
actualAchievedPv = 0;
|
sumRealPv <= 0
|
||||||
percentage = 0;
|
) {
|
||||||
}
|
// 如果目标是0,且差距也是0或负数(表示已满足或超越0目标),则认为是100%
|
||||||
|
achievedPv = 0;
|
||||||
|
percentage = 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
const clampedPercentage = Math.min(
|
const clampedPercentage = Math.min(100, Math.max(0, percentage));
|
||||||
100,
|
|
||||||
Math.max(0, isNaN(percentage) ? 0 : percentage)
|
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
percentageString: `${Math.floor(clampedPercentage)}%`,
|
percentageString: `${Math.floor(clampedPercentage)}%`,
|
||||||
actualAchievedText: (Math.floor(actualAchievedPv * 100) / 100).toFixed(
|
achieved: (Math.floor(achievedPv * 100) / 100).toFixed(2),
|
||||||
2
|
target: numericTargetPv.toFixed(2),
|
||||||
),
|
rawPercentage: clampedPercentage,
|
||||||
targetText: numericTargetPv.toFixed(2),
|
|
||||||
gapText: (Math.floor((isNaN(gapPv) ? 0 : gapPv) * 100) / 100).toFixed(
|
|
||||||
2
|
|
||||||
),
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue