/**
|
* 字典渲染小工具
|
*
|
* 项目管理的「单据状态 / 计划状态 / 审核状态」都来自后端字典
|
* (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,
|
}));
|
}
|