87 lines
2.8 KiB
JavaScript
87 lines
2.8 KiB
JavaScript
/**
|
||
* 项目状态(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);
|
||
}
|