zhangwencui
8 天以前 dab35bff798cfce2ddf7e8a67e4e1cdb144f5b4c
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
export type StatusTone = "draft" | "progress" | "approved" | "finished" | "cancelled" | "danger" | "success" | "info";
 
const TEXT_TONE_RULES: Array<[RegExp, StatusTone]> = [
  [/草稿|未提交|待审核|待提交|未审核|未开始|待处理|待执行|待回款/, "draft"],
  [/审批中|进行中|处理中|待审批|待下发|待上架|待拣货|待收货|待入库|待出库|已下发|已预留|部分/, "progress"],
  [/已审核|已通过|已批准|已转合同|已回款|已确认|已接收|已上架|已拣货/, "approved"],
  [/已完成|完成|全部|已入库|已出库|已结清|已付款|已生成/, "finished"],
  [/已取消|已撤销|已作废|作废|取消|关闭|停用/, "cancelled"],
  [/已拒绝|已驳回|不合格|异常|失败|逾期|过期|无效/, "danger"],
  [/启用|开启|正常|合格|通过/, "success"],
];
 
const VALUE_TONE_RULES: Record<number, StatusTone> = {
  0: "draft",
  1: "progress",
  2: "finished",
  3: "cancelled",
  10: "draft",
  15: "progress",
  20: "approved",
  30: "cancelled",
  35: "danger",
  40: "cancelled",
};
 
export function statusToneClass(value?: number | string, label?: string) {
  const text = label || (value === undefined || value === null ? "" : String(value));
  const textRule = TEXT_TONE_RULES.find(([pattern]) => pattern.test(text));
  if (textRule) return `tag-${textRule[1]}`;
  const numberValue = Number(value);
  return `tag-${VALUE_TONE_RULES[numberValue] || "info"}`;
}