From 6571eadc20ce1e4274f98935d45de5d05abffb08 Mon Sep 17 00:00:00 2001 From: zou Date: Sat, 22 Aug 2026 16:24:25 +0800 Subject: [PATCH] fix(F006): fix rating/score page runtime crash from undefined supplierLevel/score --- .../EnterpriseratingListView.vue | 27 ++++++++----------- .../EnterprisescoreListView.vue | 2 +- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/modules/user/enterpriserating/EnterpriseratingListView.vue b/src/modules/user/enterpriserating/EnterpriseratingListView.vue index 0d950cd..c868516 100644 --- a/src/modules/user/enterpriserating/EnterpriseratingListView.vue +++ b/src/modules/user/enterpriserating/EnterpriseratingListView.vue @@ -62,17 +62,17 @@ const filtered = computed(() => { return rs }) -// 等级统计 + 分数均值 +// 统计 + 平均分 (用可选链防御 API 字段缺失) const stats = computed(() => { const rs = filtered.value - const aCount = rs.filter(r => r.supplierLevel.startsWith('A')).length - const avgFinal = rs.length ? Math.round(rs.reduce((s, r) => s + r.finalScore, 0) / rs.length) : 0 - const avgClient = rs.length ? Math.round(rs.reduce((s, r) => s + r.clientScore, 0) / rs.length) : 0 + const aCount = rs.filter(r => r.supplierLevel?.startsWith('A') ?? false).length + const avgFinal = rs.length ? Math.round(rs.reduce((s, r) => s + (r.finalScore || 0), 0) / rs.length) : 0 + const avgClient = rs.length ? Math.round(rs.reduce((s, r) => s + (r.clientScore || 0), 0) / rs.length) : 0 return [ { label: '评级总数', value: rs.length, icon: 'Medal', color: 'var(--brand)' }, { label: 'A 战略级', value: aCount, icon: 'Top', color: 'var(--green)' }, - { label: '平均最终得分', value: avgFinal, icon: 'DataAnalysis', color: 'var(--amber)' }, - { label: '平均客户评价', value: avgClient, icon: 'ChatLineSquare', color: 'var(--purple)' } + { label: '平均最终得分', value: avgFinal, icon: 'Trophy', color: 'var(--amber)' }, + { label: '平均客户评价', value: avgClient, icon: 'Star', color: 'var(--purple)' } ] }) @@ -98,12 +98,11 @@ async function onBatchExport() { } function onExport() { ElMessage.success(`已发起导出 (前端示例, 共 ${filtered.value.length} 条)`) } -// 等级 st-pill 颜色映射 function levelPill(r: RatingRow) { - if (r.supplierLevel.startsWith('A')) return { label: r.supplierLevel, color: 'var(--st-ok-fg)', bg: 'var(--st-ok-bg)' } - if (r.supplierLevel.startsWith('B')) return { label: r.supplierLevel, color: 'var(--brand)', bg: 'var(--brand-soft)' } - if (r.supplierLevel.startsWith('C')) return { label: r.supplierLevel, color: 'var(--st-warn-fg)', bg: 'var(--st-warn-bg)' } - return { label: r.supplierLevel, color: 'var(--st-err-fg)', bg: 'var(--st-err-bg)' } + if (r.supplierLevel?.startsWith('A')) return { label: r.supplierLevel, color: 'var(--st-ok-fg)', bg: 'var(--st-ok-bg)' } + if (r.supplierLevel?.startsWith('B')) return { label: r.supplierLevel, color: 'var(--brand)', bg: 'var(--brand-soft)' } + if (r.supplierLevel?.startsWith('C')) return { label: r.supplierLevel, color: 'var(--st-warn-fg)', bg: 'var(--st-warn-bg)' } + return { label: r.supplierLevel ?? '-', color: 'var(--st-err-fg)', bg: 'var(--st-err-bg)' } } onMounted(load) @@ -115,7 +114,6 @@ onMounted(load) 导出明细 -
@@ -131,7 +129,6 @@ onMounted(load)
-
已选 {{ selection.length }} 条评级 勾选后可批量导出 @@ -147,7 +144,7 @@ onMounted(load) @limit-change="(l: number) => { limit = l; page = 1; load() }">