/** * 项目状态(bomStatus)—— 与后端 ProjectStatusLock 保持一致。 * 页面展示 / 筛选 / 设置状态都用这一套,不再读字典 process_status。 * * 8 工艺审核完成:禁止出图、禁止上传工艺路线 * 6 开始生产 / 7 生产完成:禁止出图、上传工艺路线、推送工艺、更新物料清单 */ export const ProjectStatusAction = { DRAWING: "DRAWING", UPLOAD_ROUTE: "UPLOAD_ROUTE", PUSH_ROUTE: "PUSH_ROUTE", UPDATE_MATERIAL: "UPDATE_MATERIAL", }; const ACTION_LABEL = { DRAWING: "出图", UPLOAD_ROUTE: "上传工艺路线", PUSH_ROUTE: "推送工艺", UPDATE_MATERIAL: "更新物料清单", }; /** 与后端写入值一致;5 为历史残留,展示等同开始生产,不出现在下拉 */ export const PROJECT_STATUS_MAP = { 0: "方案设计完成", 1: "设计出图完成", 2: "工艺待审核", 3: "已推送BOM", 4: "已推送工艺", 5: "开始生产", 6: "开始生产", 7: "生产完成", 8: "工艺审核完成", 9: "工艺审核拒绝", }; export const PROJECT_STATUS_OPTIONS = [ { value: 0, label: "方案设计完成" }, { value: 1, label: "设计出图完成" }, { value: 2, label: "工艺待审核" }, { value: 3, label: "已推送BOM" }, { value: 4, label: "已推送工艺" }, { value: 6, label: "开始生产" }, { value: 7, label: "生产完成" }, { value: 8, label: "工艺审核完成" }, { value: 9, label: "工艺审核拒绝" }, { value: 10, label: "取消出图" }, { value: 11, label: "不需要出图" }, ]; export function projectStatusLabel(bomStatus) { const s = bomStatus === null || bomStatus === undefined || bomStatus === "" ? null : Number(bomStatus); if (s === null || Number.isNaN(s)) return "未知"; return PROJECT_STATUS_MAP[s] || String(s); } export function denyIfProjectStatusLocked(bomStatus, action) { if (bomStatus === null || bomStatus === undefined || bomStatus === "" || !action) { return null; } const s = Number(bomStatus); if (Number.isNaN(s)) return null; const productionLocked = s === 5 || s === 6 || s === 7; const routeApproved = s === 8; if (action === ProjectStatusAction.DRAWING || action === ProjectStatusAction.UPLOAD_ROUTE) { if (productionLocked || routeApproved) { return `当前项目状态为「${projectStatusLabel(s)}」,不允许${ACTION_LABEL[action]}`; } return null; } if (action === ProjectStatusAction.PUSH_ROUTE || action === ProjectStatusAction.UPDATE_MATERIAL) { if (productionLocked) { return `当前项目状态为「${projectStatusLabel(s)}」,不允许${ACTION_LABEL[action]}`; } return null; } return null; } export function isProjectStatusLocked(bomStatus, action) { return !!denyIfProjectStatusLocked(bomStatus, action); }