gaoluyang
3 小时以前 e449a5408265e4bd1f6c66f5be28a42efac444ee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**
 * 字典渲染小工具
 *
 * 项目管理的「单据状态 / 计划状态 / 审核状态」都来自后端字典
 * (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,
  }));
}