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)