From 6c3b2f4a1d69dafcb5b5f3aefe7690f7a9fef921 Mon Sep 17 00:00:00 2001 From: zhonghua Date: Wed, 15 Apr 2026 13:45:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B4=BB=E5=8A=A8=E8=AF=84=E5=AE=A1?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E6=80=BB=E5=88=86=E6=8C=89=E7=BB=B4=E5=BA=A6?= =?UTF-8?q?=E6=9D=83=E9=87=8D=E5=8A=A0=E6=9D=83=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .../activities/components/ReviewWorkModal.vue | 296 +++++++----------- 1 file changed, 109 insertions(+), 187 deletions(-) diff --git a/lesingle-creation-frontend/src/views/activities/components/ReviewWorkModal.vue b/lesingle-creation-frontend/src/views/activities/components/ReviewWorkModal.vue index 8259002..aba2751 100644 --- a/lesingle-creation-frontend/src/views/activities/components/ReviewWorkModal.vue +++ b/lesingle-creation-frontend/src/views/activities/components/ReviewWorkModal.vue @@ -1,13 +1,6 @@ @@ -407,17 +318,27 @@ const currentPreviewImage = computed(() => { return item?.previewUrl || workDetail.value?.previewUrl || null; }); -// 总分计算 +// 总分计算:多维度时各维度输入 0~100 分,总得分 = Σ(维度得分 × 权重% / 100) const totalScore = computed(() => { // 如果已评审,直接返回数据库存储的总分 - if (isReviewed.value && existingScore.value?.totalScore !== null) { + if ( + isReviewed.value && + existingScore.value?.totalScore !== null && + existingScore.value?.totalScore !== undefined + ) { return Number(existingScore.value.totalScore); } - // 否则根据当前输入计算 - if (reviewRule.value) { - return dimensionScores.value.reduce((sum, score) => sum + (score || 0), 0); + if (reviewRule.value?.dimensions?.length) { + let sum = 0; + for (let i = 0; i < reviewRule.value.dimensions.length; i++) { + const dim = reviewRule.value.dimensions[i]; + const s = Number(dimensionScores.value[i] ?? 0); + const w = Number(dim.percentage ?? 0) / 100; + sum += s * w; + } + return Math.round(sum * 100) / 100; } - return simpleScore.value || 0; + return Number(simpleScore.value ?? 0); }); // 格式化日期 @@ -445,7 +366,7 @@ const downloadAttachment = (attachment: any) => { document.body.removeChild(link); }; -// 增加分数 +// 增加分数(各维度独立 0~100) const increaseScore = (index: number, maxScore: number) => { const current = dimensionScores.value[index] || 0; if (current < maxScore) { @@ -468,7 +389,7 @@ const handlePresetSelect = (presetId: number | undefined) => { if (preset) { comments.value = preset.content; // 增加使用次数 - presetCommentsApi.incrementUseCount(presetId).catch(() => {}); + presetCommentsApi.incrementUseCount(presetId).catch(() => { }); } } }; @@ -594,12 +515,12 @@ const handleSubmit = async () => { // 验证评分 if (reviewRule.value) { - const hasInvalidScore = dimensionScores.value.some((score, idx) => { - const dim = reviewRule.value!.dimensions[idx]; - return score === undefined || score === null || score < 0 || score > dim.percentage; + const hasInvalidScore = dimensionScores.value.some((score) => { + const s = score === undefined || score === null ? NaN : Number(score); + return Number.isNaN(s) || s < 0 || s > 100; }); if (hasInvalidScore) { - message.warning("请为所有评分维度填写有效分数"); + message.warning("请为所有评分维度填写 0~100 的有效分数"); return; } } else { @@ -622,7 +543,8 @@ const handleSubmit = async () => { if (reviewRule.value?.dimensions) { scoreData.dimensionScores = reviewRule.value.dimensions.map((dim, idx) => ({ name: dim.name, - score: dimensionScores.value[idx] || 0, + score: dimensionScores.value[idx] ?? 0, + /** 权重占比(%),总得分由前端按 Σ(score×percentage/100) 计算后写入 totalScore */ maxScore: dim.percentage, })); } @@ -948,7 +870,7 @@ $primary: #0958d9; gap: 8px; .score-input { - width: 60px; + width: 100px; text-align: center; }