/** * 字典渲染小工具 * * 项目管理的「单据状态 / 计划状态 / 审核状态」都来自后端字典 * (bill_status / plan_status / project_management),useDict 拿到的项形如 * { label, value, elTagType, elTagClass }。列表与详情都要把 value 渲染成 * 标签文案 + 颜色,这里收一处。 * * up-tag 只认 info/primary/success/warning/error,后端 listClass 可能是 * danger(Element Plus 词表),必须转换,否则标签不显示颜色。 */ const TAG_TYPE_MAP = { danger: "error", "": "info", default: "info", }; /** 字典值 → 标签文案,找不到返回原值 */ export function dictLabel(options, value) { if (value === undefined || value === null || value === "") return ""; const matched = (options || []).find( item => String(item.value) === String(value) ); return matched ? matched.label : String(value); } /** 字典值 → up-tag 可用的 type */ export function dictTagType(options, value) { const matched = (options || []).find( item => String(item.value) === String(value) ); const raw = matched?.elTagType ?? ""; return TAG_TYPE_MAP[raw] || raw || "info"; } /** useDict 的字典项 → FormPicker / FilterPanel 认识的下拉选项 */ export function toPickerOptions(options) { return (options || []).map(item => ({ name: item.label, value: item.value, })); }