重构(AGC模型文案): 合并原因到文案的重复映射

- 两个 helper 原先各维护一份 reason switch,新增 reason 时容易漏改一处
- 抽成单个 REASON_COPY 表,unknown 作为未知/缺失原因的兜底,两个 helper 共用
This commit is contained in:
2026-10-05 13:50:16 +08:00
parent 4f3faa04b5
commit 5dc0654426
@@ -1,21 +1,34 @@
import type { ClientLlmModelUnavailableReason } from '../../services/llmModelCatalog';
/**
* 锁定项 hover / 键盘 focus 的原因文案。
* 原因 → 文案的统一映射。
*
* `unknown` 是契约的前向兜底,后端将来新增 `reason` 时旧客户端仍给出可读文案。
* `unknown` 是契约的前向兜底,后端将来新增 `reason` 时旧客户端仍给出可读文案;两个 helper
* 共用本表,避免各自维护一份 switch 后漂移。
*/
const REASON_COPY: Record<
ClientLlmModelUnavailableReason,
{ label: string; fallback: string }
> = {
plan_required: {
label: '订阅计划不支持',
fallback: '所选模型需要更高订阅计划,已切换为默认模型',
},
disabled: {
label: '该模型已下线',
fallback: '所选模型已下线,已切换为默认模型',
},
unknown: {
label: '暂不可用',
fallback: '所选模型已不可用,已切回默认模型',
},
};
/** 锁定项 hover / 键盘 focus 的原因文案。 */
export function unavailableModelReasonLabel(
reason: ClientLlmModelUnavailableReason,
): string {
switch (reason) {
case 'plan_required':
return '订阅计划不支持';
case 'disabled':
return '该模型已下线';
default:
return '暂不可用';
}
return (REASON_COPY[reason] ?? REASON_COPY.unknown).label;
}
/**
@@ -27,12 +40,8 @@ export function unavailableModelReasonLabel(
export function unavailableModelFallbackNotice(
unavailableReason: ClientLlmModelUnavailableReason | undefined,
): string {
switch (unavailableReason) {
case 'plan_required':
return '所选模型需要更高订阅计划,已切换为默认模型';
case 'disabled':
return '所选模型已下线,已切换为默认模型';
default:
return '所选模型已不可用,已切回默认模型';
if (!unavailableReason) {
return REASON_COPY.unknown.fallback;
}
return (REASON_COPY[unavailableReason] ?? REASON_COPY.unknown).fallback;
}