优化: 审批弹窗全局化与体验打磨

This commit is contained in:
lxy
2026-08-10 08:04:30 +08:00
parent dedb9a8862
commit 6141a67b0e
10 changed files with 159 additions and 47 deletions
+11 -3
View File
@@ -62,21 +62,29 @@ const ASSESSMENT_CLASS_MAP: Record<string, string> = {
/**
* recommendation 字符串 → CSS badge 类。
* 未知值回退到 'conditional'(中性,对齐原两处实现)。
* 未知值(或非字符串/空)回退到 'conditional'(中性,对齐原两处实现)。
*
* WK-15:旧实现对 undefined/null 调 `.toLowerCase()` 崩。对抗评估 ai_analysis
* 可能未生成 recommendation 字段(老数据/降级),调用方传值时也可能漏判空。
* 这里在源头做防御:非字符串/空串统一回退 conditional。
*/
export function assessmentClass(recommendation: string): string {
export function assessmentClass(recommendation: string | null | undefined): string {
if (typeof recommendation !== 'string' || recommendation.length === 0) return 'conditional'
return ASSESSMENT_CLASS_MAP[recommendation.toLowerCase()] ?? 'conditional'
}
/**
* recommendation 字符串 → i18n 本地化标签。
* 命中 ideas.assessment.{recommendation} 则返回译文,否则回退到原始 recommendation。
*
* WK-15:非字符串/空 → 回退占位符 '—'(避免模板渲染 undefined),与详情页其他空值一致。
* @param t vue-i18n 的 t 函数(useI18n().t),由调用方注入避免本模块耦合 i18n 实例
*/
export function assessmentLabel(
t: ComposerTranslation,
recommendation: string,
recommendation: string | null | undefined,
): string {
if (typeof recommendation !== 'string' || recommendation.length === 0) return '—'
const key = `ideas.assessment.${recommendation}`
const translated = t(key)
return translated === key ? recommendation : translated