Files
ForgeFlow-ERP/frontend/src/utils/buttonSemantics.js
T
2026-06-12 16:00:56 +08:00

114 lines
5.4 KiB
JavaScript

const EXACT_ACTIONS = new Map([
["刷新", { label: "刷新数据", icon: "refresh", tone: "neutral", kind: "tool" }],
["查看", { label: "查看详情", icon: "view", tone: "info", kind: "table" }],
["详情", { label: "查看详情", icon: "view", tone: "info", kind: "table" }],
["编辑", { label: "编辑资料", icon: "edit", tone: "info", kind: "table" }],
["删除", { label: "删除记录", icon: "delete", tone: "danger", kind: "danger" }],
["移除", { label: "移除记录", icon: "delete", tone: "danger", kind: "danger" }],
["增加一行", { label: "添加明细行", icon: "rowAdd", tone: "info", kind: "secondary" }],
["新增工序", { label: "添加工序", icon: "rowAdd", tone: "info", kind: "secondary" }],
["添加联系人", { label: "添加联系人", icon: "plus", tone: "info", kind: "secondary" }],
["保存", { label: "保存信息", icon: "save", tone: "primary", kind: "primary" }],
["取消", { label: "取消操作", icon: "close", tone: "neutral", kind: "secondary" }],
["关闭", { label: "关闭窗口", icon: "close", tone: "neutral", kind: "secondary" }],
["放大", { label: "放大视图", icon: "zoomIn", tone: "neutral", kind: "tool" }],
["缩小", { label: "缩小视图", icon: "zoomOut", tone: "neutral", kind: "tool" }],
["一屏展示", { label: "一屏展示", icon: "fitScreen", tone: "neutral", kind: "tool" }],
["授权", { label: "人员授权", icon: "authorize", tone: "primary", kind: "primary" }],
["放行", { label: "质检放行", icon: "check", tone: "success", kind: "success" }],
["处置", { label: "处理退货", icon: "edit", tone: "warning", kind: "warning" }],
["处置记录", { label: "查看处置记录", icon: "ledger", tone: "info", kind: "table" }]
]);
const PARTIAL_ACTIONS = [
{ match: "保存授权", icon: "authorize", tone: "primary", kind: "primary" },
{ match: "保存单据", icon: "save", tone: "primary", kind: "primary" },
{ match: "保存", icon: "save", tone: "primary", kind: "primary" },
{ match: "确认", icon: "check", tone: "primary", kind: "primary" },
{ match: "登记", icon: "save", tone: "primary", kind: "primary" },
{ match: "提交", icon: "save", tone: "primary", kind: "primary" },
{ match: "新建", icon: "plus", tone: "primary", kind: "primary" },
{ match: "新增", icon: "plus", tone: "primary", kind: "primary", labelPrefix: "新建" },
{ match: "导入", icon: "import", tone: "primary", kind: "primary" },
{ match: "导出", icon: "export", tone: "success", kind: "tool" },
{ match: "下载", icon: "download", tone: "success", kind: "tool" },
{ match: "上传", icon: "upload", tone: "primary", kind: "primary" },
{ match: "打印", icon: "print", tone: "neutral", kind: "tool" },
{ match: "刷新", icon: "refresh", tone: "neutral", kind: "tool", explicitLabel: "刷新数据" },
{ match: "重置", icon: "refresh", tone: "neutral", kind: "tool" },
{ match: "搜索", icon: "search", tone: "info", kind: "tool" },
{ match: "查看", icon: "view", tone: "info", kind: "table" },
{ match: "详情", icon: "view", tone: "info", kind: "table" },
{ match: "编辑", icon: "edit", tone: "info", kind: "table" },
{ match: "质检放行", icon: "check", tone: "success", kind: "success" },
{ match: "合格", icon: "check", tone: "success", kind: "success" },
{ match: "放行", icon: "check", tone: "success", kind: "success" },
{ match: "驳回", icon: "reject", tone: "danger", kind: "danger" },
{ match: "不合格", icon: "reject", tone: "danger", kind: "danger" },
{ match: "拒绝", icon: "reject", tone: "danger", kind: "danger" },
{ match: "删除", icon: "delete", tone: "danger", kind: "danger" },
{ match: "移除", icon: "delete", tone: "danger", kind: "danger" },
{ match: "结单", icon: "check", tone: "warning", kind: "warning" },
{ match: "添加", icon: "rowAdd", tone: "info", kind: "secondary" },
{ match: "增加", icon: "rowAdd", tone: "info", kind: "secondary" },
{ match: "下一步", icon: "arrowRight", tone: "primary", kind: "primary" },
{ match: "上一步", icon: "arrowLeft", tone: "neutral", kind: "secondary" }
];
function normalizeLabel(label) {
return String(label || "").replace(/\s+/g, " ").trim();
}
function hasDangerClass(className) {
return /\b(danger|danger-ghost|error|reject)\b/i.test(String(className || ""));
}
function normalizeExplicitLabel(label, rule) {
if (rule.explicitLabel) {
return rule.explicitLabel;
}
if (rule.labelPrefix && label.startsWith(rule.match)) {
return `${rule.labelPrefix}${label.slice(rule.match.length)}`;
}
return label;
}
export function resolveButtonSemantics(label, className = "") {
const normalizedLabel = normalizeLabel(label);
if (!normalizedLabel) {
return null;
}
if (hasDangerClass(className) && ["删除", "移除"].includes(normalizedLabel)) {
return EXACT_ACTIONS.get(normalizedLabel);
}
const exact = EXACT_ACTIONS.get(normalizedLabel);
if (exact) {
return exact;
}
const partial = PARTIAL_ACTIONS.find((rule) => normalizedLabel.includes(rule.match));
if (partial) {
return {
label: normalizeExplicitLabel(normalizedLabel, partial),
icon: partial.icon,
tone: hasDangerClass(className) ? "danger" : partial.tone,
kind: hasDangerClass(className) ? "danger" : partial.kind
};
}
if (hasDangerClass(className)) {
return {
label: normalizedLabel,
icon: "warning",
tone: "danger",
kind: "danger"
};
}
return null;
}