From b3b4a9cddb316706a4f10f6f40336fe4c16caeaf Mon Sep 17 00:00:00 2001 From: JSR Date: Fri, 27 Mar 2026 20:49:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8A=A0=E6=89=A3=E5=88=86=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E6=8C=89=E5=AD=97=E6=AE=B5=E5=AD=98=E5=9C=A8=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E5=B9=B6=E5=B0=86=E7=A9=BA=E5=80=BC=E8=A7=86=E4=B8=BA?= =?UTF-8?q?0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/BoardManager.tsx | 34 ++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/src/components/BoardManager.tsx b/src/components/BoardManager.tsx index 9045048..bad19ff 100644 --- a/src/components/BoardManager.tsx +++ b/src/components/BoardManager.tsx @@ -71,6 +71,8 @@ interface BoardStudentCardData { score?: number addScore?: number deductScore?: number + hasAddScoreField?: boolean + hasDeductScoreField?: boolean rewardPoints?: number weekChange?: number weekDeducted?: number @@ -306,14 +308,36 @@ const toStudentCards = (rows: any[]): BoardStudentCardData[] => { if (!name) return const data = row as Record + const hasAddScoreField = + "add_score" in data || "addScore" in data || "plus_score" in data || "plusScore" in data + const hasDeductScoreField = + "deduct_score" in data || + "deductScore" in data || + "minus_score" in data || + "minusScore" in data + + const addScoreRaw = data.add_score ?? data.addScore ?? data.plus_score ?? data.plusScore + const deductScoreRaw = + data.deduct_score ?? data.deductScore ?? data.minus_score ?? data.minusScore + cards.push({ key: `${name}-${index}`, name, score: parseNumber(data.score), - addScore: parseNumber(data.add_score ?? data.addScore ?? data.plus_score ?? data.plusScore), - deductScore: parseNumber( - data.deduct_score ?? data.deductScore ?? data.minus_score ?? data.minusScore - ), + addScore: + addScoreRaw === null || addScoreRaw === undefined + ? hasAddScoreField + ? 0 + : undefined + : parseNumber(addScoreRaw), + deductScore: + deductScoreRaw === null || deductScoreRaw === undefined + ? hasDeductScoreField + ? 0 + : undefined + : parseNumber(deductScoreRaw), + hasAddScoreField, + hasDeductScoreField, rewardPoints: parseNumber(data.reward_points ?? data.rewardPoints), weekChange: parseNumber(data.week_change ?? data.range_change ?? data.change), weekDeducted: parseNumber(data.week_deducted ?? data.deducted), @@ -824,7 +848,7 @@ ORDER BY reward_points DESC, score DESC`, const avatarText = getAvatarText(item.name) const rankBadge = index === 0 ? "🥇" : index === 1 ? "🥈" : index === 2 ? "🥉" : null const useSplitScore = list.scoreDisplayMode === "split" - const hasSplitScore = item.addScore !== undefined || item.deductScore !== undefined + const hasSplitScore = Boolean(item.hasAddScoreField || item.hasDeductScoreField) const primaryMetric = useSplitScore ? item.addScore !== undefined ? { label: t("board.metrics.addScore"), value: item.addScore }