[ { "file": "mom-pro2-before\\src\\api\\mes\\md\\client\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace MesMdClientApi {\n /** MES 客户 */\n export interface Client {\n id?: number; // 客户编号\n code?: string; // 客户编码\n name?: string; // 客户名称\n nickname?: string; // 客户简称\n englishName?: string; // 客户英文名称\n description?: string; // 客户简介\n logo?: string; // 客户 LOGO 地址\n type?: number; // 客户类型\n address?: string; // 客户地址\n website?: string; // 客户官网地址\n email?: string; // 客户邮箱地址\n telephone?: string; // 客户电话\n contact1Name?: string; // 联系人1\n contact1Telephone?: string; // 联系人1电话\n contact1Email?: string; // 联系人1邮箱\n contact2Name?: string; // 联系人2\n contact2Telephone?: string; // 联系人2电话\n contact2Email?: string; // 联系人2邮箱\n creditCode?: string; // 统一社会信用代码\n status?: number; // 状态\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n\n /** 客户导入结果 */\n export interface ClientImportRespVO {\n createCodes?: string[]; // 新增成功的客户编码\n updateCodes?: string[]; // 更新成功的客户编码\n failureCodes?: Record; // 导入失败的客户编码及原因\n }\n}\n\n/** 查询客户分页 */\nexport function getClientPage(params: PageParam) {\n return requestClient.get>(\n '/mes/md-client/page',\n { params },\n );\n}\n\n/** 查询客户详情 */\nexport function getClient(id: number) {\n return requestClient.get(\n `/mes/md-client/get?id=${id}`,\n );\n}\n\n/** 新增客户 */\nexport function createClient(data: MesMdClientApi.Client) {\n return requestClient.post('/mes/md-client/create', data);\n}\n\n/** 修改客户 */\nexport function updateClient(data: MesMdClientApi.Client) {\n return requestClient.put('/mes/md-client/update', data);\n}\n\n/** 删除客户 */\nexport function deleteClient(id: number) {\n return requestClient.delete(`/mes/md-client/delete?id=${id}`);\n}\n\n/** 导出客户 */\nexport function exportClient(params: any) {\n return requestClient.download('/mes/md-client/export-excel', { params });\n}\n\n/** 下载客户导入模板 */\nexport function importClientTemplate() {\n return requestClient.download('/mes/md-client/get-import-template');\n}\n\n/** 导入客户 */\nexport function importClient(file: File, updateSupport: boolean) {\n return requestClient.upload(\n `/mes/md-client/import?updateSupport=${updateSupport}`,\n { file },\n );\n}\n", "after": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace MesMdClientApi {\n /** MES 客户 */\n export interface Client {\n id?: number; // 客户编号\n name?: string; // 客户名称\n nickname?: string; // 客户简称\n englishName?: string; // 客户英文名称\n description?: string; // 客户简介\n logo?: string; // 客户 LOGO 地址\n type?: number; // 客户类型\n address?: string; // 客户地址\n website?: string; // 客户官网地址\n email?: string; // 客户邮箱地址\n telephone?: string; // 客户电话\n contact1Name?: string; // 联系人1\n contact1Telephone?: string; // 联系人1电话\n contact1Email?: string; // 联系人1邮箱\n contact2Name?: string; // 联系人2\n contact2Telephone?: string; // 联系人2电话\n contact2Email?: string; // 联系人2邮箱\n creditCode?: string; // 统一社会信用代码\n status?: number; // 状态\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n\n /** 客户导入结果 */\n export interface ClientImportRespVO {\n createCustomerNames?: string[]; // 新增成功的客户名称\n updateCustomerNames?: string[]; // 更新成功的客户名称\n failureCustomerNames?: Record; // 导入失败的客户名称及原因\n }\n}\n\n/** 查询客户分页 */\nexport function getClientPage(params: PageParam) {\n return requestClient.get>(\n '/mes/md-client/page',\n { params },\n );\n}\n\n/** 查询客户详情 */\nexport function getClient(id: number) {\n return requestClient.get(\n `/mes/md-client/get?id=${id}`,\n );\n}\n\n/** 新增客户 */\nexport function createClient(data: MesMdClientApi.Client) {\n return requestClient.post('/mes/md-client/create', data);\n}\n\n/** 修改客户 */\nexport function updateClient(data: MesMdClientApi.Client) {\n return requestClient.put('/mes/md-client/update', data);\n}\n\n/** 删除客户 */\nexport function deleteClient(id: number) {\n return requestClient.delete(`/mes/md-client/delete?id=${id}`);\n}\n\n/** 导出客户 */\nexport function exportClient(params: any) {\n return requestClient.download('/mes/md-client/export-excel', { params });\n}\n\n/** 下载客户导入模板 */\nexport function importClientTemplate() {\n return requestClient.download('/mes/md-client/get-import-template');\n}\n\n/** 导入客户 */\nexport function importClient(file: File, updateSupport: boolean) {\n return requestClient.upload(\n `/mes/md-client/import?updateSupport=${updateSupport}`,\n { file },\n );\n}\n" }, { "file": "mom-pro2-before\\src\\api\\mes\\pro\\mps\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\r\n\r\nimport { requestClient } from '#/api/request';\r\n\r\nexport namespace MesProMpsApi {\r\n /** MPS 主生产计划 */\r\n export interface Mps {\r\n id?: number; // MPS 编号\r\n code?: string; // MPS 编码\r\n status?: number; // 状态(0=草稿 1=已下发 2=已完成 3=已取消)\r\n saleOrderId?: number; // 销售订单ID\r\n saleOrderNo?: string; // 销售订单号\r\n saleOrderItemId?: number; // 销售订单明细ID\r\n productId?: number; // 产品ID\r\n productCode?: string; // 产品编码\r\n productName?: string; // 产品名称\r\n productSpecification?: string; // 规格型号\r\n unitMeasureName?: string; // 单位\r\n quantity?: number; // 计划生产数量\r\n quantityProduced?: number; // 已生产数量\r\n clientId?: number; // 客户ID\r\n clientCode?: string; // 客户编码\r\n clientName?: string; // 客户名称\r\n requestDate?: number; // 需求日期\r\n issueDate?: number; // 下发日期\r\n finishDate?: number; // 完成日期\r\n workOrderId?: number; // 生产工单ID\r\n workOrderCode?: string; // 生产工单编码\r\n mergeFlag?: number; // 是否合并下发(0-否,1-是)\r\n mergeBatchNo?: string; // 合并批次号\r\n remark?: string; // 备注\r\n createTime?: number; // 创建时间\r\n }\r\n\r\n /** MPS 分页查询参数 */\r\n export interface PageParams extends PageParam {\r\n code?: string;\r\n saleOrderNo?: string;\r\n productId?: number;\r\n clientId?: number;\r\n status?: number;\r\n requestDate?: number[];\r\n }\r\n\r\n /** MPS 创建请求 */\r\n export interface CreateMpsReq {\r\n code?: string;\r\n saleOrderId?: number;\r\n saleOrderNo?: string;\r\n saleOrderItemId?: number;\r\n productId?: number;\r\n quantity?: number;\r\n unitMeasureId?: number;\r\n clientId?: number;\r\n requestDate?: string;\r\n remark?: string;\r\n }\r\n}\r\n\r\n/** 查询 MPS 分页 */\r\nexport function getMpsPage(params: MesProMpsApi.PageParams) {\r\n return requestClient.get>('/mes/pro-mps/page', {\r\n params,\r\n });\r\n}\r\n\r\n/** 查询 MPS 详情 */\r\nexport function getMps(id: number) {\r\n return requestClient.get(`/mes/pro-mps/get?id=${id}`);\r\n}\r\n\r\n/** 创建 MPS */\r\nexport function createMps(data: MesProMpsApi.CreateMpsReq) {\r\n return requestClient.post('/mes/pro-mps/create', data);\r\n}\r\n\r\n/** 更新 MPS */\r\nexport function updateMps(data: MesProMpsApi.CreateMpsReq & { id: number }) {\r\n return requestClient.put('/mes/pro-mps/update', data);\r\n}\r\n\r\n/** 删除 MPS */\r\nexport function deleteMps(id: number) {\r\n return requestClient.delete('/mes/pro-mps/delete', {\r\n params: { id },\r\n });\r\n}\r\n\r\n/** 导出 MPS Excel */\r\nexport function exportMps(params: any) {\r\n return requestClient.download('/mes/pro-mps/export-excel', { params });\r\n}\r\n\r\n/** 下发 MPS */\r\nexport function issueMps(id: number) {\r\n return requestClient.post(`/mes/pro-mps/issue?id=${id}`);\r\n}\r\n\r\n/** 合并下发 MPS */\r\nexport function mergeIssueMps(ids: number[]) {\r\n return requestClient.post('/mes/pro-mps/merge-issue', ids);\r\n}\r\n\r\n/** 取消 MPS */\r\nexport function cancelMps(id: number) {\r\n return requestClient.post(`/mes/pro-mps/cancel?id=${id}`);\r\n}\r\n", "after": "import type { PageParam, PageResult } from '@vben/request';\r\n\r\nimport { requestClient } from '#/api/request';\r\n\r\nexport namespace MesProMpsApi {\r\n /** MPS 主生产计划 */\r\n export interface Mps {\r\n id?: number; // MPS 编号\r\n code?: string; // MPS 编码\r\n status?: number; // 状态(0=草稿 1=已下发 2=已完成 3=已取消)\r\n saleOrderId?: number; // 销售订单ID\r\n saleOrderNo?: string; // 销售订单号\r\n saleOrderItemId?: number; // 销售订单明细ID\r\n productId?: number; // 产品ID\r\n productCode?: string; // 产品编码\r\n productName?: string; // 产品名称\r\n productSpecification?: string; // 规格型号\r\n unitMeasureName?: string; // 单位\r\n quantity?: number; // 计划生产数量\r\n quantityProduced?: number; // 已生产数量\r\n clientId?: number; // 客户ID\r\n clientName?: string; // 客户名称\r\n requestDate?: number; // 需求日期\r\n issueDate?: number; // 下发日期\r\n finishDate?: number; // 完成日期\r\n workOrderId?: number; // 生产工单ID\r\n workOrderCode?: string; // 生产工单编码\r\n mergeFlag?: number; // 是否合并下发(0-否,1-是)\r\n mergeBatchNo?: string; // 合并批次号\r\n remark?: string; // 备注\r\n createTime?: number; // 创建时间\r\n }\r\n\r\n /** MPS 分页查询参数 */\r\n export interface PageParams extends PageParam {\r\n code?: string;\r\n saleOrderNo?: string;\r\n productId?: number;\r\n clientId?: number;\r\n status?: number;\r\n requestDate?: number[];\r\n }\r\n\r\n /** MPS 创建请求 */\r\n export interface CreateMpsReq {\r\n code?: string;\r\n saleOrderId?: number;\r\n saleOrderNo?: string;\r\n saleOrderItemId?: number;\r\n productId?: number;\r\n quantity?: number;\r\n unitMeasureId?: number;\r\n clientId?: number;\r\n requestDate?: string;\r\n remark?: string;\r\n }\r\n}\r\n\r\n/** 查询 MPS 分页 */\r\nexport function getMpsPage(params: MesProMpsApi.PageParams) {\r\n return requestClient.get>('/mes/pro-mps/page', {\r\n params,\r\n });\r\n}\r\n\r\n/** 查询 MPS 详情 */\r\nexport function getMps(id: number) {\r\n return requestClient.get(`/mes/pro-mps/get?id=${id}`);\r\n}\r\n\r\n/** 创建 MPS */\r\nexport function createMps(data: MesProMpsApi.CreateMpsReq) {\r\n return requestClient.post('/mes/pro-mps/create', data);\r\n}\r\n\r\n/** 更新 MPS */\r\nexport function updateMps(data: MesProMpsApi.CreateMpsReq & { id: number }) {\r\n return requestClient.put('/mes/pro-mps/update', data);\r\n}\r\n\r\n/** 删除 MPS */\r\nexport function deleteMps(id: number) {\r\n return requestClient.delete('/mes/pro-mps/delete', {\r\n params: { id },\r\n });\r\n}\r\n\r\n/** 导出 MPS Excel */\r\nexport function exportMps(params: any) {\r\n return requestClient.download('/mes/pro-mps/export-excel', { params });\r\n}\r\n\r\n/** 下发 MPS */\r\nexport function issueMps(id: number) {\r\n return requestClient.post(`/mes/pro-mps/issue?id=${id}`);\r\n}\r\n\r\n/** 合并下发 MPS */\r\nexport function mergeIssueMps(ids: number[]) {\r\n return requestClient.post('/mes/pro-mps/merge-issue', ids);\r\n}\r\n\r\n/** 取消 MPS */\r\nexport function cancelMps(id: number) {\r\n return requestClient.post(`/mes/pro-mps/cancel?id=${id}`);\r\n}\r\n" }, { "file": "mom-pro2-before\\src\\api\\mes\\pro\\workorder\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\r\n\r\nimport { requestClient } from '#/api/request';\r\n\r\nexport namespace MesProWorkOrderApi {\r\n /** MES 生产订单 */\r\n export interface WorkOrder {\r\n id?: number; // 编号\r\n code?: string; // 订单编码\r\n name?: string; // 订单名称\r\n type?: number; // 订单类型\r\n orderSourceType?: number; // 来源类型\r\n orderSourceCode?: string; // 来源单据编号\r\n productId?: number; // 产品编号\r\n productName?: string; // 产品名称\r\n productCode?: string; // 产品编码\r\n itemCode?: string; // 产品编码(物料编码)\r\n productSpecification?: string; // 规格型号\r\n unitMeasureName?: string; // 单位名称\r\n quantity?: number; // 生产数量\r\n quantityProduced?: number; // 已生产数量\r\n quantityChanged?: number; // 调整数量\r\n quantityScheduled?: number; // 已排产数量\r\n clientId?: number; // 客户编号\r\n clientCode?: string; // 客户编码\r\n clientName?: string; // 客户名称\r\n vendorId?: number; // 供应商编号\r\n vendorName?: string; // 供应商名称\r\n vendorCode?: string; // 供应商编码\r\n batchCode?: string; // 批次号\r\n requestDate?: number; // 需求日期\r\n parentId?: number; // 父订单编号\r\n parentCode?: string; // 父订单编码\r\n finishDate?: number; // 完成时间\r\n cancelDate?: number; // 取消时间\r\n status?: number; // 订单状态\r\n scheduleStatus?: number; // 排产状态\r\n productionStatus?: number; // 生产状态\r\n processProgressList?: ProcessProgress[]; // 工序生产进度\r\n completionProgress?: number; // 完成进度\r\n remark?: string; // 备注\r\n createTime?: number; // 创建时间\r\n feedbackApprove?: boolean; // 是否报工审批\r\n processDefinitionKey?: string; // 报工审批流程定义 Key\r\n feedbackRole?: string; // 报工角色\r\n }\r\n\r\n /** MES 生产订单分页查询参数 */\r\n export interface PageParams extends PageParam {\r\n code?: string;\r\n name?: string;\r\n orderSourceCode?: string;\r\n productId?: number;\r\n clientId?: number;\r\n status?: number;\r\n type?: number;\r\n requestDate?: number[];\r\n }\r\n}\r\n\r\n/** 查询生产订单分页 */\r\nexport function getWorkOrderPage(params: MesProWorkOrderApi.PageParams) {\r\n return requestClient.get>(\r\n '/mes/pro/work-order/page',\r\n { params },\r\n );\r\n}\r\n\r\n/** 获得生产工单调度状态分页 */\r\nexport function getWorkOrderSchedulePage(params: MesProWorkOrderApi.PageParams) {\r\n return requestClient.get>(\r\n '/mes/pro/work-order/schedule-page',\r\n { params },\r\n );\r\n}\r\n\r\n/** 查询生产订单详情 */\r\nexport function getWorkOrder(id: number) {\r\n return requestClient.get(\r\n `/mes/pro/work-order/get?id=${id}`,\r\n );\r\n}\r\n\r\n/** 新增生产订单 */\r\nexport function createWorkOrder(data: MesProWorkOrderApi.WorkOrder) {\r\n return requestClient.post('/mes/pro/work-order/create', data);\r\n}\r\n\r\n/** 修改生产订单 */\r\nexport function updateWorkOrder(data: MesProWorkOrderApi.WorkOrder) {\r\n return requestClient.put('/mes/pro/work-order/update', data);\r\n}\r\n\r\n/** 删除生产订单 */\r\nexport function deleteWorkOrder(id: number) {\r\n return requestClient.delete(`/mes/pro/work-order/delete?id=${id}`);\r\n}\r\n\r\n/** 导出生产订单 */\r\nexport function exportWorkOrder(params: any) {\r\n return requestClient.download('/mes/pro/work-order/export-excel', { params });\r\n}\r\n\r\n/** 完成订单 */\r\nexport function finishWorkOrder(id: number) {\r\n return requestClient.put(`/mes/pro/work-order/finish?id=${id}`);\r\n}\r\n\r\n/** 取消订单 */\r\nexport function cancelWorkOrder(id: number) {\r\n return requestClient.put(`/mes/pro/work-order/cancel?id=${id}`);\r\n}\r\n\r\n/** 确认订单 */\r\nexport function confirmWorkOrder(id: number) {\r\n return requestClient.put(`/mes/pro/work-order/confirm?id=${id}`);\r\n}\r\n\r\n/** 工单进度详情 */\r\nexport interface WorkOrderProgress {\r\n workOrderId?: number;\r\n workOrderCode?: string;\r\n quantity?: number;\r\n quantityScheduled?: number;\r\n quantityProduced?: number;\r\n progressPercent?: number;\r\n processList?: ProcessProgress[];\r\n}\r\n\r\nexport interface ProcessProgress {\r\n processId?: number;\r\n processCode?: string;\r\n processName?: string;\r\n keyFlag?: boolean;\r\n plannedQuantity?: number;\r\n producedQuantity?: number;\r\n progressPercent?: number;\r\n status?: number;\r\n taskList?: TaskInfo[];\r\n}\r\n\r\nexport interface TaskInfo {\r\n taskId?: number;\r\n taskCode?: string;\r\n workstationName?: string;\r\n quantity?: number;\r\n producedQuantity?: number;\r\n progressPercent?: number;\r\n status?: number;\r\n}\r\n\r\n/** 获取工单进度详情 */\r\nexport function getWorkOrderProgress(id: number) {\r\n return requestClient.get(\r\n `/mes/pro/work-order/progress/${id}`,\r\n );\r\n}\r\n\r\n/** 检查并自动完成工单 */\r\nexport function checkAndAutoFinishWorkOrder(id: number) {\r\n return requestClient.post(\r\n `/mes/pro/work-order/check-auto-finish/${id}`,\r\n );\r\n}\r\n\r\n/** 获得生产订单审批流程列表 */\r\nexport function getWorkOrderApproveProcessList() {\r\n return requestClient.get>(\r\n '/mes/pro/work-order/approve-process-list',\r\n );\r\n}\r\n", "after": "import type { PageParam, PageResult } from '@vben/request';\r\n\r\nimport { requestClient } from '#/api/request';\r\n\r\nexport namespace MesProWorkOrderApi {\r\n /** MES 生产订单 */\r\n export interface WorkOrder {\r\n id?: number; // 编号\r\n code?: string; // 订单编码\r\n name?: string; // 订单名称\r\n type?: number; // 订单类型\r\n orderSourceType?: number; // 来源类型\r\n orderSourceCode?: string; // 来源单据编号\r\n productId?: number; // 产品编号\r\n productName?: string; // 产品名称\r\n productCode?: string; // 产品编码\r\n itemCode?: string; // 产品编码(物料编码)\r\n productSpecification?: string; // 规格型号\r\n unitMeasureName?: string; // 单位名称\r\n quantity?: number; // 生产数量\r\n quantityProduced?: number; // 已生产数量\r\n quantityChanged?: number; // 调整数量\r\n quantityScheduled?: number; // 已排产数量\r\n clientId?: number; // 客户编号\r\n clientName?: string; // 客户名称\r\n vendorId?: number; // 供应商编号\r\n vendorName?: string; // 供应商名称\r\n vendorCode?: string; // 供应商编码\r\n batchCode?: string; // 批次号\r\n requestDate?: number; // 需求日期\r\n parentId?: number; // 父订单编号\r\n parentCode?: string; // 父订单编码\r\n finishDate?: number; // 完成时间\r\n cancelDate?: number; // 取消时间\r\n status?: number; // 订单状态\r\n scheduleStatus?: number; // 排产状态\r\n productionStatus?: number; // 生产状态\r\n processProgressList?: ProcessProgress[]; // 工序生产进度\r\n completionProgress?: number; // 完成进度\r\n remark?: string; // 备注\r\n createTime?: number; // 创建时间\r\n feedbackApprove?: boolean; // 是否报工审批\r\n processDefinitionKey?: string; // 报工审批流程定义 Key\r\n feedbackRole?: string; // 报工角色\r\n }\r\n\r\n /** MES 生产订单分页查询参数 */\r\n export interface PageParams extends PageParam {\r\n code?: string;\r\n name?: string;\r\n orderSourceCode?: string;\r\n productId?: number;\r\n clientId?: number;\r\n status?: number;\r\n type?: number;\r\n requestDate?: number[];\r\n }\r\n}\r\n\r\n/** 查询生产订单分页 */\r\nexport function getWorkOrderPage(params: MesProWorkOrderApi.PageParams) {\r\n return requestClient.get>(\r\n '/mes/pro/work-order/page',\r\n { params },\r\n );\r\n}\r\n\r\n/** 获得生产工单调度状态分页 */\r\nexport function getWorkOrderSchedulePage(params: MesProWorkOrderApi.PageParams) {\r\n return requestClient.get>(\r\n '/mes/pro/work-order/schedule-page',\r\n { params },\r\n );\r\n}\r\n\r\n/** 查询生产订单详情 */\r\nexport function getWorkOrder(id: number) {\r\n return requestClient.get(\r\n `/mes/pro/work-order/get?id=${id}`,\r\n );\r\n}\r\n\r\n/** 新增生产订单 */\r\nexport function createWorkOrder(data: MesProWorkOrderApi.WorkOrder) {\r\n return requestClient.post('/mes/pro/work-order/create', data);\r\n}\r\n\r\n/** 修改生产订单 */\r\nexport function updateWorkOrder(data: MesProWorkOrderApi.WorkOrder) {\r\n return requestClient.put('/mes/pro/work-order/update', data);\r\n}\r\n\r\n/** 删除生产订单 */\r\nexport function deleteWorkOrder(id: number) {\r\n return requestClient.delete(`/mes/pro/work-order/delete?id=${id}`);\r\n}\r\n\r\n/** 导出生产订单 */\r\nexport function exportWorkOrder(params: any) {\r\n return requestClient.download('/mes/pro/work-order/export-excel', { params });\r\n}\r\n\r\n/** 完成订单 */\r\nexport function finishWorkOrder(id: number) {\r\n return requestClient.put(`/mes/pro/work-order/finish?id=${id}`);\r\n}\r\n\r\n/** 取消订单 */\r\nexport function cancelWorkOrder(id: number) {\r\n return requestClient.put(`/mes/pro/work-order/cancel?id=${id}`);\r\n}\r\n\r\n/** 确认订单 */\r\nexport function confirmWorkOrder(id: number) {\r\n return requestClient.put(`/mes/pro/work-order/confirm?id=${id}`);\r\n}\r\n\r\n/** 工单进度详情 */\r\nexport interface WorkOrderProgress {\r\n workOrderId?: number;\r\n workOrderCode?: string;\r\n quantity?: number;\r\n quantityScheduled?: number;\r\n quantityProduced?: number;\r\n progressPercent?: number;\r\n processList?: ProcessProgress[];\r\n}\r\n\r\nexport interface ProcessProgress {\r\n processId?: number;\r\n processCode?: string;\r\n processName?: string;\r\n keyFlag?: boolean;\r\n plannedQuantity?: number;\r\n producedQuantity?: number;\r\n progressPercent?: number;\r\n status?: number;\r\n taskList?: TaskInfo[];\r\n}\r\n\r\nexport interface TaskInfo {\r\n taskId?: number;\r\n taskCode?: string;\r\n workstationName?: string;\r\n quantity?: number;\r\n producedQuantity?: number;\r\n progressPercent?: number;\r\n status?: number;\r\n}\r\n\r\n/** 获取工单进度详情 */\r\nexport function getWorkOrderProgress(id: number) {\r\n return requestClient.get(\r\n `/mes/pro/work-order/progress/${id}`,\r\n );\r\n}\r\n\r\n/** 检查并自动完成工单 */\r\nexport function checkAndAutoFinishWorkOrder(id: number) {\r\n return requestClient.post(\r\n `/mes/pro/work-order/check-auto-finish/${id}`,\r\n );\r\n}\r\n\r\n/** 获得生产订单审批流程列表 */\r\nexport function getWorkOrderApproveProcessList() {\r\n return requestClient.get>(\r\n '/mes/pro/work-order/approve-process-list',\r\n );\r\n}\r\n" }, { "file": "mom-pro2-before\\src\\api\\mes\\wm\\batch\\index.ts", "removed": 2, "before": "import type { PageParam, PageResult } from '@vben/request';\r\n\r\nimport { requestClient } from '#/api/request';\r\n\r\nexport namespace MesWmBatchApi {\r\n /** MES 批次 */\r\n export interface Batch {\r\n id?: number; // 批次 ID\r\n code?: string; // 批次编码\r\n itemId?: number; // 物料 ID\r\n itemCode?: string; // 物料编码\r\n itemName?: string; // 物料名称\r\n itemSpecification?: string; // 规格型号\r\n unitName?: string; // 单位名称\r\n produceDate?: Date; // 生产日期\r\n expireDate?: Date; // 有效期\r\n receiptDate?: Date; // 入库日期\r\n vendorId?: number; // 供应商 ID\r\n vendorCode?: string; // 供应商编码\r\n vendorName?: string; // 供应商名称\r\n clientId?: number; // 客户 ID\r\n clientCode?: string; // 客户编码\r\n clientName?: string; // 客户名称\r\n purchaseOrderCode?: string; // 采购订单编号\r\n salesOrderCode?: string; // 销售订单编号\r\n workOrderId?: number; // 生产订单 ID\r\n workOrderCode?: string; // 生产订单编号\r\n taskId?: number; // 生产任务 ID\r\n taskCode?: string; // 生产任务编号\r\n workstationId?: number; // 工作站 ID\r\n workstationCode?: string; // 工作站编码\r\n toolId?: number; // 工具 ID\r\n toolCode?: string; // 工具编号\r\n moldId?: number; // 模具 ID\r\n lotNumber?: string; // 生产批号\r\n qualityStatus?: number; // 质量状态\r\n remark?: string; // 备注\r\n }\r\n\r\n /** MES 批次分页查询参数 */\r\n export interface PageParams extends PageParam {\r\n code?: string; // 批次号\r\n itemId?: number; // 物料编号\r\n vendorId?: number; // 供应商编号\r\n clientId?: number; // 客户编号\r\n workOrderId?: number; // 订单编号\r\n taskId?: number; // 生产任务编号\r\n workstationId?: number; // 工作站编号\r\n toolId?: number; // 工具编号\r\n moldId?: number; // 模具编号\r\n salesOrderCode?: string; // 销售订单号\r\n purchaseOrderCode?: string; // 采购订单号\r\n lotNumber?: string; // 批号\r\n qualityStatus?: number; // 质量状态\r\n produceDate?: string[]; // 生产日期\r\n expireDate?: string[]; // 过期日期\r\n receiptDate?: string[]; // 入库日期\r\n }\r\n\r\n /** MES 批次采购来源(采购入库单 + IQC) */\r\n export interface PurchaseSource {\r\n receiptCode?: string; // 采购入库单号\r\n receiptDate?: Date; // 入库日期\r\n purchaseOrderCode?: string; // 采购订单编号\r\n vendorId?: number; // 供应商 ID\r\n vendorCode?: string; // 供应商编码\r\n vendorName?: string; // 供应商名称\r\n iqcCode?: string; // IQC 检验单号\r\n checkResult?: number; // IQC 检验结论(字典 mes_qc_check_result)\r\n itemId?: number; // 物料 ID\r\n itemCode?: string; // 物料编码\r\n itemName?: string; // 物料名称\r\n batchCode?: string; // 批次号\r\n receivedQuantity?: number; // 入库数量\r\n }\r\n\r\n /** MES 批次销售去向(销售出库单 + OQC) */\r\n export interface SalesTarget {\r\n salesCode?: string; // 销售出库单号\r\n salesDate?: Date; // 出库日期\r\n salesOrderCode?: string; // 销售订单编号\r\n clientId?: number; // 客户 ID\r\n clientCode?: string; // 客户编码\r\n clientName?: string; // 客户名称\r\n oqcCode?: string; // OQC 检验单号\r\n checkResult?: number; // OQC 检验结论(字典 mes_qc_check_result)\r\n itemId?: number; // 物料 ID\r\n itemCode?: string; // 物料编码\r\n itemName?: string; // 物料名称\r\n batchCode?: string; // 批次号\r\n quantity?: number; // 出库数量\r\n qualityStatus?: number; // 质量状态(字典 mes_wm_quality_status)\r\n }\r\n\r\n /** MES 批次工序流转(产出/投入事件) */\r\n export interface ProcessTrace {\r\n eventType?: 'OUT' | 'IN'; // 事件类型:OUT-产出 / IN-投入\r\n workOrderId?: number; // 生产工单 ID\r\n workOrderCode?: string; // 生产工单编号\r\n processId?: number; // 工序 ID\r\n processCode?: string; // 工序编码\r\n processName?: string; // 工序名称\r\n batchCode?: string; // 批次号\r\n quantity?: number; // 数量\r\n qualityStatus?: number; // 质量状态(字典 mes_wm_quality_status),仅产出侧有值\r\n eventTime?: Date; // 事件时间\r\n processSort?: number; // 工序序号\r\n }\r\n}\r\n\r\n/** 查询批次详情 */\r\nexport function getBatch(id: number) {\r\n return requestClient.get(`/mes/wm/batch/get?id=${id}`);\r\n}\r\n\r\n/** 查询批次分页 */\r\nexport function getBatchPage(params: MesWmBatchApi.PageParams) {\r\n return requestClient.get>(\r\n '/mes/wm/batch/page',\r\n { params },\r\n );\r\n}\r\n\r\n/** 批次向前追溯 */\r\nexport function getForwardBatchList(code: string) {\r\n return requestClient.get(\r\n '/mes/wm/batch/forward-list',\r\n {\r\n params: { code },\r\n },\r\n );\r\n}\r\n\r\n/** 批次向后追溯 */\r\nexport function getBackwardBatchList(code: string) {\r\n return requestClient.get(\r\n '/mes/wm/batch/backward-list',\r\n { params: { code } },\r\n );\r\n}\r\n\r\n/** 批次采购来源(采购入库单 + IQC) */\r\nexport function getPurchaseSourceList(code: string) {\r\n return requestClient.get(\r\n '/mes/wm/batch/purchase-sources',\r\n { params: { code } },\r\n );\r\n}\r\n\r\n/** 批次销售去向(销售出库单 + OQC) */\r\nexport function getSalesTargetList(code: string) {\r\n return requestClient.get(\r\n '/mes/wm/batch/sales-targets',\r\n { params: { code } },\r\n );\r\n}\r\n\r\n/** 批次工序流转(产出/投入事件) */\r\nexport function getProcessTraceList(code: string) {\r\n return requestClient.get(\r\n '/mes/wm/batch/process-trace',\r\n { params: { code } },\r\n );\r\n}\r\n\r\n/** 根据 SN 码反查批次 */\r\nexport function getBatchBySn(sn: string) {\r\n return requestClient.get('/mes/wm/batch/get-by-sn', {\r\n params: { sn },\r\n });\r\n}\r\n", "after": "import type { PageParam, PageResult } from '@vben/request';\r\n\r\nimport { requestClient } from '#/api/request';\r\n\r\nexport namespace MesWmBatchApi {\r\n /** MES 批次 */\r\n export interface Batch {\r\n id?: number; // 批次 ID\r\n code?: string; // 批次编码\r\n itemId?: number; // 物料 ID\r\n itemCode?: string; // 物料编码\r\n itemName?: string; // 物料名称\r\n itemSpecification?: string; // 规格型号\r\n unitName?: string; // 单位名称\r\n produceDate?: Date; // 生产日期\r\n expireDate?: Date; // 有效期\r\n receiptDate?: Date; // 入库日期\r\n vendorId?: number; // 供应商 ID\r\n vendorCode?: string; // 供应商编码\r\n vendorName?: string; // 供应商名称\r\n clientId?: number; // 客户 ID\r\n clientName?: string; // 客户名称\r\n purchaseOrderCode?: string; // 采购订单编号\r\n salesOrderCode?: string; // 销售订单编号\r\n workOrderId?: number; // 生产订单 ID\r\n workOrderCode?: string; // 生产订单编号\r\n taskId?: number; // 生产任务 ID\r\n taskCode?: string; // 生产任务编号\r\n workstationId?: number; // 工作站 ID\r\n workstationCode?: string; // 工作站编码\r\n toolId?: number; // 工具 ID\r\n toolCode?: string; // 工具编号\r\n moldId?: number; // 模具 ID\r\n lotNumber?: string; // 生产批号\r\n qualityStatus?: number; // 质量状态\r\n remark?: string; // 备注\r\n }\r\n\r\n /** MES 批次分页查询参数 */\r\n export interface PageParams extends PageParam {\r\n code?: string; // 批次号\r\n itemId?: number; // 物料编号\r\n vendorId?: number; // 供应商编号\r\n clientId?: number; // 客户编号\r\n workOrderId?: number; // 订单编号\r\n taskId?: number; // 生产任务编号\r\n workstationId?: number; // 工作站编号\r\n toolId?: number; // 工具编号\r\n moldId?: number; // 模具编号\r\n salesOrderCode?: string; // 销售订单号\r\n purchaseOrderCode?: string; // 采购订单号\r\n lotNumber?: string; // 批号\r\n qualityStatus?: number; // 质量状态\r\n produceDate?: string[]; // 生产日期\r\n expireDate?: string[]; // 过期日期\r\n receiptDate?: string[]; // 入库日期\r\n }\r\n\r\n /** MES 批次采购来源(采购入库单 + IQC) */\r\n export interface PurchaseSource {\r\n receiptCode?: string; // 采购入库单号\r\n receiptDate?: Date; // 入库日期\r\n purchaseOrderCode?: string; // 采购订单编号\r\n vendorId?: number; // 供应商 ID\r\n vendorCode?: string; // 供应商编码\r\n vendorName?: string; // 供应商名称\r\n iqcCode?: string; // IQC 检验单号\r\n checkResult?: number; // IQC 检验结论(字典 mes_qc_check_result)\r\n itemId?: number; // 物料 ID\r\n itemCode?: string; // 物料编码\r\n itemName?: string; // 物料名称\r\n batchCode?: string; // 批次号\r\n receivedQuantity?: number; // 入库数量\r\n }\r\n\r\n /** MES 批次销售去向(销售出库单 + OQC) */\r\n export interface SalesTarget {\r\n salesCode?: string; // 销售出库单号\r\n salesDate?: Date; // 出库日期\r\n salesOrderCode?: string; // 销售订单编号\r\n clientId?: number; // 客户 ID\r\n clientName?: string; // 客户名称\r\n oqcCode?: string; // OQC 检验单号\r\n checkResult?: number; // OQC 检验结论(字典 mes_qc_check_result)\r\n itemId?: number; // 物料 ID\r\n itemCode?: string; // 物料编码\r\n itemName?: string; // 物料名称\r\n batchCode?: string; // 批次号\r\n quantity?: number; // 出库数量\r\n qualityStatus?: number; // 质量状态(字典 mes_wm_quality_status)\r\n }\r\n\r\n /** MES 批次工序流转(产出/投入事件) */\r\n export interface ProcessTrace {\r\n eventType?: 'OUT' | 'IN'; // 事件类型:OUT-产出 / IN-投入\r\n workOrderId?: number; // 生产工单 ID\r\n workOrderCode?: string; // 生产工单编号\r\n processId?: number; // 工序 ID\r\n processCode?: string; // 工序编码\r\n processName?: string; // 工序名称\r\n batchCode?: string; // 批次号\r\n quantity?: number; // 数量\r\n qualityStatus?: number; // 质量状态(字典 mes_wm_quality_status),仅产出侧有值\r\n eventTime?: Date; // 事件时间\r\n processSort?: number; // 工序序号\r\n }\r\n}\r\n\r\n/** 查询批次详情 */\r\nexport function getBatch(id: number) {\r\n return requestClient.get(`/mes/wm/batch/get?id=${id}`);\r\n}\r\n\r\n/** 查询批次分页 */\r\nexport function getBatchPage(params: MesWmBatchApi.PageParams) {\r\n return requestClient.get>(\r\n '/mes/wm/batch/page',\r\n { params },\r\n );\r\n}\r\n\r\n/** 批次向前追溯 */\r\nexport function getForwardBatchList(code: string) {\r\n return requestClient.get(\r\n '/mes/wm/batch/forward-list',\r\n {\r\n params: { code },\r\n },\r\n );\r\n}\r\n\r\n/** 批次向后追溯 */\r\nexport function getBackwardBatchList(code: string) {\r\n return requestClient.get(\r\n '/mes/wm/batch/backward-list',\r\n { params: { code } },\r\n );\r\n}\r\n\r\n/** 批次采购来源(采购入库单 + IQC) */\r\nexport function getPurchaseSourceList(code: string) {\r\n return requestClient.get(\r\n '/mes/wm/batch/purchase-sources',\r\n { params: { code } },\r\n );\r\n}\r\n\r\n/** 批次销售去向(销售出库单 + OQC) */\r\nexport function getSalesTargetList(code: string) {\r\n return requestClient.get(\r\n '/mes/wm/batch/sales-targets',\r\n { params: { code } },\r\n );\r\n}\r\n\r\n/** 批次工序流转(产出/投入事件) */\r\nexport function getProcessTraceList(code: string) {\r\n return requestClient.get(\r\n '/mes/wm/batch/process-trace',\r\n { params: { code } },\r\n );\r\n}\r\n\r\n/** 根据 SN 码反查批次 */\r\nexport function getBatchBySn(sn: string) {\r\n return requestClient.get('/mes/wm/batch/get-by-sn', {\r\n params: { sn },\r\n });\r\n}\r\n" }, { "file": "mom-pro2-before\\src\\api\\mes\\wm\\packages\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace MesWmPackageApi {\n /** 装箱单 */\n export interface Package {\n id?: number; // 装箱单编号\n code?: string; // 装箱单编码\n parentId?: number; // 父箱编号\n packageDate?: number; // 装箱日期\n salesOrderCode?: string; // 销售订单编号\n invoiceCode?: string; // 发票编号\n clientId?: number; // 客户编号\n clientCode?: string; // 客户编码\n clientName?: string; // 客户名称\n clientNickname?: string; // 客户简称\n length?: number; // 箱长度\n width?: number; // 箱宽度\n height?: number; // 箱高度\n sizeUnitId?: number; // 尺寸单位编号\n sizeUnitName?: string; // 尺寸单位名称\n netWeight?: number; // 净重\n grossWeight?: number; // 毛重\n weightUnitId?: number; // 重量单位编号\n weightUnitName?: string; // 重量单位名称\n inspectorUserId?: number; // 检查员用户编号\n inspectorName?: string; // 检查员名称\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: string; // 创建时间\n children?: Package[]; // 子箱列表\n }\n}\n\n/** 查询装箱单分页 */\nexport function getPackagePage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/package/page',\n { params },\n );\n}\n\n/** 查询装箱单详情 */\nexport function getPackage(id: number) {\n return requestClient.get(\n `/mes/wm/package/get?id=${id}`,\n );\n}\n\n/** 新增装箱单 */\nexport function createPackage(data: MesWmPackageApi.Package) {\n return requestClient.post('/mes/wm/package/create', data);\n}\n\n/** 修改装箱单 */\nexport function updatePackage(data: MesWmPackageApi.Package) {\n return requestClient.put('/mes/wm/package/update', data);\n}\n\n/** 删除装箱单 */\nexport function deletePackage(id: number) {\n return requestClient.delete(`/mes/wm/package/delete?id=${id}`);\n}\n\n/** 完成装箱单 */\nexport function finishPackage(id: number) {\n return requestClient.put(`/mes/wm/package/finish?id=${id}`);\n}\n\n/** 添加子箱 */\nexport function addChildPackage(parentId: number, childId: number) {\n return requestClient.put('/mes/wm/package/add-child-package', null, {\n params: { childId, parentId },\n });\n}\n\n/** 移除子箱 */\nexport function removeChildPackage(childId: number) {\n return requestClient.put(\n `/mes/wm/package/remove-child-package?childId=${childId}`,\n );\n}\n", "after": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace MesWmPackageApi {\n /** 装箱单 */\n export interface Package {\n id?: number; // 装箱单编号\n code?: string; // 装箱单编码\n parentId?: number; // 父箱编号\n packageDate?: number; // 装箱日期\n salesOrderCode?: string; // 销售订单编号\n invoiceCode?: string; // 发票编号\n clientId?: number; // 客户编号\n clientName?: string; // 客户名称\n clientNickname?: string; // 客户简称\n length?: number; // 箱长度\n width?: number; // 箱宽度\n height?: number; // 箱高度\n sizeUnitId?: number; // 尺寸单位编号\n sizeUnitName?: string; // 尺寸单位名称\n netWeight?: number; // 净重\n grossWeight?: number; // 毛重\n weightUnitId?: number; // 重量单位编号\n weightUnitName?: string; // 重量单位名称\n inspectorUserId?: number; // 检查员用户编号\n inspectorName?: string; // 检查员名称\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: string; // 创建时间\n children?: Package[]; // 子箱列表\n }\n}\n\n/** 查询装箱单分页 */\nexport function getPackagePage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/package/page',\n { params },\n );\n}\n\n/** 查询装箱单详情 */\nexport function getPackage(id: number) {\n return requestClient.get(\n `/mes/wm/package/get?id=${id}`,\n );\n}\n\n/** 新增装箱单 */\nexport function createPackage(data: MesWmPackageApi.Package) {\n return requestClient.post('/mes/wm/package/create', data);\n}\n\n/** 修改装箱单 */\nexport function updatePackage(data: MesWmPackageApi.Package) {\n return requestClient.put('/mes/wm/package/update', data);\n}\n\n/** 删除装箱单 */\nexport function deletePackage(id: number) {\n return requestClient.delete(`/mes/wm/package/delete?id=${id}`);\n}\n\n/** 完成装箱单 */\nexport function finishPackage(id: number) {\n return requestClient.put(`/mes/wm/package/finish?id=${id}`);\n}\n\n/** 添加子箱 */\nexport function addChildPackage(parentId: number, childId: number) {\n return requestClient.put('/mes/wm/package/add-child-package', null, {\n params: { childId, parentId },\n });\n}\n\n/** 移除子箱 */\nexport function removeChildPackage(childId: number) {\n return requestClient.put(\n `/mes/wm/package/remove-child-package?childId=${childId}`,\n );\n}\n" }, { "file": "mom-pro2-before\\src\\api\\mes\\wm\\productissue\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace MesWmProductIssueApi {\n /** MES 领料出库单 */\n export interface ProductIssue {\n id?: number; // 领料单编号\n code?: string; // 领料单编号\n name?: string; // 领料单名称\n taskId?: number; // 生产任务 ID\n taskCode?: string; // 生产任务编码\n taskName?: string; // 生产任务名称\n workstationId?: number; // 工作站编号\n workstationCode?: string; // 工作站编码\n workstationName?: string; // 工作站名称\n workOrderId?: number; // 生产订单编号\n workOrderCode?: string; // 生产订单编码\n clientCode?: string; // 客户编码\n clientName?: string; // 客户名称\n requiredTime?: number; // 需求时间\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n}\n\n/** 查询领料出库单分页 */\nexport function getProductIssuePage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/product-issue/page',\n { params },\n );\n}\n\n/** 查询领料出库单详情 */\nexport function getProductIssue(id: number) {\n return requestClient.get(\n `/mes/wm/product-issue/get?id=${id}`,\n );\n}\n\n/** 新增领料出库单 */\nexport function createProductIssue(data: MesWmProductIssueApi.ProductIssue) {\n return requestClient.post('/mes/wm/product-issue/create', data);\n}\n\n/** 修改领料出库单 */\nexport function updateProductIssue(data: MesWmProductIssueApi.ProductIssue) {\n return requestClient.put('/mes/wm/product-issue/update', data);\n}\n\n/** 删除领料出库单 */\nexport function deleteProductIssue(id: number) {\n return requestClient.delete(`/mes/wm/product-issue/delete?id=${id}`);\n}\n\n/** 提交领料出库单 */\nexport function submitProductIssue(id: number) {\n return requestClient.put(`/mes/wm/product-issue/submit?id=${id}`);\n}\n\n/** 执行拣货 */\nexport function stockProductIssue(id: number) {\n return requestClient.put(`/mes/wm/product-issue/stock?id=${id}`);\n}\n\n/** 完成领料出库单 */\nexport function finishProductIssue(id: number) {\n return requestClient.put(`/mes/wm/product-issue/finish?id=${id}`);\n}\n\n/** 取消领料出库单 */\nexport function cancelProductIssue(id: number) {\n return requestClient.put(`/mes/wm/product-issue/cancel?id=${id}`);\n}\n\n/** 校验领料出库单拣货数量是否与领料数量一致 */\nexport function checkProductIssueQuantity(id: number) {\n return requestClient.get(\n `/mes/wm/product-issue/check-quantity?id=${id}`,\n );\n}\n\n/** 导出领料出库单 */\nexport function exportProductIssue(params: any) {\n return requestClient.download('/mes/wm/product-issue/export-excel', {\n params,\n });\n}\n", "after": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace MesWmProductIssueApi {\n /** MES 领料出库单 */\n export interface ProductIssue {\n id?: number; // 领料单编号\n code?: string; // 领料单编号\n name?: string; // 领料单名称\n taskId?: number; // 生产任务 ID\n taskCode?: string; // 生产任务编码\n taskName?: string; // 生产任务名称\n workstationId?: number; // 工作站编号\n workstationCode?: string; // 工作站编码\n workstationName?: string; // 工作站名称\n workOrderId?: number; // 生产订单编号\n workOrderCode?: string; // 生产订单编码\n clientName?: string; // 客户名称\n requiredTime?: number; // 需求时间\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n}\n\n/** 查询领料出库单分页 */\nexport function getProductIssuePage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/product-issue/page',\n { params },\n );\n}\n\n/** 查询领料出库单详情 */\nexport function getProductIssue(id: number) {\n return requestClient.get(\n `/mes/wm/product-issue/get?id=${id}`,\n );\n}\n\n/** 新增领料出库单 */\nexport function createProductIssue(data: MesWmProductIssueApi.ProductIssue) {\n return requestClient.post('/mes/wm/product-issue/create', data);\n}\n\n/** 修改领料出库单 */\nexport function updateProductIssue(data: MesWmProductIssueApi.ProductIssue) {\n return requestClient.put('/mes/wm/product-issue/update', data);\n}\n\n/** 删除领料出库单 */\nexport function deleteProductIssue(id: number) {\n return requestClient.delete(`/mes/wm/product-issue/delete?id=${id}`);\n}\n\n/** 提交领料出库单 */\nexport function submitProductIssue(id: number) {\n return requestClient.put(`/mes/wm/product-issue/submit?id=${id}`);\n}\n\n/** 执行拣货 */\nexport function stockProductIssue(id: number) {\n return requestClient.put(`/mes/wm/product-issue/stock?id=${id}`);\n}\n\n/** 完成领料出库单 */\nexport function finishProductIssue(id: number) {\n return requestClient.put(`/mes/wm/product-issue/finish?id=${id}`);\n}\n\n/** 取消领料出库单 */\nexport function cancelProductIssue(id: number) {\n return requestClient.put(`/mes/wm/product-issue/cancel?id=${id}`);\n}\n\n/** 校验领料出库单拣货数量是否与领料数量一致 */\nexport function checkProductIssueQuantity(id: number) {\n return requestClient.get(\n `/mes/wm/product-issue/check-quantity?id=${id}`,\n );\n}\n\n/** 导出领料出库单 */\nexport function exportProductIssue(params: any) {\n return requestClient.download('/mes/wm/product-issue/export-excel', {\n params,\n });\n}\n" }, { "file": "mom-pro2-before\\src\\api\\mes\\wm\\productsales\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\r\n\r\nimport { requestClient } from '#/api/request';\r\n\r\nexport namespace MesWmProductSalesApi {\r\n /** MES 销售出库单 */\r\n export interface ProductSales {\r\n id?: number; // 出库单编号\r\n code?: string; // 出库单编号\r\n name?: string; // 出库单名称\r\n noticeId?: number; // 发货通知单编号\r\n noticeCode?: string; // 发货通知单编码\r\n clientId?: number; // 客户编号\r\n clientCode?: string; // 客户编码\r\n clientName?: string; // 客户名称\r\n salesOrderCode?: string; // 销售订单编号\r\n saleOrderId?: number; // 销售订单ID\r\n salesDate?: number; // 出库日期\r\n contactName?: string; // 收货人\r\n contactTelephone?: string; // 联系方式\r\n contactAddress?: string; // 收货地址\r\n carrier?: string; // 承运商\r\n shippingNumber?: string; // 运输单号\r\n status?: number; // 单据状态\r\n remark?: string; // 备注\r\n createTime?: Date; // 创建时间\r\n }\r\n}\r\n\r\n/** 查询销售出库单分页 */\r\nexport function getProductSalesPage(params: PageParam) {\r\n return requestClient.get>(\r\n '/mes/wm/product-sales/page',\r\n { params },\r\n );\r\n}\r\n\r\n/** 查询销售出库单详情 */\r\nexport function getProductSales(id: number) {\r\n return requestClient.get(\r\n `/mes/wm/product-sales/get?id=${id}`,\r\n );\r\n}\r\n\r\n/** 新增销售出库单 */\r\nexport function createProductSales(data: MesWmProductSalesApi.ProductSales) {\r\n return requestClient.post('/mes/wm/product-sales/create', data);\r\n}\r\n\r\n/** 修改销售出库单 */\r\nexport function updateProductSales(data: MesWmProductSalesApi.ProductSales) {\r\n return requestClient.put('/mes/wm/product-sales/update', data);\r\n}\r\n\r\n/** 删除销售出库单 */\r\nexport function deleteProductSales(id: number) {\r\n return requestClient.delete(`/mes/wm/product-sales/delete?id=${id}`);\r\n}\r\n\r\n/** 提交销售出库单 */\r\nexport function submitProductSales(id: number) {\r\n return requestClient.put(`/mes/wm/product-sales/submit?id=${id}`);\r\n}\r\n\r\n/** 执行拣货 */\r\nexport function stockProductSales(id: number) {\r\n return requestClient.put(`/mes/wm/product-sales/stock?id=${id}`);\r\n}\r\n\r\n/** 填写运单 */\r\nexport function shippingProductSales(data: MesWmProductSalesApi.ProductSales) {\r\n return requestClient.put('/mes/wm/product-sales/shipping', data);\r\n}\r\n\r\n/** 执行出库 */\r\nexport function finishProductSales(id: number) {\r\n return requestClient.put(`/mes/wm/product-sales/finish?id=${id}`);\r\n}\r\n\r\n/** 取消销售出库单 */\r\nexport function cancelProductSales(id: number) {\r\n return requestClient.put(`/mes/wm/product-sales/cancel?id=${id}`);\r\n}\r\n\r\n/** 校验销售出库单拣货数量是否与出库数量一致 */\r\nexport function checkProductSalesQuantity(id: number) {\r\n return requestClient.get(\r\n `/mes/wm/product-sales/check-quantity?id=${id}`,\r\n );\r\n}\r\n\r\n/** 导出销售出库单 */\r\nexport function exportProductSales(params: any) {\r\n return requestClient.download('/mes/wm/product-sales/export-excel', {\r\n params,\r\n });\r\n}\r\n", "after": "import type { PageParam, PageResult } from '@vben/request';\r\n\r\nimport { requestClient } from '#/api/request';\r\n\r\nexport namespace MesWmProductSalesApi {\r\n /** MES 销售出库单 */\r\n export interface ProductSales {\r\n id?: number; // 出库单编号\r\n code?: string; // 出库单编号\r\n name?: string; // 出库单名称\r\n noticeId?: number; // 发货通知单编号\r\n noticeCode?: string; // 发货通知单编码\r\n clientId?: number; // 客户编号\r\n clientName?: string; // 客户名称\r\n salesOrderCode?: string; // 销售订单编号\r\n saleOrderId?: number; // 销售订单ID\r\n salesDate?: number; // 出库日期\r\n contactName?: string; // 收货人\r\n contactTelephone?: string; // 联系方式\r\n contactAddress?: string; // 收货地址\r\n carrier?: string; // 承运商\r\n shippingNumber?: string; // 运输单号\r\n status?: number; // 单据状态\r\n remark?: string; // 备注\r\n createTime?: Date; // 创建时间\r\n }\r\n}\r\n\r\n/** 查询销售出库单分页 */\r\nexport function getProductSalesPage(params: PageParam) {\r\n return requestClient.get>(\r\n '/mes/wm/product-sales/page',\r\n { params },\r\n );\r\n}\r\n\r\n/** 查询销售出库单详情 */\r\nexport function getProductSales(id: number) {\r\n return requestClient.get(\r\n `/mes/wm/product-sales/get?id=${id}`,\r\n );\r\n}\r\n\r\n/** 新增销售出库单 */\r\nexport function createProductSales(data: MesWmProductSalesApi.ProductSales) {\r\n return requestClient.post('/mes/wm/product-sales/create', data);\r\n}\r\n\r\n/** 修改销售出库单 */\r\nexport function updateProductSales(data: MesWmProductSalesApi.ProductSales) {\r\n return requestClient.put('/mes/wm/product-sales/update', data);\r\n}\r\n\r\n/** 删除销售出库单 */\r\nexport function deleteProductSales(id: number) {\r\n return requestClient.delete(`/mes/wm/product-sales/delete?id=${id}`);\r\n}\r\n\r\n/** 提交销售出库单 */\r\nexport function submitProductSales(id: number) {\r\n return requestClient.put(`/mes/wm/product-sales/submit?id=${id}`);\r\n}\r\n\r\n/** 执行拣货 */\r\nexport function stockProductSales(id: number) {\r\n return requestClient.put(`/mes/wm/product-sales/stock?id=${id}`);\r\n}\r\n\r\n/** 填写运单 */\r\nexport function shippingProductSales(data: MesWmProductSalesApi.ProductSales) {\r\n return requestClient.put('/mes/wm/product-sales/shipping', data);\r\n}\r\n\r\n/** 执行出库 */\r\nexport function finishProductSales(id: number) {\r\n return requestClient.put(`/mes/wm/product-sales/finish?id=${id}`);\r\n}\r\n\r\n/** 取消销售出库单 */\r\nexport function cancelProductSales(id: number) {\r\n return requestClient.put(`/mes/wm/product-sales/cancel?id=${id}`);\r\n}\r\n\r\n/** 校验销售出库单拣货数量是否与出库数量一致 */\r\nexport function checkProductSalesQuantity(id: number) {\r\n return requestClient.get(\r\n `/mes/wm/product-sales/check-quantity?id=${id}`,\r\n );\r\n}\r\n\r\n/** 导出销售出库单 */\r\nexport function exportProductSales(params: any) {\r\n return requestClient.download('/mes/wm/product-sales/export-excel', {\r\n params,\r\n });\r\n}\r\n" }, { "file": "mom-pro2-before\\src\\api\\mes\\wm\\returnsales\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace MesWmReturnSalesApi {\n /** MES 销售退货单 */\n export interface ReturnSales {\n id?: number; // 退货单编号\n code?: string; // 退货单编号\n name?: string; // 退货单名称\n salesOrderCode?: string; // 销售订单号\n clientId?: number; // 客户编号\n clientCode?: string; // 客户编码\n clientName?: string; // 客户名称\n returnDate?: number; // 退货日期\n returnReason?: string; // 退货原因\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n}\n\n/** 查询销售退货单分页 */\nexport function getReturnSalesPage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/return-sales/page',\n { params },\n );\n}\n\n/** 查询销售退货单详情 */\nexport function getReturnSales(id: number) {\n return requestClient.get(\n `/mes/wm/return-sales/get?id=${id}`,\n );\n}\n\n/** 新增销售退货单 */\nexport function createReturnSales(data: MesWmReturnSalesApi.ReturnSales) {\n return requestClient.post('/mes/wm/return-sales/create', data);\n}\n\n/** 修改销售退货单 */\nexport function updateReturnSales(data: MesWmReturnSalesApi.ReturnSales) {\n return requestClient.put('/mes/wm/return-sales/update', data);\n}\n\n/** 删除销售退货单 */\nexport function deleteReturnSales(id: number) {\n return requestClient.delete(`/mes/wm/return-sales/delete?id=${id}`);\n}\n\n/** 提交销售退货单 */\nexport function submitReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/submit?id=${id}`);\n}\n\n/** 执行退货 */\nexport function finishReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/finish?id=${id}`);\n}\n\n/** 执行上架 */\nexport function stockReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/stock?id=${id}`);\n}\n\n/** 取消销售退货单 */\nexport function cancelReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/cancel?id=${id}`);\n}\n\n/** 导出销售退货单 */\nexport function exportReturnSales(params: any) {\n return requestClient.download('/mes/wm/return-sales/export-excel', {\n params,\n });\n}\n", "after": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace MesWmReturnSalesApi {\n /** MES 销售退货单 */\n export interface ReturnSales {\n id?: number; // 退货单编号\n code?: string; // 退货单编号\n name?: string; // 退货单名称\n salesOrderCode?: string; // 销售订单号\n clientId?: number; // 客户编号\n clientName?: string; // 客户名称\n returnDate?: number; // 退货日期\n returnReason?: string; // 退货原因\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n}\n\n/** 查询销售退货单分页 */\nexport function getReturnSalesPage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/return-sales/page',\n { params },\n );\n}\n\n/** 查询销售退货单详情 */\nexport function getReturnSales(id: number) {\n return requestClient.get(\n `/mes/wm/return-sales/get?id=${id}`,\n );\n}\n\n/** 新增销售退货单 */\nexport function createReturnSales(data: MesWmReturnSalesApi.ReturnSales) {\n return requestClient.post('/mes/wm/return-sales/create', data);\n}\n\n/** 修改销售退货单 */\nexport function updateReturnSales(data: MesWmReturnSalesApi.ReturnSales) {\n return requestClient.put('/mes/wm/return-sales/update', data);\n}\n\n/** 删除销售退货单 */\nexport function deleteReturnSales(id: number) {\n return requestClient.delete(`/mes/wm/return-sales/delete?id=${id}`);\n}\n\n/** 提交销售退货单 */\nexport function submitReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/submit?id=${id}`);\n}\n\n/** 执行退货 */\nexport function finishReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/finish?id=${id}`);\n}\n\n/** 执行上架 */\nexport function stockReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/stock?id=${id}`);\n}\n\n/** 取消销售退货单 */\nexport function cancelReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/cancel?id=${id}`);\n}\n\n/** 导出销售退货单 */\nexport function exportReturnSales(params: any) {\n return requestClient.download('/mes/wm/return-sales/export-excel', {\n params,\n });\n}\n" }, { "file": "mom-pro2-before\\src\\api\\mes\\wm\\salesnotice\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace MesWmSalesNoticeApi {\n /** MES 发货通知单 */\n export interface SalesNotice {\n id?: number; // 通知单编号\n code?: string; // 通知单编号\n name?: string; // 通知单名称\n saleOrderId?: number; // 销售订单编号\n saleOrderCode?: string; // 销售订单编号\n clientId?: number; // 客户编号\n clientCode?: string; // 客户编码\n clientName?: string; // 客户名称\n salesDate?: number; // 发货日期\n recipientName?: string; // 收货人\n recipientTelephone?: string; // 联系方式\n recipientAddress?: string; // 收货地址\n status?: number; // 单据状态\n outStatus?: number; // 出库状态:0-未出库,1-部分出库,2-全部出库\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n}\n\n/** 查询发货通知单分页 */\nexport function getSalesNoticePage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/sales-notice/page',\n { params },\n );\n}\n\n/** 查询发货通知单详情 */\nexport function getSalesNotice(id: number) {\n return requestClient.get(\n `/mes/wm/sales-notice/get?id=${id}`,\n );\n}\n\n/** 新增发货通知单 */\nexport function createSalesNotice(data: MesWmSalesNoticeApi.SalesNotice) {\n return requestClient.post('/mes/wm/sales-notice/create', data);\n}\n\n/** 修改发货通知单 */\nexport function updateSalesNotice(data: MesWmSalesNoticeApi.SalesNotice) {\n return requestClient.put('/mes/wm/sales-notice/update', data);\n}\n\n/** 删除发货通知单 */\nexport function deleteSalesNotice(id: number) {\n return requestClient.delete(`/mes/wm/sales-notice/delete?id=${id}`);\n}\n\n/** 提交发货通知单 */\nexport function submitSalesNotice(id: number) {\n return requestClient.put(`/mes/wm/sales-notice/submit?id=${id}`);\n}\n\n/** 导出发货通知单 */\nexport function exportSalesNotice(params: any) {\n return requestClient.download('/mes/wm/sales-notice/export-excel', {\n params,\n });\n}\n\n/** 从销售订单生成发货通知单 */\nexport function generateFromSaleOrder(saleOrderId: number) {\n return requestClient.post('/mes/wm/sales-notice/generate-from-sale-order', {\n saleOrderId,\n });\n}\n\n/** 从发货通知单生成销售出库单 */\nexport function generateProductSales(id: number) {\n return requestClient.post('/mes/wm/sales-notice/generate-product-sales', null, {\n params: { id },\n });\n}\n", "after": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace MesWmSalesNoticeApi {\n /** MES 发货通知单 */\n export interface SalesNotice {\n id?: number; // 通知单编号\n code?: string; // 通知单编号\n name?: string; // 通知单名称\n saleOrderId?: number; // 销售订单编号\n saleOrderCode?: string; // 销售订单编号\n clientId?: number; // 客户编号\n clientName?: string; // 客户名称\n salesDate?: number; // 发货日期\n recipientName?: string; // 收货人\n recipientTelephone?: string; // 联系方式\n recipientAddress?: string; // 收货地址\n status?: number; // 单据状态\n outStatus?: number; // 出库状态:0-未出库,1-部分出库,2-全部出库\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n}\n\n/** 查询发货通知单分页 */\nexport function getSalesNoticePage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/sales-notice/page',\n { params },\n );\n}\n\n/** 查询发货通知单详情 */\nexport function getSalesNotice(id: number) {\n return requestClient.get(\n `/mes/wm/sales-notice/get?id=${id}`,\n );\n}\n\n/** 新增发货通知单 */\nexport function createSalesNotice(data: MesWmSalesNoticeApi.SalesNotice) {\n return requestClient.post('/mes/wm/sales-notice/create', data);\n}\n\n/** 修改发货通知单 */\nexport function updateSalesNotice(data: MesWmSalesNoticeApi.SalesNotice) {\n return requestClient.put('/mes/wm/sales-notice/update', data);\n}\n\n/** 删除发货通知单 */\nexport function deleteSalesNotice(id: number) {\n return requestClient.delete(`/mes/wm/sales-notice/delete?id=${id}`);\n}\n\n/** 提交发货通知单 */\nexport function submitSalesNotice(id: number) {\n return requestClient.put(`/mes/wm/sales-notice/submit?id=${id}`);\n}\n\n/** 导出发货通知单 */\nexport function exportSalesNotice(params: any) {\n return requestClient.download('/mes/wm/sales-notice/export-excel', {\n params,\n });\n}\n\n/** 从销售订单生成发货通知单 */\nexport function generateFromSaleOrder(saleOrderId: number) {\n return requestClient.post('/mes/wm/sales-notice/generate-from-sale-order', {\n saleOrderId,\n });\n}\n\n/** 从发货通知单生成销售出库单 */\nexport function generateProductSales(id: number) {\n return requestClient.post('/mes/wm/sales-notice/generate-product-sales', null, {\n params: { id },\n });\n}\n" }, { "file": "mom-pro2-before\\src\\api\\wls\\batch\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace WlsBatchApi {\n /** MES 批次 */\n export interface Batch {\n id?: number; // 批次 ID\n code?: string; // 批次编码\n itemId?: number; // 物料 ID\n itemCode?: string; // 物料编码\n itemName?: string; // 物料名称\n itemSpecification?: string; // 规格型号\n unitName?: string; // 单位名称\n produceDate?: Date; // 生产日期\n expireDate?: Date; // 有效期\n receiptDate?: Date; // 入库日期\n vendorId?: number; // 供应商 ID\n vendorCode?: string; // 供应商编码\n vendorName?: string; // 供应商名称\n clientId?: number; // 客户 ID\n clientCode?: string; // 客户编码\n clientName?: string; // 客户名称\n purchaseOrderCode?: string; // 采购订单编号\n salesOrderCode?: string; // 销售订单编号\n workOrderId?: number; // 生产订单 ID\n workOrderCode?: string; // 生产订单编号\n taskId?: number; // 生产任务 ID\n taskCode?: string; // 生产任务编号\n workstationId?: number; // 工作站 ID\n workstationCode?: string; // 工作站编码\n toolId?: number; // 工具 ID\n toolCode?: string; // 工具编号\n moldId?: number; // 模具 ID\n lotNumber?: string; // 生产批号\n qualityStatus?: number; // 质量状态\n remark?: string; // 备注\n }\n\n /** MES 批次分页查询参数 */\n export interface PageParams extends PageParam {\n code?: string; // 批次号\n itemId?: number; // 物料编号\n vendorId?: number; // 供应商编号\n clientId?: number; // 客户编号\n workOrderId?: number; // 订单编号\n taskId?: number; // 生产任务编号\n workstationId?: number; // 工作站编号\n toolId?: number; // 工具编号\n moldId?: number; // 模具编号\n salesOrderCode?: string; // 销售订单号\n purchaseOrderCode?: string; // 采购订单号\n lotNumber?: string; // 批号\n qualityStatus?: number; // 质量状态\n produceDate?: string[]; // 生产日期\n expireDate?: string[]; // 过期日期\n receiptDate?: string[]; // 入库日期\n }\n}\n\n/** 查询批次详情 */\nexport function getBatch(id: number) {\n return requestClient.get(`/mes/wm/batch/get?id=${id}`);\n}\n\n/** 查询批次分页 */\nexport function getBatchPage(params: WlsBatchApi.PageParams) {\n return requestClient.get>(\n '/mes/wm/batch/page',\n { params },\n );\n}\n\n/** 批次向前追溯 */\nexport function getForwardBatchList(code: string) {\n return requestClient.get(\n '/mes/wm/batch/forward-list',\n {\n params: { code },\n },\n );\n}\n\n/** 批次向后追溯 */\nexport function getBackwardBatchList(code: string) {\n return requestClient.get(\n '/mes/wm/batch/backward-list',\n { params: { code } },\n );\n}\n", "after": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace WlsBatchApi {\n /** MES 批次 */\n export interface Batch {\n id?: number; // 批次 ID\n code?: string; // 批次编码\n itemId?: number; // 物料 ID\n itemCode?: string; // 物料编码\n itemName?: string; // 物料名称\n itemSpecification?: string; // 规格型号\n unitName?: string; // 单位名称\n produceDate?: Date; // 生产日期\n expireDate?: Date; // 有效期\n receiptDate?: Date; // 入库日期\n vendorId?: number; // 供应商 ID\n vendorCode?: string; // 供应商编码\n vendorName?: string; // 供应商名称\n clientId?: number; // 客户 ID\n clientName?: string; // 客户名称\n purchaseOrderCode?: string; // 采购订单编号\n salesOrderCode?: string; // 销售订单编号\n workOrderId?: number; // 生产订单 ID\n workOrderCode?: string; // 生产订单编号\n taskId?: number; // 生产任务 ID\n taskCode?: string; // 生产任务编号\n workstationId?: number; // 工作站 ID\n workstationCode?: string; // 工作站编码\n toolId?: number; // 工具 ID\n toolCode?: string; // 工具编号\n moldId?: number; // 模具 ID\n lotNumber?: string; // 生产批号\n qualityStatus?: number; // 质量状态\n remark?: string; // 备注\n }\n\n /** MES 批次分页查询参数 */\n export interface PageParams extends PageParam {\n code?: string; // 批次号\n itemId?: number; // 物料编号\n vendorId?: number; // 供应商编号\n clientId?: number; // 客户编号\n workOrderId?: number; // 订单编号\n taskId?: number; // 生产任务编号\n workstationId?: number; // 工作站编号\n toolId?: number; // 工具编号\n moldId?: number; // 模具编号\n salesOrderCode?: string; // 销售订单号\n purchaseOrderCode?: string; // 采购订单号\n lotNumber?: string; // 批号\n qualityStatus?: number; // 质量状态\n produceDate?: string[]; // 生产日期\n expireDate?: string[]; // 过期日期\n receiptDate?: string[]; // 入库日期\n }\n}\n\n/** 查询批次详情 */\nexport function getBatch(id: number) {\n return requestClient.get(`/mes/wm/batch/get?id=${id}`);\n}\n\n/** 查询批次分页 */\nexport function getBatchPage(params: WlsBatchApi.PageParams) {\n return requestClient.get>(\n '/mes/wm/batch/page',\n { params },\n );\n}\n\n/** 批次向前追溯 */\nexport function getForwardBatchList(code: string) {\n return requestClient.get(\n '/mes/wm/batch/forward-list',\n {\n params: { code },\n },\n );\n}\n\n/** 批次向后追溯 */\nexport function getBackwardBatchList(code: string) {\n return requestClient.get(\n '/mes/wm/batch/backward-list',\n { params: { code } },\n );\n}\n" }, { "file": "mom-pro2-before\\src\\api\\wls\\packages\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace WlsPackageApi {\n /** 装箱单 */\n export interface Package {\n id?: number; // 装箱单编号\n code?: string; // 装箱单编码\n parentId?: number; // 父箱编号\n packageDate?: number; // 装箱日期\n salesOrderCode?: string; // 销售订单编号\n invoiceCode?: string; // 发票编号\n clientId?: number; // 客户编号\n clientCode?: string; // 客户编码\n clientName?: string; // 客户名称\n clientNickname?: string; // 客户简称\n length?: number; // 箱长度\n width?: number; // 箱宽度\n height?: number; // 箱高度\n sizeUnitId?: number; // 尺寸单位编号\n sizeUnitName?: string; // 尺寸单位名称\n netWeight?: number; // 净重\n grossWeight?: number; // 毛重\n weightUnitId?: number; // 重量单位编号\n weightUnitName?: string; // 重量单位名称\n inspectorUserId?: number; // 检查员用户编号\n inspectorName?: string; // 检查员名称\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: string; // 创建时间\n children?: Package[]; // 子箱列表\n }\n}\n\n/** 查询装箱单分页 */\nexport function getPackagePage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/package/page',\n { params },\n );\n}\n\n/** 查询装箱单详情 */\nexport function getPackage(id: number) {\n return requestClient.get(\n `/mes/wm/package/get?id=${id}`,\n );\n}\n\n/** 新增装箱单 */\nexport function createPackage(data: WlsPackageApi.Package) {\n return requestClient.post('/mes/wm/package/create', data);\n}\n\n/** 修改装箱单 */\nexport function updatePackage(data: WlsPackageApi.Package) {\n return requestClient.put('/mes/wm/package/update', data);\n}\n\n/** 删除装箱单 */\nexport function deletePackage(id: number) {\n return requestClient.delete(`/mes/wm/package/delete?id=${id}`);\n}\n\n/** 完成装箱单 */\nexport function finishPackage(id: number) {\n return requestClient.put(`/mes/wm/package/finish?id=${id}`);\n}\n\n/** 添加子箱 */\nexport function addChildPackage(parentId: number, childId: number) {\n return requestClient.put('/mes/wm/package/add-child-package', null, {\n params: { childId, parentId },\n });\n}\n\n/** 移除子箱 */\nexport function removeChildPackage(childId: number) {\n return requestClient.put(\n `/mes/wm/package/remove-child-package?childId=${childId}`,\n );\n}\n", "after": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace WlsPackageApi {\n /** 装箱单 */\n export interface Package {\n id?: number; // 装箱单编号\n code?: string; // 装箱单编码\n parentId?: number; // 父箱编号\n packageDate?: number; // 装箱日期\n salesOrderCode?: string; // 销售订单编号\n invoiceCode?: string; // 发票编号\n clientId?: number; // 客户编号\n clientName?: string; // 客户名称\n clientNickname?: string; // 客户简称\n length?: number; // 箱长度\n width?: number; // 箱宽度\n height?: number; // 箱高度\n sizeUnitId?: number; // 尺寸单位编号\n sizeUnitName?: string; // 尺寸单位名称\n netWeight?: number; // 净重\n grossWeight?: number; // 毛重\n weightUnitId?: number; // 重量单位编号\n weightUnitName?: string; // 重量单位名称\n inspectorUserId?: number; // 检查员用户编号\n inspectorName?: string; // 检查员名称\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: string; // 创建时间\n children?: Package[]; // 子箱列表\n }\n}\n\n/** 查询装箱单分页 */\nexport function getPackagePage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/package/page',\n { params },\n );\n}\n\n/** 查询装箱单详情 */\nexport function getPackage(id: number) {\n return requestClient.get(\n `/mes/wm/package/get?id=${id}`,\n );\n}\n\n/** 新增装箱单 */\nexport function createPackage(data: WlsPackageApi.Package) {\n return requestClient.post('/mes/wm/package/create', data);\n}\n\n/** 修改装箱单 */\nexport function updatePackage(data: WlsPackageApi.Package) {\n return requestClient.put('/mes/wm/package/update', data);\n}\n\n/** 删除装箱单 */\nexport function deletePackage(id: number) {\n return requestClient.delete(`/mes/wm/package/delete?id=${id}`);\n}\n\n/** 完成装箱单 */\nexport function finishPackage(id: number) {\n return requestClient.put(`/mes/wm/package/finish?id=${id}`);\n}\n\n/** 添加子箱 */\nexport function addChildPackage(parentId: number, childId: number) {\n return requestClient.put('/mes/wm/package/add-child-package', null, {\n params: { childId, parentId },\n });\n}\n\n/** 移除子箱 */\nexport function removeChildPackage(childId: number) {\n return requestClient.put(\n `/mes/wm/package/remove-child-package?childId=${childId}`,\n );\n}\n" }, { "file": "mom-pro2-before\\src\\api\\wls\\productissue\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\r\n\r\nimport { requestClient } from '#/api/request';\r\n\r\nexport namespace WlsProductIssueApi {\r\n /** MES 领料出库单 */\r\n export interface ProductIssue {\r\n id?: number; // 领料单编号\r\n code?: string; // 领料单编号\r\n name?: string; // 领料单名称\r\n workstationId?: number; // 工作站编号\r\n workstationCode?: string; // 工作站编码\r\n workstationName?: string; // 工作站名称\r\n workOrderId?: number; // 生产订单编号\r\n workOrderCode?: string; // 生产订单编码\r\n clientCode?: string; // 客户编码\r\n clientName?: string; // 客户名称\r\n requiredTime?: number; // 需求时间\r\n status?: number; // 单据状态\r\n remark?: string; // 备注\r\n createTime?: Date; // 创建时间\r\n }\r\n}\r\n\r\n/** 查询领料出库单分页 */\r\nexport function getProductIssuePage(params: PageParam) {\r\n return requestClient.get>(\r\n '/mes/wm/product-issue/page',\r\n { params },\r\n );\r\n}\r\n\r\n/** 查询领料出库单详情 */\r\nexport function getProductIssue(id: number) {\r\n return requestClient.get(\r\n `/mes/wm/product-issue/get?id=${id}`,\r\n );\r\n}\r\n\r\n/** 新增领料出库单 */\r\nexport function createProductIssue(data: WlsProductIssueApi.ProductIssue) {\r\n return requestClient.post('/mes/wm/product-issue/create', data);\r\n}\r\n\r\n/** 修改领料出库单 */\r\nexport function updateProductIssue(data: WlsProductIssueApi.ProductIssue) {\r\n return requestClient.put('/mes/wm/product-issue/update', data);\r\n}\r\n\r\n/** 删除领料出库单 */\r\nexport function deleteProductIssue(id: number) {\r\n return requestClient.delete(`/mes/wm/product-issue/delete?id=${id}`);\r\n}\r\n\r\n/** 提交领料出库单 */\r\nexport function submitProductIssue(id: number) {\r\n return requestClient.put(`/mes/wm/product-issue/submit?id=${id}`);\r\n}\r\n\r\n/** 执行拣货 */\r\nexport function stockProductIssue(id: number) {\r\n return requestClient.put(`/mes/wm/product-issue/stock?id=${id}`);\r\n}\r\n\r\n/** 完成领料出库单 */\r\nexport function finishProductIssue(id: number) {\r\n return requestClient.put(`/mes/wm/product-issue/finish?id=${id}`);\r\n}\r\n\r\n/** 取消领料出库单 */\r\nexport function cancelProductIssue(id: number) {\r\n return requestClient.put(`/mes/wm/product-issue/cancel?id=${id}`);\r\n}\r\n\r\n/** 校验领料出库单拣货数量是否与领料数量一致 */\r\nexport function checkProductIssueQuantity(id: number) {\r\n return requestClient.get(\r\n `/mes/wm/product-issue/check-quantity?id=${id}`,\r\n );\r\n}\r\n\r\n/** 导出领料出库单 */\r\nexport function exportProductIssue(params: any) {\r\n return requestClient.download('/mes/wm/product-issue/export-excel', {\r\n params,\r\n });\r\n}\r\n", "after": "import type { PageParam, PageResult } from '@vben/request';\r\n\r\nimport { requestClient } from '#/api/request';\r\n\r\nexport namespace WlsProductIssueApi {\r\n /** MES 领料出库单 */\r\n export interface ProductIssue {\r\n id?: number; // 领料单编号\r\n code?: string; // 领料单编号\r\n name?: string; // 领料单名称\r\n workstationId?: number; // 工作站编号\r\n workstationCode?: string; // 工作站编码\r\n workstationName?: string; // 工作站名称\r\n workOrderId?: number; // 生产订单编号\r\n workOrderCode?: string; // 生产订单编码\r\n clientName?: string; // 客户名称\r\n requiredTime?: number; // 需求时间\r\n status?: number; // 单据状态\r\n remark?: string; // 备注\r\n createTime?: Date; // 创建时间\r\n }\r\n}\r\n\r\n/** 查询领料出库单分页 */\r\nexport function getProductIssuePage(params: PageParam) {\r\n return requestClient.get>(\r\n '/mes/wm/product-issue/page',\r\n { params },\r\n );\r\n}\r\n\r\n/** 查询领料出库单详情 */\r\nexport function getProductIssue(id: number) {\r\n return requestClient.get(\r\n `/mes/wm/product-issue/get?id=${id}`,\r\n );\r\n}\r\n\r\n/** 新增领料出库单 */\r\nexport function createProductIssue(data: WlsProductIssueApi.ProductIssue) {\r\n return requestClient.post('/mes/wm/product-issue/create', data);\r\n}\r\n\r\n/** 修改领料出库单 */\r\nexport function updateProductIssue(data: WlsProductIssueApi.ProductIssue) {\r\n return requestClient.put('/mes/wm/product-issue/update', data);\r\n}\r\n\r\n/** 删除领料出库单 */\r\nexport function deleteProductIssue(id: number) {\r\n return requestClient.delete(`/mes/wm/product-issue/delete?id=${id}`);\r\n}\r\n\r\n/** 提交领料出库单 */\r\nexport function submitProductIssue(id: number) {\r\n return requestClient.put(`/mes/wm/product-issue/submit?id=${id}`);\r\n}\r\n\r\n/** 执行拣货 */\r\nexport function stockProductIssue(id: number) {\r\n return requestClient.put(`/mes/wm/product-issue/stock?id=${id}`);\r\n}\r\n\r\n/** 完成领料出库单 */\r\nexport function finishProductIssue(id: number) {\r\n return requestClient.put(`/mes/wm/product-issue/finish?id=${id}`);\r\n}\r\n\r\n/** 取消领料出库单 */\r\nexport function cancelProductIssue(id: number) {\r\n return requestClient.put(`/mes/wm/product-issue/cancel?id=${id}`);\r\n}\r\n\r\n/** 校验领料出库单拣货数量是否与领料数量一致 */\r\nexport function checkProductIssueQuantity(id: number) {\r\n return requestClient.get(\r\n `/mes/wm/product-issue/check-quantity?id=${id}`,\r\n );\r\n}\r\n\r\n/** 导出领料出库单 */\r\nexport function exportProductIssue(params: any) {\r\n return requestClient.download('/mes/wm/product-issue/export-excel', {\r\n params,\r\n });\r\n}\r\n" }, { "file": "mom-pro2-before\\src\\api\\wls\\productsales\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace WlsProductSalesApi {\n /** MES 销售出库单 */\n export interface ProductSales {\n id?: number; // 出库单编号\n code?: string; // 出库单编号\n name?: string; // 出库单名称\n noticeId?: number; // 发货通知单编号\n noticeCode?: string; // 发货通知单编码\n clientId?: number; // 客户编号\n clientCode?: string; // 客户编码\n clientName?: string; // 客户名称\n salesOrderCode?: string; // 销售订单编号\n saleOrderId?: number; // 销售订单ID\n salesDate?: number; // 出库日期\n contactName?: string; // 收货人\n contactTelephone?: string; // 联系方式\n contactAddress?: string; // 收货地址\n carrier?: string; // 承运商\n shippingNumber?: string; // 运输单号\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n}\n\n/** 查询销售出库单分页 */\nexport function getProductSalesPage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/product-sales/page',\n { params },\n );\n}\n\n/** 查询销售出库单详情 */\nexport function getProductSales(id: number) {\n return requestClient.get(\n `/mes/wm/product-sales/get?id=${id}`,\n );\n}\n\n/** 新增销售出库单 */\nexport function createProductSales(data: WlsProductSalesApi.ProductSales) {\n return requestClient.post('/mes/wm/product-sales/create', data);\n}\n\n/** 修改销售出库单 */\nexport function updateProductSales(data: WlsProductSalesApi.ProductSales) {\n return requestClient.put('/mes/wm/product-sales/update', data);\n}\n\n/** 删除销售出库单 */\nexport function deleteProductSales(id: number) {\n return requestClient.delete(`/mes/wm/product-sales/delete?id=${id}`);\n}\n\n/** 提交销售出库单 */\nexport function submitProductSales(id: number) {\n return requestClient.put(`/mes/wm/product-sales/submit?id=${id}`);\n}\n\n/** 执行拣货 */\nexport function stockProductSales(id: number) {\n return requestClient.put(`/mes/wm/product-sales/stock?id=${id}`);\n}\n\n/** 填写运单 */\nexport function shippingProductSales(data: WlsProductSalesApi.ProductSales) {\n return requestClient.put('/mes/wm/product-sales/shipping', data);\n}\n\n/** 执行出库 */\nexport function finishProductSales(id: number) {\n return requestClient.put(`/mes/wm/product-sales/finish?id=${id}`);\n}\n\n/** 取消销售出库单 */\nexport function cancelProductSales(id: number) {\n return requestClient.put(`/mes/wm/product-sales/cancel?id=${id}`);\n}\n\n/** 校验销售出库单拣货数量是否与出库数量一致 */\nexport function checkProductSalesQuantity(id: number) {\n return requestClient.get(\n `/mes/wm/product-sales/check-quantity?id=${id}`,\n );\n}\n\n/** 导出销售出库单 */\nexport function exportProductSales(params: any) {\n return requestClient.download('/mes/wm/product-sales/export-excel', {\n params,\n });\n}\n", "after": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace WlsProductSalesApi {\n /** MES 销售出库单 */\n export interface ProductSales {\n id?: number; // 出库单编号\n code?: string; // 出库单编号\n name?: string; // 出库单名称\n noticeId?: number; // 发货通知单编号\n noticeCode?: string; // 发货通知单编码\n clientId?: number; // 客户编号\n clientName?: string; // 客户名称\n salesOrderCode?: string; // 销售订单编号\n saleOrderId?: number; // 销售订单ID\n salesDate?: number; // 出库日期\n contactName?: string; // 收货人\n contactTelephone?: string; // 联系方式\n contactAddress?: string; // 收货地址\n carrier?: string; // 承运商\n shippingNumber?: string; // 运输单号\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n}\n\n/** 查询销售出库单分页 */\nexport function getProductSalesPage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/product-sales/page',\n { params },\n );\n}\n\n/** 查询销售出库单详情 */\nexport function getProductSales(id: number) {\n return requestClient.get(\n `/mes/wm/product-sales/get?id=${id}`,\n );\n}\n\n/** 新增销售出库单 */\nexport function createProductSales(data: WlsProductSalesApi.ProductSales) {\n return requestClient.post('/mes/wm/product-sales/create', data);\n}\n\n/** 修改销售出库单 */\nexport function updateProductSales(data: WlsProductSalesApi.ProductSales) {\n return requestClient.put('/mes/wm/product-sales/update', data);\n}\n\n/** 删除销售出库单 */\nexport function deleteProductSales(id: number) {\n return requestClient.delete(`/mes/wm/product-sales/delete?id=${id}`);\n}\n\n/** 提交销售出库单 */\nexport function submitProductSales(id: number) {\n return requestClient.put(`/mes/wm/product-sales/submit?id=${id}`);\n}\n\n/** 执行拣货 */\nexport function stockProductSales(id: number) {\n return requestClient.put(`/mes/wm/product-sales/stock?id=${id}`);\n}\n\n/** 填写运单 */\nexport function shippingProductSales(data: WlsProductSalesApi.ProductSales) {\n return requestClient.put('/mes/wm/product-sales/shipping', data);\n}\n\n/** 执行出库 */\nexport function finishProductSales(id: number) {\n return requestClient.put(`/mes/wm/product-sales/finish?id=${id}`);\n}\n\n/** 取消销售出库单 */\nexport function cancelProductSales(id: number) {\n return requestClient.put(`/mes/wm/product-sales/cancel?id=${id}`);\n}\n\n/** 校验销售出库单拣货数量是否与出库数量一致 */\nexport function checkProductSalesQuantity(id: number) {\n return requestClient.get(\n `/mes/wm/product-sales/check-quantity?id=${id}`,\n );\n}\n\n/** 导出销售出库单 */\nexport function exportProductSales(params: any) {\n return requestClient.download('/mes/wm/product-sales/export-excel', {\n params,\n });\n}\n" }, { "file": "mom-pro2-before\\src\\api\\wls\\returnsales\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace WlsReturnSalesApi {\n /** MES 销售退货单 */\n export interface ReturnSales {\n id?: number; // 退货单编号\n code?: string; // 退货单编号\n name?: string; // 退货单名称\n salesOrderCode?: string; // 销售订单号\n clientId?: number; // 客户编号\n clientCode?: string; // 客户编码\n clientName?: string; // 客户名称\n returnDate?: number; // 退货日期\n returnReason?: string; // 退货原因\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n}\n\n/** 查询销售退货单分页 */\nexport function getReturnSalesPage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/return-sales/page',\n { params },\n );\n}\n\n/** 查询销售退货单详情 */\nexport function getReturnSales(id: number) {\n return requestClient.get(\n `/mes/wm/return-sales/get?id=${id}`,\n );\n}\n\n/** 新增销售退货单 */\nexport function createReturnSales(data: WlsReturnSalesApi.ReturnSales) {\n return requestClient.post('/mes/wm/return-sales/create', data);\n}\n\n/** 修改销售退货单 */\nexport function updateReturnSales(data: WlsReturnSalesApi.ReturnSales) {\n return requestClient.put('/mes/wm/return-sales/update', data);\n}\n\n/** 删除销售退货单 */\nexport function deleteReturnSales(id: number) {\n return requestClient.delete(`/mes/wm/return-sales/delete?id=${id}`);\n}\n\n/** 提交销售退货单 */\nexport function submitReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/submit?id=${id}`);\n}\n\n/** 执行退货 */\nexport function finishReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/finish?id=${id}`);\n}\n\n/** 执行上架 */\nexport function stockReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/stock?id=${id}`);\n}\n\n/** 取消销售退货单 */\nexport function cancelReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/cancel?id=${id}`);\n}\n\n/** 导出销售退货单 */\nexport function exportReturnSales(params: any) {\n return requestClient.download('/mes/wm/return-sales/export-excel', {\n params,\n });\n}\n", "after": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace WlsReturnSalesApi {\n /** MES 销售退货单 */\n export interface ReturnSales {\n id?: number; // 退货单编号\n code?: string; // 退货单编号\n name?: string; // 退货单名称\n salesOrderCode?: string; // 销售订单号\n clientId?: number; // 客户编号\n clientName?: string; // 客户名称\n returnDate?: number; // 退货日期\n returnReason?: string; // 退货原因\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n}\n\n/** 查询销售退货单分页 */\nexport function getReturnSalesPage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/return-sales/page',\n { params },\n );\n}\n\n/** 查询销售退货单详情 */\nexport function getReturnSales(id: number) {\n return requestClient.get(\n `/mes/wm/return-sales/get?id=${id}`,\n );\n}\n\n/** 新增销售退货单 */\nexport function createReturnSales(data: WlsReturnSalesApi.ReturnSales) {\n return requestClient.post('/mes/wm/return-sales/create', data);\n}\n\n/** 修改销售退货单 */\nexport function updateReturnSales(data: WlsReturnSalesApi.ReturnSales) {\n return requestClient.put('/mes/wm/return-sales/update', data);\n}\n\n/** 删除销售退货单 */\nexport function deleteReturnSales(id: number) {\n return requestClient.delete(`/mes/wm/return-sales/delete?id=${id}`);\n}\n\n/** 提交销售退货单 */\nexport function submitReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/submit?id=${id}`);\n}\n\n/** 执行退货 */\nexport function finishReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/finish?id=${id}`);\n}\n\n/** 执行上架 */\nexport function stockReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/stock?id=${id}`);\n}\n\n/** 取消销售退货单 */\nexport function cancelReturnSales(id: number) {\n return requestClient.put(`/mes/wm/return-sales/cancel?id=${id}`);\n}\n\n/** 导出销售退货单 */\nexport function exportReturnSales(params: any) {\n return requestClient.download('/mes/wm/return-sales/export-excel', {\n params,\n });\n}\n" }, { "file": "mom-pro2-before\\src\\api\\wls\\salesnotice\\index.ts", "removed": 1, "before": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace WlsSalesNoticeApi {\n /** MES 发货通知单 */\n export interface SalesNotice {\n id?: number; // 通知单编号\n code?: string; // 通知单编号\n name?: string; // 通知单名称\n salesOrderCode?: string; // 销售订单编号\n clientId?: number; // 客户编号\n clientCode?: string; // 客户编码\n clientName?: string; // 客户名称\n salesDate?: number; // 发货日期\n recipientName?: string; // 收货人\n recipientTelephone?: string; // 联系方式\n recipientAddress?: string; // 收货地址\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n}\n\n/** 查询发货通知单分页 */\nexport function getSalesNoticePage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/sales-notice/page',\n { params },\n );\n}\n\n/** 查询发货通知单详情 */\nexport function getSalesNotice(id: number) {\n return requestClient.get(\n `/mes/wm/sales-notice/get?id=${id}`,\n );\n}\n\n/** 新增发货通知单 */\nexport function createSalesNotice(data: WlsSalesNoticeApi.SalesNotice) {\n return requestClient.post('/mes/wm/sales-notice/create', data);\n}\n\n/** 修改发货通知单 */\nexport function updateSalesNotice(data: WlsSalesNoticeApi.SalesNotice) {\n return requestClient.put('/mes/wm/sales-notice/update', data);\n}\n\n/** 删除发货通知单 */\nexport function deleteSalesNotice(id: number) {\n return requestClient.delete(`/mes/wm/sales-notice/delete?id=${id}`);\n}\n\n/** 提交发货通知单 */\nexport function submitSalesNotice(id: number) {\n return requestClient.put(`/mes/wm/sales-notice/submit?id=${id}`);\n}\n\n/** 导出发货通知单 */\nexport function exportSalesNotice(params: any) {\n return requestClient.download('/mes/wm/sales-notice/export-excel', {\n params,\n });\n}\n", "after": "import type { PageParam, PageResult } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\nexport namespace WlsSalesNoticeApi {\n /** MES 发货通知单 */\n export interface SalesNotice {\n id?: number; // 通知单编号\n code?: string; // 通知单编号\n name?: string; // 通知单名称\n salesOrderCode?: string; // 销售订单编号\n clientId?: number; // 客户编号\n clientName?: string; // 客户名称\n salesDate?: number; // 发货日期\n recipientName?: string; // 收货人\n recipientTelephone?: string; // 联系方式\n recipientAddress?: string; // 收货地址\n status?: number; // 单据状态\n remark?: string; // 备注\n createTime?: Date; // 创建时间\n }\n}\n\n/** 查询发货通知单分页 */\nexport function getSalesNoticePage(params: PageParam) {\n return requestClient.get>(\n '/mes/wm/sales-notice/page',\n { params },\n );\n}\n\n/** 查询发货通知单详情 */\nexport function getSalesNotice(id: number) {\n return requestClient.get(\n `/mes/wm/sales-notice/get?id=${id}`,\n );\n}\n\n/** 新增发货通知单 */\nexport function createSalesNotice(data: WlsSalesNoticeApi.SalesNotice) {\n return requestClient.post('/mes/wm/sales-notice/create', data);\n}\n\n/** 修改发货通知单 */\nexport function updateSalesNotice(data: WlsSalesNoticeApi.SalesNotice) {\n return requestClient.put('/mes/wm/sales-notice/update', data);\n}\n\n/** 删除发货通知单 */\nexport function deleteSalesNotice(id: number) {\n return requestClient.delete(`/mes/wm/sales-notice/delete?id=${id}`);\n}\n\n/** 提交发货通知单 */\nexport function submitSalesNotice(id: number) {\n return requestClient.put(`/mes/wm/sales-notice/submit?id=${id}`);\n}\n\n/** 导出发货通知单 */\nexport function exportSalesNotice(params: any) {\n return requestClient.download('/mes/wm/sales-notice/export-excel', {\n params,\n });\n}\n" }, { "file": "mom-pro2-before\\src\\packages\\constants\\src\\biz-mes-enum.ts", "removed": 1, "before": "/** MES 单据状态常量 */\r\nexport const MesOrderStatusConstants = {\r\n DRAFT: 0,\r\n CONFIRMED: 1,\r\n APPROVING: 2,\r\n APPROVED: 3,\r\n FINISHED: 4,\r\n CANCELLED: 5,\r\n} as const;\r\n\r\n/** MES 物料/产品标识枚举 */\r\nexport const MesItemOrProductEnum = {\r\n ITEM: {\r\n label: '物料',\r\n value: 'ITEM',\r\n },\r\n PRODUCT: {\r\n label: '产品',\r\n value: 'PRODUCT',\r\n },\r\n} as const;\r\n\r\n/** MES 工具状态枚举 */\r\nexport const MesToolStatusEnum = {\r\n STORE: 1,\r\n ISSUE: 2,\r\n REPAIR: 3,\r\n SCRAP: 4,\r\n} as const;\r\n\r\n/** MES 保养维护类型枚举 */\r\nexport const MesMaintenTypeEnum = {\r\n REGULAR: 1,\r\n USAGE: 2,\r\n} as const;\r\n\r\n/** MES 设备状态枚举 */\r\nexport const MesDvMachineryStatusEnum = {\r\n STOP: 1,\r\n PRODUCING: 2,\r\n MAINTENANCE: 3,\r\n} as const;\r\n\r\n/** MES 假期类型枚举 */\r\nexport const HolidayType = {\r\n WORKDAY: 1,\r\n HOLIDAY: 2,\r\n} as const;\r\n\r\n/** MES 排班计划状态枚举 */\r\nexport const MesCalPlanStatusEnum = {\r\n PREPARE: 0,\r\n CONFIRMED: 1,\r\n} as const;\r\n\r\n/** MES 轮班方式枚举 */\r\nexport const MesCalShiftTypeEnum = {\r\n SINGLE: 1,\r\n TWO: 2,\r\n THREE: 3,\r\n} as const;\r\n\r\n/** MES 倒班方式枚举 */\r\nexport const MesCalShiftMethodEnum = {\r\n QUARTER: 1,\r\n MONTH: 2,\r\n WEEK: 3,\r\n DAY: 4,\r\n} as const;\r\n\r\n/** MES 点检保养项目类型枚举 */\r\nexport const MesDvSubjectTypeEnum = {\r\n CHECK: 1,\r\n MAINTENANCE: 2,\r\n} as const;\r\n\r\n/** MES 点检保养方案状态枚举 */\r\nexport const MesDvCheckPlanStatusEnum = {\r\n PREPARE: 0,\r\n ENABLED: 1,\r\n} as const;\r\n\r\n/** MES 设备保养记录状态枚举 */\r\nexport const MesDvMaintenRecordStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n SUBMITTED: MesOrderStatusConstants.FINISHED,\r\n} as const;\r\n\r\n/** MES 设备保养明细结果枚举 */\r\nexport const MesDvMaintenStatusEnum = {\r\n NORMAL: 1,\r\n ABNORMAL: 2,\r\n} as const;\r\n\r\n/** MES 设备点检记录状态枚举 */\r\nexport const MesDvCheckRecordStatusEnum = {\r\n DRAFT: 10,\r\n FINISHED: 20,\r\n} as const;\r\n\r\n/** MES 设备点检结果枚举 */\r\nexport const MesDvCheckResultEnum = {\r\n NORMAL: 1,\r\n ABNORMAL: 2,\r\n} as const;\r\n\r\n/** MES 计量器具状态枚举 */\r\nexport const MesDvMeteringStatusEnum = {\r\n IN_USE: 1, // 在用\r\n STOPPED: 2, // 停用\r\n SCRAPPED: 3, // 报废\r\n} as const;\r\n\r\n/** MES 计量检测结论枚举 */\r\nexport const MesDvMeteringCheckResultEnum = {\r\n QUALIFIED: 1, // 合格\r\n UNQUALIFIED: 2, // 不合格\r\n} as const;\r\n\r\n/** MES 计量器具到期状态枚举 */\r\nexport const MesDvMeteringExpireStatusEnum = {\r\n OVERDUE: 1, // 已过期\r\n WITHIN: 2, // 即将到期\r\n NORMAL: 3, // 正常\r\n} as const;\r\n\r\n/** MES 维修工单状态枚举 */\r\nexport const MesDvRepairStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n CONFIRMED: MesOrderStatusConstants.CONFIRMED,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n} as const;\r\n\r\n/** MES 维修结果枚举 */\r\nexport const MesDvRepairResultEnum = {\r\n PASS: 1,\r\n FAIL: 2,\r\n} as const;\r\n\r\n/** MES 自动编码规则 Code 枚举 */\r\nexport const MesAutoCodeRuleCode = {\r\n CAL_PLAN_CODE: 'CAL_PLAN_CODE',\r\n CAL_TEAM_CODE: 'CAL_TEAM_CODE',\r\n DV_CHECK_PLAN_CODE: 'DV_CHECK_PLAN_CODE',\r\n DV_MACHINERY_TYPE_CODE: 'DV_MACHINERY_TYPE_CODE',\r\n DV_MACHINERY_CODE: 'DV_MACHINERY_CODE',\r\n DV_REPAIR_CODE: 'DV_REPAIR_CODE',\r\n DV_SUBJECT_CODE: 'DV_SUBJECT_CODE',\r\n MD_CLIENT_CODE: 'MD_CLIENT_CODE',\r\n MD_ITEM_TYPE_CODE: 'MD_ITEM_TYPE_CODE',\r\n MD_ITEM_CODE: 'MD_ITEM_CODE',\r\n MD_VENDOR_CODE: 'MD_VENDOR_CODE',\r\n MD_WORKSTATION_CODE: 'MD_WORKSTATION_CODE',\r\n MD_WORKSHOP_CODE: 'MD_WORKSHOP_CODE',\r\n PD_PROJECT_CODE: 'PD_PROJECT_CODE',\r\n PD_TASK_CODE: 'PD_TASK_CODE',\r\n PD_VERSION_CODE: 'PD_VERSION_CODE',\r\n PD_DOCUMENT_AUDIT_CODE: 'PD_DOCUMENT_AUDIT_CODE',\r\n PD_ARCHIVE_CODE: 'PD_ARCHIVE_CODE',\r\n PRO_CARD_CODE: 'PRO_CARD_CODE',\r\n PRO_FEEDBACK_CODE: 'PRO_FEEDBACK_CODE',\r\n PRO_PROCESS_CODE: 'PRO_PROCESS_CODE',\r\n PRO_ROUTE_CODE: 'PRO_ROUTE_CODE',\r\n PRO_TASK_CODE: 'PRO_TASK_CODE',\r\n PRO_WORK_ORDER_CODE: 'PRO_WORK_ORDER_CODE',\r\n QC_DEFECT_CODE: 'QC_DEFECT_CODE',\r\n QC_INDICATOR_CODE: 'QC_INDICATOR_CODE',\r\n QC_INDICATOR_RESULT_CODE: 'QC_INDICATOR_RESULT_CODE',\r\n QC_IQC_CODE: 'QC_IQC_CODE',\r\n QC_IPQC_CODE: 'QC_IPQC_CODE',\r\n QC_OQC_CODE: 'QC_OQC_CODE',\r\n QC_RQC_CODE: 'QC_RQC_CODE',\r\n QC_TEMPLATE_CODE: 'QC_TEMPLATE_CODE',\r\n TM_TOOL_TYPE_CODE: 'TM_TOOL_TYPE_CODE',\r\n TM_TOOL_CODE: 'TM_TOOL_CODE',\r\n WM_AREA_CODE: 'WM_AREA_CODE',\r\n WM_LOCATION_CODE: 'WM_LOCATION_CODE',\r\n WM_ARRIVAL_NOTICE_CODE: 'WM_ARRIVAL_NOTICE_CODE',\r\n WM_ITEM_RECEIPT_CODE: 'WM_ITEM_RECEIPT_CODE',\r\n WM_RETURN_VENDOR_CODE: 'WM_RETURN_VENDOR_CODE',\r\n WM_SALES_NOTICE_CODE: 'WM_SALES_NOTICE_CODE',\r\n WM_RETURN_SALES_CODE: 'WM_RETURN_SALES_CODE',\r\n WM_RETURN_ISSUE_CODE: 'WM_RETURN_ISSUE_CODE',\r\n WM_PRODUCT_ISSUE_CODE: 'WM_PRODUCT_ISSUE_CODE',\r\n WM_PRODUCT_SALES_CODE: 'WM_PRODUCT_SALES_CODE',\r\n PRODUCTRECPT_CODE: 'PRODUCTRECPT_CODE',\r\n WM_MISC_ISSUE_CODE: 'WM_MISC_ISSUE_CODE',\r\n WM_MISC_RECEIPT_CODE: 'WM_MISC_RECEIPT_CODE',\r\n WM_OUTSOURCE_ISSUE_CODE: 'WM_OUTSOURCE_ISSUE_CODE',\r\n WM_OUTSOURCE_RECEIPT_CODE: 'WM_OUTSOURCE_RECEIPT_CODE',\r\n WM_PACKAGE_CODE: 'WM_PACKAGE_CODE',\r\n WM_SN_CODE: 'WM_SN_CODE',\r\n WM_BATCH_CODE: 'WM_BATCH_CODE',\r\n WM_STOCK_TAKING_CODE: 'WM_STOCK_TAKING_CODE',\r\n WM_STOCK_TAKING_PLAN_CODE: 'WM_STOCK_TAKING_PLAN_CODE',\r\n WM_WAREHOUSE_CODE: 'WM_WAREHOUSE_CODE',\r\n TRANSFER_CODE: 'TRANSFER_CODE',\r\n} as const;\r\n\r\n/** MES 装箱单状态枚举 */\r\nexport const MesWmPackageStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n} as const;\r\n\r\n/** MES 盘点类型枚举 */\r\nexport const MesWmStockTakingTypeEnum = {\r\n STATIC: 1,\r\n DYNAMIC: 2,\r\n} as const;\r\n\r\n/** MES 盘点任务状态枚举 */\r\nexport const MesWmStockTakingTaskStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 盘点任务行状态枚举 */\r\nexport const MesWmStockTakingTaskLineStatusEnum = {\r\n UNCOUNTED: 0,\r\n NORMAL: 1,\r\n GAIN: 2,\r\n LOSS: 3,\r\n} as const;\r\n\r\n/** MES 盘点方案参数类型枚举 */\r\nexport const MesWmStockTakingParamTypeEnum = {\r\n WAREHOUSE: 102,\r\n LOCATION: 103,\r\n AREA: 104,\r\n BATCH: 107,\r\n ITEM: 600,\r\n QUALITY_STATUS: 900,\r\n} as const;\r\n\r\n/** MES 生产工单状态枚举(独立于通用单据状态,对齐后端 MesProWorkOrderStatusEnum) */\r\nexport const MesProWorkOrderStatusEnum = {\r\n PREPARE: 0, // 草稿\r\n CONFIRMED: 1, // 已确认\r\n FINISHED: 2, // 已完成\r\n CANCELED: 3, // 已取消\r\n} as const;\r\n\r\n/** MES 生产工单生产状态枚举(对齐后端 MesProWorkOrderProductionStatusEnum) */\r\nexport const MesProWorkOrderProductionStatusEnum = {\r\n WAITING: 0, // 待生产\r\n PRODUCING: 1, // 生产中\r\n FINISHED: 2, // 生产完成\r\n} as const;\r\n\r\n/** MES 工单类型枚举 */\r\nexport const MesProWorkOrderTypeEnum = {\r\n SELF: 1, // 自行生产\r\n OUTSOURCE: 2, // 代工\r\n PURCHASE: 3, // 采购\r\n} as const;\r\n\r\n/** MES 工单来源类型枚举 */\r\nexport const MesProWorkOrderSourceTypeEnum = {\r\n ORDER: 1, // 客户订单\r\n STORE: 2, // 库存备货\r\n} as const;\r\n\r\n/** MES 生产任务状态枚举 */\r\nexport const MesProTaskStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n CONFIRMED: MesOrderStatusConstants.CONFIRMED,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n PRODUCING: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELLED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 生产报工状态枚举 */\r\nexport const MesProFeedbackStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n UNCHECK: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 流转卡状态枚举(复用工单状态值,对齐后端 MesProWorkOrderStatusEnum) */\r\nexport const MesProCardStatusEnum = {\r\n PREPARE: 0, // 草稿\r\n CONFIRMED: 1, // 已确认\r\n FINISHED: 2, // 已完成\r\n CANCELED: 3, // 已取消\r\n} as const;\r\n\r\n/** MES 安灯处置状态枚举 */\r\nexport const MesProAndonStatusEnum = {\r\n ACTIVE: 0, // 未处置\r\n HANDLED: 1, // 已处置\r\n} as const;\r\n\r\n/** MES 安灯级别枚举 */\r\nexport const MesProAndonLevelEnum = {\r\n LEVEL1: 1,\r\n LEVEL2: 2,\r\n LEVEL3: 3,\r\n} as const;\r\n\r\n/** MES 上下工状态类型枚举 */\r\nexport const MesProWorkRecordTypeEnum = {\r\n CLOCK_IN: 1,\r\n CLOCK_OUT: 2,\r\n} as const;\r\n\r\n/** MES 生产报工类型枚举 */\r\nexport const MesProFeedbackTypeEnum = {\r\n SELF: 1, // 自行报工\r\n UNIFIED: 2, // 统一报工\r\n} as const;\r\n\r\n/** MES 杂项出库单状态枚举 */\r\nexport const MesWmMiscIssueStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 杂项入库单状态枚举 */\r\nexport const MesWmMiscReceiptStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 外协发料单状态枚举 */\r\nexport const MesWmOutsourceIssueStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELLED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 外协入库单状态枚举 */\r\nexport const MesWmOutsourceReceiptStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 转移单类型枚举 */\r\nexport const MesWmTransferTypeEnum = {\r\n INNER: 1, // 内部调拨\r\n OUTER: 2, // 外部调拨\r\n} as const;\r\n\r\n/** MES 转移单状态枚举 */\r\nexport const MesWmTransferStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT, // 草稿\r\n UNCONFIRMED: MesOrderStatusConstants.CONFIRMED, // 待确认\r\n APPROVING: MesOrderStatusConstants.APPROVING, // 待上架\r\n APPROVED: MesOrderStatusConstants.APPROVED, // 待执行\r\n FINISHED: MesOrderStatusConstants.FINISHED, // 已完成\r\n CANCELED: MesOrderStatusConstants.CANCELLED, // 已取消\r\n} as const;\r\n\r\n/** MES 到货通知单状态枚举 */\r\nexport const MesWmArrivalNoticeStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n PENDING_QC: MesOrderStatusConstants.APPROVING,\r\n PENDING_RECEIPT: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n} as const;\r\n\r\n/** MES 采购入库单状态枚举 */\r\nexport const MesWmItemReceiptStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 供应商退货单状态枚举 */\r\nexport const MesWmReturnVendorStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 发货通知单状态枚举 */\r\nexport const MesWmSalesNoticeStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n} as const;\r\n\r\n/** MES 发货通知单出库状态枚举 */\r\nexport const MesWmSalesNoticeOutStatusEnum = {\r\n NONE: 0,\r\n PARTIAL: 1,\r\n ALL: 2,\r\n} as const;\r\n\r\n/** MES 销售退货单状态枚举 */\r\nexport const MesWmReturnSalesStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n CONFIRMED: MesOrderStatusConstants.CONFIRMED,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 生产退料单状态枚举 */\r\nexport const MesWmReturnIssueStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n CONFIRMED: MesOrderStatusConstants.CONFIRMED,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 领料出库单状态枚举 */\r\nexport const MesWmProductIssueStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 产品入库单状态枚举 */\r\nexport const MesWmProductReceiptStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 生产入库单状态枚举 */\r\nexport const MesWmProductProduceStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 销售出库单状态枚举 */\r\nexport const MesWmProductSalesStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n CONFIRMED: MesOrderStatusConstants.CONFIRMED,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n SHIPPING: 10, // 待填写运单\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 仓库常量 */\r\nexport const MesWmWarehouseConstants = {\r\n /** 虚拟线边仓编码关键字(对应后端 MesWmWarehouseDO.WIP_VIRTUAL_WAREHOUSE) */\r\n WIP_VIRTUAL: 'WIP_VIRTUAL',\r\n} as const;\r\n\r\n/** MES 质检结果值类型枚举 */\r\nexport const MesQcResultValueType = {\r\n FLOAT: 1,\r\n INTEGER: 2,\r\n TEXT: 3,\r\n DICT: 4,\r\n FILE: 5,\r\n} as const;\r\n\r\n/** MES 质检指标条目类型枚举(对齐后端 MesQcIndicatorItemTypeEnum) */\r\nexport const MesQcIndicatorItemType = {\r\n ENTRY: 1,\r\n GROUP: 2,\r\n} as const;\r\n\r\n/** MES 业务类型常量 */\r\nexport const MesBizTypeEnum = {\r\n // WM 仓库模块 [100, 200)\r\n WM_ARRIVAL_NOTICE: 100, // 到货通知单\r\n WM_RETURN_ISSUE: 116, // 生产退料\r\n WM_PRODUCT_SALES: 118, // 销售出库\r\n WM_RETURN_SALES: 119, // 销售退货入库\r\n WM_OUTSOURCE_RECPT: 121, // 外协入库\r\n\r\n // PRO 生产模块 [300, 400)\r\n PRO_FEEDBACK: 304, // 生产报工\r\n} as const;\r\n\r\n/** MES 质检来源单据类型枚举 */\r\nexport const MesQcSourceDocTypeEnum = {\r\n // IQC\r\n ARRIVAL_NOTICE: MesBizTypeEnum.WM_ARRIVAL_NOTICE,\r\n OUTSOURCE_RECPT: MesBizTypeEnum.WM_OUTSOURCE_RECPT,\r\n // IPQC\r\n PRO_FEEDBACK: MesBizTypeEnum.PRO_FEEDBACK,\r\n // OQC\r\n PRODUCT_SALES: MesBizTypeEnum.WM_PRODUCT_SALES,\r\n // RQC\r\n RETURN_ISSUE: MesBizTypeEnum.WM_RETURN_ISSUE,\r\n RETURN_SALES: MesBizTypeEnum.WM_RETURN_SALES,\r\n} as const;\r\n\r\n/** MES 质检类型枚举 */\r\nexport const MesQcTypeEnum = {\r\n IQC: 1, // 来料检验\r\n IPQC: 2, // 过程检验\r\n OQC: 3, // 出货检验\r\n RQC: 4, // 退货检验\r\n} as const;\r\n\r\n/** MES 质检检测结果枚举 */\r\nexport const MesQcCheckResultEnum = {\r\n PASS: 1, // 校验通过\r\n FAIL: 2, // 校验不通过\r\n} as const;\r\n\r\n/** MES 质检单状态枚举 */\r\nexport const MesQcStatusEnum = {\r\n DRAFT: MesOrderStatusConstants.DRAFT,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n} as const;\r\n\r\n/** MES 编码规则分段类型枚举 */\r\nexport const MesAutoCodePartTypeEnum = {\r\n INPUT: 1,\r\n DATE: 2,\r\n FIX: 3,\r\n SERIAL: 4,\r\n} as const;\r\n\r\n/** MES 编码规则补齐方式枚举 */\r\nexport const MesAutoCodePaddedMethodEnum = {\r\n LEFT: 1, // 左补齐\r\n RIGHT: 2, // 右补齐\r\n} as const;\r\n\r\n/** MES 产品设计项目状态枚举(线性流转:待发布→待上传→待审核→审批中→待归档→已归档) */\r\nexport const MesPdProjectStatusEnum = {\r\n PENDING_PUBLISH: 0, // 待发布\r\n PENDING_UPLOAD: 1, // 待上传\r\n PENDING_AUDIT: 2, // 待审核\r\n APPROVING: 5, // 审批中\r\n PENDING_ARCHIVE: 3, // 待归档\r\n ARCHIVED: 4, // 已归档\r\n} as const;\r\n\r\n/** MES 产品设计任务状态枚举 */\r\nexport const MesPdTaskStatusEnum = {\r\n PENDING: 0,\r\n ASSIGNED: 1,\r\n IN_PROGRESS: 2,\r\n COMPLETED: 3,\r\n CANCELLED: 4,\r\n} as const;\r\n\r\n/** MES 产品设计图纸审核状态枚举 */\r\nexport const MesPdDrawingReviewStatusEnum = {\r\n PENDING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n REJECTED: 5,\r\n} as const;\r\n\r\n/** MES 产品设计版本变更类型枚举 */\r\nexport const MesPdVersionChangeTypeEnum = {\r\n MAJOR: 1,\r\n MINOR: 2,\r\n PATCH: 3,\r\n} as const;\r\n\r\n/** MES 产品设计资料类型枚举(字典 mes_pd_document_type,后端存储 string 类型) */\r\nexport const MesPdDocumentTypeEnum = {\r\n SCHEME: 'scheme',\r\n DRAWING: 'drawing',\r\n MODEL: 'model',\r\n PRODUCT_DESIGN: 'product_design',\r\n BOM: 'bom',\r\n OTHER: 'other',\r\n} as const;\r\n\r\n/** MES 条码格式枚举 */\r\nexport enum BarcodeFormatEnum {\r\n QR_CODE = 1,\r\n EAN13 = 2,\r\n CODE39 = 3,\r\n UPC_A = 4,\r\n}\r\n\r\n/** 条码格式映射表(枚举值 -> JsBarcode 格式名) */\r\nexport const BARCODE_FORMAT_MAP: Record = {\r\n [BarcodeFormatEnum.QR_CODE]: 'QR_CODE',\r\n [BarcodeFormatEnum.EAN13]: 'EAN13',\r\n [BarcodeFormatEnum.CODE39]: 'CODE39',\r\n [BarcodeFormatEnum.UPC_A]: 'UPC_A',\r\n};\r\n\r\n/** MES 工艺参数类型枚举 */\r\nexport const MesPdParamTypeEnum = {\r\n NUMERIC: 1, // 数值格式\r\n TEXT: 2, // 文本格式\r\n SELECT: 3, // 下拉选项\r\n TIME: 4, // 时间格式\r\n DATE: 5, // 日期格式\r\n} as const;\r\n\r\n/** MES 工艺模板类型枚举 */\r\nexport const MesPdTemplateTypeEnum = {\r\n PRODUCTION: 1, // 生产要求\r\n SELF_CHECK: 2, // 自检要求\r\n PATROL_CHECK: 3, // 巡检要求\r\n} as const;\r\n\r\n/** MES 条码业务类型枚举 */\r\nexport enum BarcodeBizTypeEnum {\r\n WAREHOUSE = 102,\r\n LOCATION = 103,\r\n AREA = 104,\r\n PACKAGE = 105,\r\n STOCK = 106,\r\n BATCH = 107,\r\n SN = 109,\r\n PROCARD = 300,\r\n WORKORDER = 301,\r\n TRANSORDER = 302,\r\n TASK = 303,\r\n MACHINERY = 400,\r\n TOOL = 500,\r\n ITEM = 600,\r\n VENDOR = 601,\r\n WORKSTATION = 602,\r\n WORKSHOP = 603,\r\n USER = 604,\r\n CLIENT = 605,\r\n}\r\n", "after": "/** MES 单据状态常量 */\r\nexport const MesOrderStatusConstants = {\r\n DRAFT: 0,\r\n CONFIRMED: 1,\r\n APPROVING: 2,\r\n APPROVED: 3,\r\n FINISHED: 4,\r\n CANCELLED: 5,\r\n} as const;\r\n\r\n/** MES 物料/产品标识枚举 */\r\nexport const MesItemOrProductEnum = {\r\n ITEM: {\r\n label: '物料',\r\n value: 'ITEM',\r\n },\r\n PRODUCT: {\r\n label: '产品',\r\n value: 'PRODUCT',\r\n },\r\n} as const;\r\n\r\n/** MES 工具状态枚举 */\r\nexport const MesToolStatusEnum = {\r\n STORE: 1,\r\n ISSUE: 2,\r\n REPAIR: 3,\r\n SCRAP: 4,\r\n} as const;\r\n\r\n/** MES 保养维护类型枚举 */\r\nexport const MesMaintenTypeEnum = {\r\n REGULAR: 1,\r\n USAGE: 2,\r\n} as const;\r\n\r\n/** MES 设备状态枚举 */\r\nexport const MesDvMachineryStatusEnum = {\r\n STOP: 1,\r\n PRODUCING: 2,\r\n MAINTENANCE: 3,\r\n} as const;\r\n\r\n/** MES 假期类型枚举 */\r\nexport const HolidayType = {\r\n WORKDAY: 1,\r\n HOLIDAY: 2,\r\n} as const;\r\n\r\n/** MES 排班计划状态枚举 */\r\nexport const MesCalPlanStatusEnum = {\r\n PREPARE: 0,\r\n CONFIRMED: 1,\r\n} as const;\r\n\r\n/** MES 轮班方式枚举 */\r\nexport const MesCalShiftTypeEnum = {\r\n SINGLE: 1,\r\n TWO: 2,\r\n THREE: 3,\r\n} as const;\r\n\r\n/** MES 倒班方式枚举 */\r\nexport const MesCalShiftMethodEnum = {\r\n QUARTER: 1,\r\n MONTH: 2,\r\n WEEK: 3,\r\n DAY: 4,\r\n} as const;\r\n\r\n/** MES 点检保养项目类型枚举 */\r\nexport const MesDvSubjectTypeEnum = {\r\n CHECK: 1,\r\n MAINTENANCE: 2,\r\n} as const;\r\n\r\n/** MES 点检保养方案状态枚举 */\r\nexport const MesDvCheckPlanStatusEnum = {\r\n PREPARE: 0,\r\n ENABLED: 1,\r\n} as const;\r\n\r\n/** MES 设备保养记录状态枚举 */\r\nexport const MesDvMaintenRecordStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n SUBMITTED: MesOrderStatusConstants.FINISHED,\r\n} as const;\r\n\r\n/** MES 设备保养明细结果枚举 */\r\nexport const MesDvMaintenStatusEnum = {\r\n NORMAL: 1,\r\n ABNORMAL: 2,\r\n} as const;\r\n\r\n/** MES 设备点检记录状态枚举 */\r\nexport const MesDvCheckRecordStatusEnum = {\r\n DRAFT: 10,\r\n FINISHED: 20,\r\n} as const;\r\n\r\n/** MES 设备点检结果枚举 */\r\nexport const MesDvCheckResultEnum = {\r\n NORMAL: 1,\r\n ABNORMAL: 2,\r\n} as const;\r\n\r\n/** MES 计量器具状态枚举 */\r\nexport const MesDvMeteringStatusEnum = {\r\n IN_USE: 1, // 在用\r\n STOPPED: 2, // 停用\r\n SCRAPPED: 3, // 报废\r\n} as const;\r\n\r\n/** MES 计量检测结论枚举 */\r\nexport const MesDvMeteringCheckResultEnum = {\r\n QUALIFIED: 1, // 合格\r\n UNQUALIFIED: 2, // 不合格\r\n} as const;\r\n\r\n/** MES 计量器具到期状态枚举 */\r\nexport const MesDvMeteringExpireStatusEnum = {\r\n OVERDUE: 1, // 已过期\r\n WITHIN: 2, // 即将到期\r\n NORMAL: 3, // 正常\r\n} as const;\r\n\r\n/** MES 维修工单状态枚举 */\r\nexport const MesDvRepairStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n CONFIRMED: MesOrderStatusConstants.CONFIRMED,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n} as const;\r\n\r\n/** MES 维修结果枚举 */\r\nexport const MesDvRepairResultEnum = {\r\n PASS: 1,\r\n FAIL: 2,\r\n} as const;\r\n\r\n/** MES 自动编码规则 Code 枚举 */\r\nexport const MesAutoCodeRuleCode = {\r\n CAL_PLAN_CODE: 'CAL_PLAN_CODE',\r\n CAL_TEAM_CODE: 'CAL_TEAM_CODE',\r\n DV_CHECK_PLAN_CODE: 'DV_CHECK_PLAN_CODE',\r\n DV_MACHINERY_TYPE_CODE: 'DV_MACHINERY_TYPE_CODE',\r\n DV_MACHINERY_CODE: 'DV_MACHINERY_CODE',\r\n DV_REPAIR_CODE: 'DV_REPAIR_CODE',\r\n DV_SUBJECT_CODE: 'DV_SUBJECT_CODE',\r\n MD_ITEM_TYPE_CODE: 'MD_ITEM_TYPE_CODE',\r\n MD_ITEM_CODE: 'MD_ITEM_CODE',\r\n MD_VENDOR_CODE: 'MD_VENDOR_CODE',\r\n MD_WORKSTATION_CODE: 'MD_WORKSTATION_CODE',\r\n MD_WORKSHOP_CODE: 'MD_WORKSHOP_CODE',\r\n PD_PROJECT_CODE: 'PD_PROJECT_CODE',\r\n PD_TASK_CODE: 'PD_TASK_CODE',\r\n PD_VERSION_CODE: 'PD_VERSION_CODE',\r\n PD_DOCUMENT_AUDIT_CODE: 'PD_DOCUMENT_AUDIT_CODE',\r\n PD_ARCHIVE_CODE: 'PD_ARCHIVE_CODE',\r\n PRO_CARD_CODE: 'PRO_CARD_CODE',\r\n PRO_FEEDBACK_CODE: 'PRO_FEEDBACK_CODE',\r\n PRO_PROCESS_CODE: 'PRO_PROCESS_CODE',\r\n PRO_ROUTE_CODE: 'PRO_ROUTE_CODE',\r\n PRO_TASK_CODE: 'PRO_TASK_CODE',\r\n PRO_WORK_ORDER_CODE: 'PRO_WORK_ORDER_CODE',\r\n QC_DEFECT_CODE: 'QC_DEFECT_CODE',\r\n QC_INDICATOR_CODE: 'QC_INDICATOR_CODE',\r\n QC_INDICATOR_RESULT_CODE: 'QC_INDICATOR_RESULT_CODE',\r\n QC_IQC_CODE: 'QC_IQC_CODE',\r\n QC_IPQC_CODE: 'QC_IPQC_CODE',\r\n QC_OQC_CODE: 'QC_OQC_CODE',\r\n QC_RQC_CODE: 'QC_RQC_CODE',\r\n QC_TEMPLATE_CODE: 'QC_TEMPLATE_CODE',\r\n TM_TOOL_TYPE_CODE: 'TM_TOOL_TYPE_CODE',\r\n TM_TOOL_CODE: 'TM_TOOL_CODE',\r\n WM_AREA_CODE: 'WM_AREA_CODE',\r\n WM_LOCATION_CODE: 'WM_LOCATION_CODE',\r\n WM_ARRIVAL_NOTICE_CODE: 'WM_ARRIVAL_NOTICE_CODE',\r\n WM_ITEM_RECEIPT_CODE: 'WM_ITEM_RECEIPT_CODE',\r\n WM_RETURN_VENDOR_CODE: 'WM_RETURN_VENDOR_CODE',\r\n WM_SALES_NOTICE_CODE: 'WM_SALES_NOTICE_CODE',\r\n WM_RETURN_SALES_CODE: 'WM_RETURN_SALES_CODE',\r\n WM_RETURN_ISSUE_CODE: 'WM_RETURN_ISSUE_CODE',\r\n WM_PRODUCT_ISSUE_CODE: 'WM_PRODUCT_ISSUE_CODE',\r\n WM_PRODUCT_SALES_CODE: 'WM_PRODUCT_SALES_CODE',\r\n PRODUCTRECPT_CODE: 'PRODUCTRECPT_CODE',\r\n WM_MISC_ISSUE_CODE: 'WM_MISC_ISSUE_CODE',\r\n WM_MISC_RECEIPT_CODE: 'WM_MISC_RECEIPT_CODE',\r\n WM_OUTSOURCE_ISSUE_CODE: 'WM_OUTSOURCE_ISSUE_CODE',\r\n WM_OUTSOURCE_RECEIPT_CODE: 'WM_OUTSOURCE_RECEIPT_CODE',\r\n WM_PACKAGE_CODE: 'WM_PACKAGE_CODE',\r\n WM_SN_CODE: 'WM_SN_CODE',\r\n WM_BATCH_CODE: 'WM_BATCH_CODE',\r\n WM_STOCK_TAKING_CODE: 'WM_STOCK_TAKING_CODE',\r\n WM_STOCK_TAKING_PLAN_CODE: 'WM_STOCK_TAKING_PLAN_CODE',\r\n WM_WAREHOUSE_CODE: 'WM_WAREHOUSE_CODE',\r\n TRANSFER_CODE: 'TRANSFER_CODE',\r\n} as const;\r\n\r\n/** MES 装箱单状态枚举 */\r\nexport const MesWmPackageStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n} as const;\r\n\r\n/** MES 盘点类型枚举 */\r\nexport const MesWmStockTakingTypeEnum = {\r\n STATIC: 1,\r\n DYNAMIC: 2,\r\n} as const;\r\n\r\n/** MES 盘点任务状态枚举 */\r\nexport const MesWmStockTakingTaskStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 盘点任务行状态枚举 */\r\nexport const MesWmStockTakingTaskLineStatusEnum = {\r\n UNCOUNTED: 0,\r\n NORMAL: 1,\r\n GAIN: 2,\r\n LOSS: 3,\r\n} as const;\r\n\r\n/** MES 盘点方案参数类型枚举 */\r\nexport const MesWmStockTakingParamTypeEnum = {\r\n WAREHOUSE: 102,\r\n LOCATION: 103,\r\n AREA: 104,\r\n BATCH: 107,\r\n ITEM: 600,\r\n QUALITY_STATUS: 900,\r\n} as const;\r\n\r\n/** MES 生产工单状态枚举(独立于通用单据状态,对齐后端 MesProWorkOrderStatusEnum) */\r\nexport const MesProWorkOrderStatusEnum = {\r\n PREPARE: 0, // 草稿\r\n CONFIRMED: 1, // 已确认\r\n FINISHED: 2, // 已完成\r\n CANCELED: 3, // 已取消\r\n} as const;\r\n\r\n/** MES 生产工单生产状态枚举(对齐后端 MesProWorkOrderProductionStatusEnum) */\r\nexport const MesProWorkOrderProductionStatusEnum = {\r\n WAITING: 0, // 待生产\r\n PRODUCING: 1, // 生产中\r\n FINISHED: 2, // 生产完成\r\n} as const;\r\n\r\n/** MES 工单类型枚举 */\r\nexport const MesProWorkOrderTypeEnum = {\r\n SELF: 1, // 自行生产\r\n OUTSOURCE: 2, // 代工\r\n PURCHASE: 3, // 采购\r\n} as const;\r\n\r\n/** MES 工单来源类型枚举 */\r\nexport const MesProWorkOrderSourceTypeEnum = {\r\n ORDER: 1, // 客户订单\r\n STORE: 2, // 库存备货\r\n} as const;\r\n\r\n/** MES 生产任务状态枚举 */\r\nexport const MesProTaskStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n CONFIRMED: MesOrderStatusConstants.CONFIRMED,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n PRODUCING: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELLED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 生产报工状态枚举 */\r\nexport const MesProFeedbackStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n UNCHECK: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 流转卡状态枚举(复用工单状态值,对齐后端 MesProWorkOrderStatusEnum) */\r\nexport const MesProCardStatusEnum = {\r\n PREPARE: 0, // 草稿\r\n CONFIRMED: 1, // 已确认\r\n FINISHED: 2, // 已完成\r\n CANCELED: 3, // 已取消\r\n} as const;\r\n\r\n/** MES 安灯处置状态枚举 */\r\nexport const MesProAndonStatusEnum = {\r\n ACTIVE: 0, // 未处置\r\n HANDLED: 1, // 已处置\r\n} as const;\r\n\r\n/** MES 安灯级别枚举 */\r\nexport const MesProAndonLevelEnum = {\r\n LEVEL1: 1,\r\n LEVEL2: 2,\r\n LEVEL3: 3,\r\n} as const;\r\n\r\n/** MES 上下工状态类型枚举 */\r\nexport const MesProWorkRecordTypeEnum = {\r\n CLOCK_IN: 1,\r\n CLOCK_OUT: 2,\r\n} as const;\r\n\r\n/** MES 生产报工类型枚举 */\r\nexport const MesProFeedbackTypeEnum = {\r\n SELF: 1, // 自行报工\r\n UNIFIED: 2, // 统一报工\r\n} as const;\r\n\r\n/** MES 杂项出库单状态枚举 */\r\nexport const MesWmMiscIssueStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 杂项入库单状态枚举 */\r\nexport const MesWmMiscReceiptStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 外协发料单状态枚举 */\r\nexport const MesWmOutsourceIssueStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELLED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 外协入库单状态枚举 */\r\nexport const MesWmOutsourceReceiptStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 转移单类型枚举 */\r\nexport const MesWmTransferTypeEnum = {\r\n INNER: 1, // 内部调拨\r\n OUTER: 2, // 外部调拨\r\n} as const;\r\n\r\n/** MES 转移单状态枚举 */\r\nexport const MesWmTransferStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT, // 草稿\r\n UNCONFIRMED: MesOrderStatusConstants.CONFIRMED, // 待确认\r\n APPROVING: MesOrderStatusConstants.APPROVING, // 待上架\r\n APPROVED: MesOrderStatusConstants.APPROVED, // 待执行\r\n FINISHED: MesOrderStatusConstants.FINISHED, // 已完成\r\n CANCELED: MesOrderStatusConstants.CANCELLED, // 已取消\r\n} as const;\r\n\r\n/** MES 到货通知单状态枚举 */\r\nexport const MesWmArrivalNoticeStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n PENDING_QC: MesOrderStatusConstants.APPROVING,\r\n PENDING_RECEIPT: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n} as const;\r\n\r\n/** MES 采购入库单状态枚举 */\r\nexport const MesWmItemReceiptStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 供应商退货单状态枚举 */\r\nexport const MesWmReturnVendorStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 发货通知单状态枚举 */\r\nexport const MesWmSalesNoticeStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n} as const;\r\n\r\n/** MES 发货通知单出库状态枚举 */\r\nexport const MesWmSalesNoticeOutStatusEnum = {\r\n NONE: 0,\r\n PARTIAL: 1,\r\n ALL: 2,\r\n} as const;\r\n\r\n/** MES 销售退货单状态枚举 */\r\nexport const MesWmReturnSalesStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n CONFIRMED: MesOrderStatusConstants.CONFIRMED,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 生产退料单状态枚举 */\r\nexport const MesWmReturnIssueStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n CONFIRMED: MesOrderStatusConstants.CONFIRMED,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 领料出库单状态枚举 */\r\nexport const MesWmProductIssueStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 产品入库单状态枚举 */\r\nexport const MesWmProductReceiptStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 生产入库单状态枚举 */\r\nexport const MesWmProductProduceStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 销售出库单状态枚举 */\r\nexport const MesWmProductSalesStatusEnum = {\r\n PREPARE: MesOrderStatusConstants.DRAFT,\r\n CONFIRMED: MesOrderStatusConstants.CONFIRMED,\r\n APPROVING: MesOrderStatusConstants.APPROVING,\r\n SHIPPING: 10, // 待填写运单\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n CANCELED: MesOrderStatusConstants.CANCELLED,\r\n} as const;\r\n\r\n/** MES 仓库常量 */\r\nexport const MesWmWarehouseConstants = {\r\n /** 虚拟线边仓编码关键字(对应后端 MesWmWarehouseDO.WIP_VIRTUAL_WAREHOUSE) */\r\n WIP_VIRTUAL: 'WIP_VIRTUAL',\r\n} as const;\r\n\r\n/** MES 质检结果值类型枚举 */\r\nexport const MesQcResultValueType = {\r\n FLOAT: 1,\r\n INTEGER: 2,\r\n TEXT: 3,\r\n DICT: 4,\r\n FILE: 5,\r\n} as const;\r\n\r\n/** MES 质检指标条目类型枚举(对齐后端 MesQcIndicatorItemTypeEnum) */\r\nexport const MesQcIndicatorItemType = {\r\n ENTRY: 1,\r\n GROUP: 2,\r\n} as const;\r\n\r\n/** MES 业务类型常量 */\r\nexport const MesBizTypeEnum = {\r\n // WM 仓库模块 [100, 200)\r\n WM_ARRIVAL_NOTICE: 100, // 到货通知单\r\n WM_RETURN_ISSUE: 116, // 生产退料\r\n WM_PRODUCT_SALES: 118, // 销售出库\r\n WM_RETURN_SALES: 119, // 销售退货入库\r\n WM_OUTSOURCE_RECPT: 121, // 外协入库\r\n\r\n // PRO 生产模块 [300, 400)\r\n PRO_FEEDBACK: 304, // 生产报工\r\n} as const;\r\n\r\n/** MES 质检来源单据类型枚举 */\r\nexport const MesQcSourceDocTypeEnum = {\r\n // IQC\r\n ARRIVAL_NOTICE: MesBizTypeEnum.WM_ARRIVAL_NOTICE,\r\n OUTSOURCE_RECPT: MesBizTypeEnum.WM_OUTSOURCE_RECPT,\r\n // IPQC\r\n PRO_FEEDBACK: MesBizTypeEnum.PRO_FEEDBACK,\r\n // OQC\r\n PRODUCT_SALES: MesBizTypeEnum.WM_PRODUCT_SALES,\r\n // RQC\r\n RETURN_ISSUE: MesBizTypeEnum.WM_RETURN_ISSUE,\r\n RETURN_SALES: MesBizTypeEnum.WM_RETURN_SALES,\r\n} as const;\r\n\r\n/** MES 质检类型枚举 */\r\nexport const MesQcTypeEnum = {\r\n IQC: 1, // 来料检验\r\n IPQC: 2, // 过程检验\r\n OQC: 3, // 出货检验\r\n RQC: 4, // 退货检验\r\n} as const;\r\n\r\n/** MES 质检检测结果枚举 */\r\nexport const MesQcCheckResultEnum = {\r\n PASS: 1, // 校验通过\r\n FAIL: 2, // 校验不通过\r\n} as const;\r\n\r\n/** MES 质检单状态枚举 */\r\nexport const MesQcStatusEnum = {\r\n DRAFT: MesOrderStatusConstants.DRAFT,\r\n FINISHED: MesOrderStatusConstants.FINISHED,\r\n} as const;\r\n\r\n/** MES 编码规则分段类型枚举 */\r\nexport const MesAutoCodePartTypeEnum = {\r\n INPUT: 1,\r\n DATE: 2,\r\n FIX: 3,\r\n SERIAL: 4,\r\n} as const;\r\n\r\n/** MES 编码规则补齐方式枚举 */\r\nexport const MesAutoCodePaddedMethodEnum = {\r\n LEFT: 1, // 左补齐\r\n RIGHT: 2, // 右补齐\r\n} as const;\r\n\r\n/** MES 产品设计项目状态枚举(线性流转:待发布→待上传→待审核→审批中→待归档→已归档) */\r\nexport const MesPdProjectStatusEnum = {\r\n PENDING_PUBLISH: 0, // 待发布\r\n PENDING_UPLOAD: 1, // 待上传\r\n PENDING_AUDIT: 2, // 待审核\r\n APPROVING: 5, // 审批中\r\n PENDING_ARCHIVE: 3, // 待归档\r\n ARCHIVED: 4, // 已归档\r\n} as const;\r\n\r\n/** MES 产品设计任务状态枚举 */\r\nexport const MesPdTaskStatusEnum = {\r\n PENDING: 0,\r\n ASSIGNED: 1,\r\n IN_PROGRESS: 2,\r\n COMPLETED: 3,\r\n CANCELLED: 4,\r\n} as const;\r\n\r\n/** MES 产品设计图纸审核状态枚举 */\r\nexport const MesPdDrawingReviewStatusEnum = {\r\n PENDING: MesOrderStatusConstants.APPROVING,\r\n APPROVED: MesOrderStatusConstants.APPROVED,\r\n REJECTED: 5,\r\n} as const;\r\n\r\n/** MES 产品设计版本变更类型枚举 */\r\nexport const MesPdVersionChangeTypeEnum = {\r\n MAJOR: 1,\r\n MINOR: 2,\r\n PATCH: 3,\r\n} as const;\r\n\r\n/** MES 产品设计资料类型枚举(字典 mes_pd_document_type,后端存储 string 类型) */\r\nexport const MesPdDocumentTypeEnum = {\r\n SCHEME: 'scheme',\r\n DRAWING: 'drawing',\r\n MODEL: 'model',\r\n PRODUCT_DESIGN: 'product_design',\r\n BOM: 'bom',\r\n OTHER: 'other',\r\n} as const;\r\n\r\n/** MES 条码格式枚举 */\r\nexport enum BarcodeFormatEnum {\r\n QR_CODE = 1,\r\n EAN13 = 2,\r\n CODE39 = 3,\r\n UPC_A = 4,\r\n}\r\n\r\n/** 条码格式映射表(枚举值 -> JsBarcode 格式名) */\r\nexport const BARCODE_FORMAT_MAP: Record = {\r\n [BarcodeFormatEnum.QR_CODE]: 'QR_CODE',\r\n [BarcodeFormatEnum.EAN13]: 'EAN13',\r\n [BarcodeFormatEnum.CODE39]: 'CODE39',\r\n [BarcodeFormatEnum.UPC_A]: 'UPC_A',\r\n};\r\n\r\n/** MES 工艺参数类型枚举 */\r\nexport const MesPdParamTypeEnum = {\r\n NUMERIC: 1, // 数值格式\r\n TEXT: 2, // 文本格式\r\n SELECT: 3, // 下拉选项\r\n TIME: 4, // 时间格式\r\n DATE: 5, // 日期格式\r\n} as const;\r\n\r\n/** MES 工艺模板类型枚举 */\r\nexport const MesPdTemplateTypeEnum = {\r\n PRODUCTION: 1, // 生产要求\r\n SELF_CHECK: 2, // 自检要求\r\n PATROL_CHECK: 3, // 巡检要求\r\n} as const;\r\n\r\n/** MES 条码业务类型枚举 */\r\nexport enum BarcodeBizTypeEnum {\r\n WAREHOUSE = 102,\r\n LOCATION = 103,\r\n AREA = 104,\r\n PACKAGE = 105,\r\n STOCK = 106,\r\n BATCH = 107,\r\n SN = 109,\r\n PROCARD = 300,\r\n WORKORDER = 301,\r\n TRANSORDER = 302,\r\n TASK = 303,\r\n MACHINERY = 400,\r\n TOOL = 500,\r\n ITEM = 600,\r\n VENDOR = 601,\r\n WORKSTATION = 602,\r\n WORKSHOP = 603,\r\n USER = 604,\r\n CLIENT = 605,\r\n}\r\n" }, { "file": "mom-pro2-before\\src\\views\\mes\\md\\client\\data.ts", "removed": 2, "before": "import type { VbenFormSchema } from '#/adapter/form';\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\nimport type { MesMdClientApi } from '#/api/mes/md/client';\n\nimport { DICT_TYPE } from '#/packages/constants/src';\n\n/** 客户选择弹窗搜索表单 */\nexport function useClientSelectGridFormSchema(): VbenFormSchema[] {\n return [\n {\n fieldName: 'code',\n label: '客户编码',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入客户编码',\n },\n },\n {\n fieldName: 'name',\n label: '客户名称',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入客户名称',\n },\n },\n {\n fieldName: 'nickname',\n label: '客户简称',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入客户简称',\n },\n },\n {\n fieldName: 'englishName',\n label: '英文名称',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入客户英文名称',\n },\n },\n ];\n}\n\n/** 客户选择弹窗列表字段 */\nexport function useClientSelectGridColumns(\n multiple = true,\n): VxeTableGridOptions['columns'] {\n return [\n { type: multiple ? 'checkbox' : 'radio', width: 50 },\n {\n field: 'code',\n title: '客户编码',\n minWidth: 160,\n },\n {\n field: 'name',\n title: '客户名称',\n minWidth: 160,\n },\n {\n field: 'nickname',\n title: '客户简称',\n width: 120,\n },\n {\n field: 'type',\n title: '客户类型',\n width: 110,\n cellRender: {\n name: 'CellDict',\n props: { type: DICT_TYPE.MES_CLIENT_TYPE },\n },\n },\n {\n field: 'contact1Name',\n title: '联系人',\n width: 120,\n },\n {\n field: 'telephone',\n title: '联系电话',\n width: 140,\n },\n {\n field: 'contact1Telephone',\n title: '联系人电话',\n width: 140,\n },\n {\n field: 'status',\n title: '状态',\n width: 100,\n cellRender: {\n name: 'CellDict',\n props: { type: DICT_TYPE.COMMON_STATUS },\n },\n },\n ];\n}\n", "after": "import type { VbenFormSchema } from '#/adapter/form';\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\nimport type { MesMdClientApi } from '#/api/mes/md/client';\n\nimport { DICT_TYPE } from '#/packages/constants/src';\n\n/** 客户选择弹窗搜索表单 */\nexport function useClientSelectGridFormSchema(): VbenFormSchema[] {\n return [\n {\n fieldName: 'name',\n label: '客户名称',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入客户名称',\n },\n },\n {\n fieldName: 'nickname',\n label: '客户简称',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入客户简称',\n },\n },\n {\n fieldName: 'englishName',\n label: '英文名称',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入客户英文名称',\n },\n },\n ];\n}\n\n/** 客户选择弹窗列表字段 */\nexport function useClientSelectGridColumns(\n multiple = true,\n): VxeTableGridOptions['columns'] {\n return [\n { type: multiple ? 'checkbox' : 'radio', width: 50 },\n {\n field: 'name',\n title: '客户名称',\n minWidth: 160,\n },\n {\n field: 'nickname',\n title: '客户简称',\n width: 120,\n },\n {\n field: 'type',\n title: '客户类型',\n width: 110,\n cellRender: {\n name: 'CellDict',\n props: { type: DICT_TYPE.MES_CLIENT_TYPE },\n },\n },\n {\n field: 'contact1Name',\n title: '联系人',\n width: 120,\n },\n {\n field: 'telephone',\n title: '联系电话',\n width: 140,\n },\n {\n field: 'contact1Telephone',\n title: '联系人电话',\n width: 140,\n },\n {\n field: 'status',\n title: '状态',\n width: 100,\n cellRender: {\n name: 'CellDict',\n props: { type: DICT_TYPE.COMMON_STATUS },\n },\n },\n ];\n}\n" }, { "file": "mom-pro2-before\\src\\views\\mes\\pro\\task\\data.ts", "removed": 1, "before": "import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';\r\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\r\nimport { z } from '#/adapter/form';\r\nimport { getSimpleUserListByRoleCode } from '#/api/system/user';\r\nimport { getTemplatePage } from '#/api/mes/pro/processdesign/template';\r\nimport { getUserListByWorkstationId } from '#/api/mes/md/workstation/worker';\r\nimport type { MesProTaskApi } from '#/api/mes/pro/task';\r\nimport type { MesProWorkOrderApi } from '#/api/mes/pro/workorder';\r\n\r\nimport type { Ref } from 'vue';\r\n\r\nimport { markRaw } from 'vue';\r\n\r\nimport { DICT_TYPE } from '@vben/constants';\r\nimport { getDictOptions } from '@vben/hooks';\r\n\r\nimport { message } from 'ant-design-vue';\r\n\r\nimport CrmCustomerSelect from '#/components/crm-customer-select.vue';\r\nimport { calculateTaskDuration } from '#/api/mes/pro/task';\r\nimport { getRangePickerDefaultProps } from '#/utils';\r\nimport { MdItemSelect } from '#/views/mes/md/item/components';\r\nimport { MdWorkstationSelect } from '#/views/mes/md/workstation/components';\r\nimport { ProProcessSelect } from '#/views/mes/process-design/process/components';\r\nimport { RouteColorPicker } from '#/views/mes/process-design/route/components';\r\nimport { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';\r\n\r\n/** 待排产订单列表的搜索表单 */\r\nexport function useGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '订单编码',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入订单编码',\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '订单名称',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入订单名称',\r\n },\r\n },\r\n {\r\n fieldName: 'orderSourceCode',\r\n label: '来源单据',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入来源单据编号',\r\n },\r\n },\r\n {\r\n fieldName: 'productId',\r\n label: '产品',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n placeholder: '请选择产品',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'requestDate',\r\n label: '需求日期',\r\n component: 'RangePicker',\r\n componentProps: {\r\n ...getRangePickerDefaultProps(),\r\n allowClear: true,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 待排产订单列表的字段 */\r\nexport function useGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n { type: 'checkbox', width: 48, fixed: 'left' },\r\n {\r\n field: 'code',\r\n title: '订单编码',\r\n fixed: 'left',\r\n width: 200,\r\n treeNode: true,\r\n slots: { default: 'code' },\r\n },\r\n {\r\n field: 'name',\r\n title: '订单名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'orderSourceType',\r\n title: '订单来源',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_SOURCE_TYPE },\r\n },\r\n },\r\n {\r\n field: 'orderSourceCode',\r\n title: '来源单据编号',\r\n width: 140,\r\n },\r\n {\r\n field: 'productCode',\r\n title: '产品编码',\r\n width: 120,\r\n },\r\n {\r\n field: 'productName',\r\n title: '产品名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'productSpecification',\r\n title: '规格型号',\r\n width: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'status',\r\n title: '订单状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_STATUS },\r\n },\r\n },\r\n {\r\n field: 'productionStatus',\r\n title: '生产状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.ORDER_PRODUCTION_STATUS },\r\n },\r\n },\r\n {\r\n field: 'quantity',\r\n title: '订单数量',\r\n width: 100,\r\n },\r\n // {\r\n // field: 'quantityChanged',\r\n // title: '调整数量',\r\n // width: 100,\r\n // },\r\n {\r\n field: 'quantityProduced',\r\n title: '已生产数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'progressPercent',\r\n title: '完成进度',\r\n width: 150,\r\n slots: { default: 'progressPercent' },\r\n },\r\n {\r\n field: 'clientCode',\r\n title: '客户编码',\r\n width: 120,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n width: 120,\r\n },\r\n {\r\n field: 'requestDate',\r\n title: '需求日期',\r\n width: 120,\r\n formatter: 'formatDate',\r\n },\r\n\r\n {\r\n title: '操作',\r\n width: 240,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 排产对话框只读订单信息的表单 */\r\nexport function useScheduleFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '订单编码',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '订单名称',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'orderSourceType',\r\n label: '订单来源',\r\n component: 'Select',\r\n componentProps: {\r\n disabled: true,\r\n options: getDictOptions(\r\n DICT_TYPE.MES_PRO_WORK_ORDER_SOURCE_TYPE,\r\n 'number',\r\n ),\r\n },\r\n },\r\n {\r\n fieldName: 'orderSourceCode',\r\n label: '来源单据编号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'type',\r\n label: '订单类型',\r\n component: 'Select',\r\n componentProps: {\r\n disabled: true,\r\n options: getDictOptions(DICT_TYPE.MES_PRO_WORK_ORDER_TYPE, 'number'),\r\n },\r\n },\r\n {\r\n fieldName: 'productId',\r\n label: '产品',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'productSpecification',\r\n label: '规格型号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'unitMeasureName',\r\n label: '单位',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '订单数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n disabled: true,\r\n precision: 2,\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'batchCode',\r\n label: '批次号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'requestDate',\r\n label: '需求日期',\r\n component: 'DatePicker',\r\n componentProps: {\r\n class: '!w-full',\r\n disabled: true,\r\n format: 'YYYY-MM-DD',\r\n valueFormat: 'YYYY-MM-DD',\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n label: '订单状态',\r\n component: 'Select',\r\n componentProps: {\r\n disabled: true,\r\n options: getDictOptions(DICT_TYPE.MES_PRO_WORK_ORDER_STATUS, 'number'),\r\n },\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n disabled: true,\r\n rows: 2,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 生产任务子表的字段 */\r\nexport function useTaskGridColumns(\r\n editable: boolean,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '任务编码',\r\n width: 140,\r\n },\r\n {\r\n field: 'name',\r\n title: '任务名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'workstationCode',\r\n title: '工作站编号',\r\n width: 120,\r\n },\r\n {\r\n field: 'workstationName',\r\n title: '工作站名称',\r\n width: 120,\r\n },\r\n {\r\n field: 'paramTemplateId',\r\n title: '工艺参数模板',\r\n minWidth: 140,\r\n formatter: ({ cellValue }) => cellValue ? `模板 #${cellValue}` : '未配置',\r\n },\r\n {\r\n field: 'quantity',\r\n title: '排产数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'producedQuantity',\r\n title: '已生产数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'startTime',\r\n title: '开始生产时间',\r\n width: 170,\r\n formatter: 'formatDateTime',\r\n },\r\n {\r\n field: 'duration',\r\n title: '生产时长(h)',\r\n width: 120,\r\n },\r\n {\r\n field: 'endTime',\r\n title: '预计完成时间',\r\n width: 170,\r\n formatter: 'formatDateTime',\r\n },\r\n {\r\n field: 'colorCode',\r\n title: '显示颜色',\r\n width: 100,\r\n slots: { default: 'colorCode' },\r\n },\r\n ...(editable\r\n ? [\r\n {\r\n title: '操作',\r\n width: 160,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n } as const,\r\n ]\r\n : []),\r\n ];\r\n}\r\n\r\n/** 生产任务新增/修改的表单 */\r\nexport function useTaskFormSchema(formApi?: VbenFormApi, workOrderQuantity?: Ref): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'paramTemplateId',\r\n label: '工艺参数模板',\r\n component: 'ApiSelect',\r\n componentProps: {\r\n api: () => getTemplatePage({ pageNo: 1, pageSize: 100 }),\r\n labelField: 'templateName',\r\n valueField: 'id',\r\n resultField: 'list',\r\n allowClear: true,\r\n placeholder: '请选择工艺参数模板',\r\n },\r\n },\r\n {\r\n fieldName: 'workstationId',\r\n label: '工作站',\r\n component: markRaw(MdWorkstationSelect),\r\n componentProps: {\r\n placeholder: '请选择工作站',\r\n onChange: () => recalcDuration(formApi),\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '排产数量',\r\n component: 'InputNumber',\r\n description: () => workOrderQuantity?.value != null ? `订单数量:${workOrderQuantity.value}` : '',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0.01,\r\n placeholder: '请输入排产数量',\r\n precision: 2,\r\n onChange: () => recalcDuration(formApi),\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'colorCode',\r\n label: '甘特颜色',\r\n component: markRaw(RouteColorPicker),\r\n },\r\n {\r\n fieldName: 'startTime',\r\n label: '开始时间',\r\n component: 'DatePicker',\r\n componentProps: {\r\n class: '!w-full',\r\n placeholder: '请先选择工作站',\r\n showTime: true,\r\n valueFormat: 'YYYY-MM-DD HH:mm:ss',\r\n onChange: () => recalcEndTime(formApi),\r\n },\r\n dependencies: {\r\n triggerFields: ['workstationId'],\r\n componentProps: (values) => ({\r\n disabled: !values.workstationId,\r\n placeholder: values.workstationId ? '请选择开始时间' : '请先选择工作站',\r\n }),\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'duration',\r\n label: '生产时长(h)',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 1,\r\n placeholder: '请输入生产时长',\r\n precision: 0,\r\n // 生产时长变更:重新计算结束时间\r\n onChange: () => recalcEndTime(formApi),\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'endTime',\r\n label: '结束时间',\r\n component: 'DatePicker',\r\n componentProps: {\r\n class: '!w-full',\r\n disabled: true,\r\n showTime: true,\r\n valueFormat: 'YYYY-MM-DD HH:mm:ss',\r\n },\r\n },\r\n {\r\n fieldName: 'assigneeUserIds',\r\n label: '报工人',\r\n component: 'ApiSelect',\r\n componentProps: {\r\n placeholder: '请选择报工人',\r\n api: getUserListByWorkstationId,\r\n labelField: 'nickname',\r\n valueField: 'id',\r\n mode: 'multiple',\r\n },\r\n dependencies: {\r\n triggerFields: ['workstationId'],\r\n componentProps: (values) => ({\r\n params: { workstationId: values.workstationId },\r\n disabled: !values.workstationId,\r\n placeholder: values.workstationId ? '请选择报工人' : '请先选择工作站',\r\n }),\r\n },\r\n rules: z.array(z.number()).min(1, '请选择报工人').default([]),\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n placeholder: '请输入备注',\r\n rows: 2,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 选择工作站或修改数量后,自动计算生产时长 */\r\nasync function recalcDuration(formApi?: VbenFormApi) {\r\n if (!formApi) return;\r\n const values = await formApi.getValues();\r\n\r\n if (values.workstationId) {\r\n try {\r\n const users = await getUserListByWorkstationId({ workstationId: values.workstationId });\r\n if (!users || users.length === 0) {\r\n message.warning('当前工作站没有配置人力资源');\r\n }\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n\r\n if (!values.workstationId || !values.quantity) return;\r\n try {\r\n const res = await calculateTaskDuration(values.workstationId, values.quantity);\r\n await formApi.setFieldValue('duration', res.duration);\r\n if (res.duration === 0) {\r\n message.warning('该工作站未绑定设备,或绑定设备未配置生产效率');\r\n }\r\n // 重新计算结束时间\r\n await recalcEndTime(formApi);\r\n } catch {\r\n // 计算失败不阻塞用户操作\r\n }\r\n}\r\n\r\n/** 计算结束时间:开始时间 + 生产时长(小时) */\r\nasync function recalcEndTime(formApi?: VbenFormApi) {\r\n if (!formApi) {\r\n return;\r\n }\r\n const values = await formApi.getValues();\r\n if (values.startTime && values.duration) {\r\n const start = new Date(values.startTime).getTime();\r\n const endTime = start + values.duration * 3600 * 1000;\r\n const pad = (n: number) => String(n).padStart(2, '0');\r\n const d = new Date(endTime);\r\n const formatted = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;\r\n await formApi.setFieldValue('endTime', formatted);\r\n }\r\n}\r\n\r\n/** 任务选择弹窗的搜索表单 */\r\nexport function useTaskSelectGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'workOrderId',\r\n label: '生产订单',\r\n component: markRaw(ProWorkOrderSelect),\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请选择生产订单',\r\n },\r\n },\r\n {\r\n fieldName: 'processId',\r\n label: '所属工序',\r\n component: markRaw(ProProcessSelect),\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请选择工序',\r\n },\r\n },\r\n {\r\n fieldName: 'workstationId',\r\n label: '工作站',\r\n component: markRaw(MdWorkstationSelect),\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请选择工作站',\r\n },\r\n },\r\n {\r\n fieldName: 'code',\r\n label: '任务编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入任务编号',\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '任务名称',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入任务名称',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 任务选择弹窗的字段 */\r\nexport function useTaskSelectGridColumns(\r\n multiple = false,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n { type: multiple ? 'checkbox' : 'radio', width: 50 },\r\n { field: 'code', title: '任务编号', width: 180 },\r\n { field: 'name', title: '任务名称', minWidth: 140 },\r\n { field: 'workstationCode', title: '工作站编码', width: 140 },\r\n { field: 'workstationName', title: '工作站名称', width: 140 },\r\n { field: 'processName', title: '工序', width: 120 },\r\n {\r\n field: 'checkFlag',\r\n title: '是否质检',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.INFRA_BOOLEAN_STRING },\r\n },\r\n },\r\n { field: 'itemCode', title: '物料编码', width: 140 },\r\n { field: 'itemName', title: '物料名称', width: 140 },\r\n { field: 'itemSpecification', title: '规格型号', width: 120 },\r\n { field: 'quantity', title: '排产数量', width: 100 },\r\n { field: 'producedQuantity', title: '已生产数量', width: 110 },\r\n {\r\n field: 'startTime',\r\n title: '开始生产时间',\r\n width: 170,\r\n formatter: 'formatDateTime',\r\n },\r\n { field: 'duration', title: '生产时长(h)', width: 120 },\r\n {\r\n field: 'endTime',\r\n title: '预计完成时间',\r\n width: 170,\r\n formatter: 'formatDateTime',\r\n },\r\n {\r\n field: 'status',\r\n title: '任务状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_TASK_STATUS },\r\n },\r\n },\r\n ];\r\n}\r\n", "after": "import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';\r\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\r\nimport { z } from '#/adapter/form';\r\nimport { getSimpleUserListByRoleCode } from '#/api/system/user';\r\nimport { getTemplatePage } from '#/api/mes/pro/processdesign/template';\r\nimport { getUserListByWorkstationId } from '#/api/mes/md/workstation/worker';\r\nimport type { MesProTaskApi } from '#/api/mes/pro/task';\r\nimport type { MesProWorkOrderApi } from '#/api/mes/pro/workorder';\r\n\r\nimport type { Ref } from 'vue';\r\n\r\nimport { markRaw } from 'vue';\r\n\r\nimport { DICT_TYPE } from '@vben/constants';\r\nimport { getDictOptions } from '@vben/hooks';\r\n\r\nimport { message } from 'ant-design-vue';\r\n\r\nimport CrmCustomerSelect from '#/components/crm-customer-select.vue';\r\nimport { calculateTaskDuration } from '#/api/mes/pro/task';\r\nimport { getRangePickerDefaultProps } from '#/utils';\r\nimport { MdItemSelect } from '#/views/mes/md/item/components';\r\nimport { MdWorkstationSelect } from '#/views/mes/md/workstation/components';\r\nimport { ProProcessSelect } from '#/views/mes/process-design/process/components';\r\nimport { RouteColorPicker } from '#/views/mes/process-design/route/components';\r\nimport { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';\r\n\r\n/** 待排产订单列表的搜索表单 */\r\nexport function useGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '订单编码',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入订单编码',\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '订单名称',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入订单名称',\r\n },\r\n },\r\n {\r\n fieldName: 'orderSourceCode',\r\n label: '来源单据',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入来源单据编号',\r\n },\r\n },\r\n {\r\n fieldName: 'productId',\r\n label: '产品',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n placeholder: '请选择产品',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'requestDate',\r\n label: '需求日期',\r\n component: 'RangePicker',\r\n componentProps: {\r\n ...getRangePickerDefaultProps(),\r\n allowClear: true,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 待排产订单列表的字段 */\r\nexport function useGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n { type: 'checkbox', width: 48, fixed: 'left' },\r\n {\r\n field: 'code',\r\n title: '订单编码',\r\n fixed: 'left',\r\n width: 200,\r\n treeNode: true,\r\n slots: { default: 'code' },\r\n },\r\n {\r\n field: 'name',\r\n title: '订单名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'orderSourceType',\r\n title: '订单来源',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_SOURCE_TYPE },\r\n },\r\n },\r\n {\r\n field: 'orderSourceCode',\r\n title: '来源单据编号',\r\n width: 140,\r\n },\r\n {\r\n field: 'productCode',\r\n title: '产品编码',\r\n width: 120,\r\n },\r\n {\r\n field: 'productName',\r\n title: '产品名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'productSpecification',\r\n title: '规格型号',\r\n width: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'status',\r\n title: '订单状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_STATUS },\r\n },\r\n },\r\n {\r\n field: 'productionStatus',\r\n title: '生产状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.ORDER_PRODUCTION_STATUS },\r\n },\r\n },\r\n {\r\n field: 'quantity',\r\n title: '订单数量',\r\n width: 100,\r\n },\r\n // {\r\n // field: 'quantityChanged',\r\n // title: '调整数量',\r\n // width: 100,\r\n // },\r\n {\r\n field: 'quantityProduced',\r\n title: '已生产数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'progressPercent',\r\n title: '完成进度',\r\n width: 150,\r\n slots: { default: 'progressPercent' },\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n width: 120,\r\n },\r\n {\r\n field: 'requestDate',\r\n title: '需求日期',\r\n width: 120,\r\n formatter: 'formatDate',\r\n },\r\n\r\n {\r\n title: '操作',\r\n width: 240,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 排产对话框只读订单信息的表单 */\r\nexport function useScheduleFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '订单编码',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '订单名称',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'orderSourceType',\r\n label: '订单来源',\r\n component: 'Select',\r\n componentProps: {\r\n disabled: true,\r\n options: getDictOptions(\r\n DICT_TYPE.MES_PRO_WORK_ORDER_SOURCE_TYPE,\r\n 'number',\r\n ),\r\n },\r\n },\r\n {\r\n fieldName: 'orderSourceCode',\r\n label: '来源单据编号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'type',\r\n label: '订单类型',\r\n component: 'Select',\r\n componentProps: {\r\n disabled: true,\r\n options: getDictOptions(DICT_TYPE.MES_PRO_WORK_ORDER_TYPE, 'number'),\r\n },\r\n },\r\n {\r\n fieldName: 'productId',\r\n label: '产品',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'productSpecification',\r\n label: '规格型号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'unitMeasureName',\r\n label: '单位',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '订单数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n disabled: true,\r\n precision: 2,\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'batchCode',\r\n label: '批次号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'requestDate',\r\n label: '需求日期',\r\n component: 'DatePicker',\r\n componentProps: {\r\n class: '!w-full',\r\n disabled: true,\r\n format: 'YYYY-MM-DD',\r\n valueFormat: 'YYYY-MM-DD',\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n label: '订单状态',\r\n component: 'Select',\r\n componentProps: {\r\n disabled: true,\r\n options: getDictOptions(DICT_TYPE.MES_PRO_WORK_ORDER_STATUS, 'number'),\r\n },\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n disabled: true,\r\n rows: 2,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 生产任务子表的字段 */\r\nexport function useTaskGridColumns(\r\n editable: boolean,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '任务编码',\r\n width: 140,\r\n },\r\n {\r\n field: 'name',\r\n title: '任务名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'workstationCode',\r\n title: '工作站编号',\r\n width: 120,\r\n },\r\n {\r\n field: 'workstationName',\r\n title: '工作站名称',\r\n width: 120,\r\n },\r\n {\r\n field: 'paramTemplateId',\r\n title: '工艺参数模板',\r\n minWidth: 140,\r\n formatter: ({ cellValue }) => cellValue ? `模板 #${cellValue}` : '未配置',\r\n },\r\n {\r\n field: 'quantity',\r\n title: '排产数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'producedQuantity',\r\n title: '已生产数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'startTime',\r\n title: '开始生产时间',\r\n width: 170,\r\n formatter: 'formatDateTime',\r\n },\r\n {\r\n field: 'duration',\r\n title: '生产时长(h)',\r\n width: 120,\r\n },\r\n {\r\n field: 'endTime',\r\n title: '预计完成时间',\r\n width: 170,\r\n formatter: 'formatDateTime',\r\n },\r\n {\r\n field: 'colorCode',\r\n title: '显示颜色',\r\n width: 100,\r\n slots: { default: 'colorCode' },\r\n },\r\n ...(editable\r\n ? [\r\n {\r\n title: '操作',\r\n width: 160,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n } as const,\r\n ]\r\n : []),\r\n ];\r\n}\r\n\r\n/** 生产任务新增/修改的表单 */\r\nexport function useTaskFormSchema(formApi?: VbenFormApi, workOrderQuantity?: Ref): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'paramTemplateId',\r\n label: '工艺参数模板',\r\n component: 'ApiSelect',\r\n componentProps: {\r\n api: () => getTemplatePage({ pageNo: 1, pageSize: 100 }),\r\n labelField: 'templateName',\r\n valueField: 'id',\r\n resultField: 'list',\r\n allowClear: true,\r\n placeholder: '请选择工艺参数模板',\r\n },\r\n },\r\n {\r\n fieldName: 'workstationId',\r\n label: '工作站',\r\n component: markRaw(MdWorkstationSelect),\r\n componentProps: {\r\n placeholder: '请选择工作站',\r\n onChange: () => recalcDuration(formApi),\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '排产数量',\r\n component: 'InputNumber',\r\n description: () => workOrderQuantity?.value != null ? `订单数量:${workOrderQuantity.value}` : '',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0.01,\r\n placeholder: '请输入排产数量',\r\n precision: 2,\r\n onChange: () => recalcDuration(formApi),\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'colorCode',\r\n label: '甘特颜色',\r\n component: markRaw(RouteColorPicker),\r\n },\r\n {\r\n fieldName: 'startTime',\r\n label: '开始时间',\r\n component: 'DatePicker',\r\n componentProps: {\r\n class: '!w-full',\r\n placeholder: '请先选择工作站',\r\n showTime: true,\r\n valueFormat: 'YYYY-MM-DD HH:mm:ss',\r\n onChange: () => recalcEndTime(formApi),\r\n },\r\n dependencies: {\r\n triggerFields: ['workstationId'],\r\n componentProps: (values) => ({\r\n disabled: !values.workstationId,\r\n placeholder: values.workstationId ? '请选择开始时间' : '请先选择工作站',\r\n }),\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'duration',\r\n label: '生产时长(h)',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 1,\r\n placeholder: '请输入生产时长',\r\n precision: 0,\r\n // 生产时长变更:重新计算结束时间\r\n onChange: () => recalcEndTime(formApi),\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'endTime',\r\n label: '结束时间',\r\n component: 'DatePicker',\r\n componentProps: {\r\n class: '!w-full',\r\n disabled: true,\r\n showTime: true,\r\n valueFormat: 'YYYY-MM-DD HH:mm:ss',\r\n },\r\n },\r\n {\r\n fieldName: 'assigneeUserIds',\r\n label: '报工人',\r\n component: 'ApiSelect',\r\n componentProps: {\r\n placeholder: '请选择报工人',\r\n api: getUserListByWorkstationId,\r\n labelField: 'nickname',\r\n valueField: 'id',\r\n mode: 'multiple',\r\n },\r\n dependencies: {\r\n triggerFields: ['workstationId'],\r\n componentProps: (values) => ({\r\n params: { workstationId: values.workstationId },\r\n disabled: !values.workstationId,\r\n placeholder: values.workstationId ? '请选择报工人' : '请先选择工作站',\r\n }),\r\n },\r\n rules: z.array(z.number()).min(1, '请选择报工人').default([]),\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n placeholder: '请输入备注',\r\n rows: 2,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 选择工作站或修改数量后,自动计算生产时长 */\r\nasync function recalcDuration(formApi?: VbenFormApi) {\r\n if (!formApi) return;\r\n const values = await formApi.getValues();\r\n\r\n if (values.workstationId) {\r\n try {\r\n const users = await getUserListByWorkstationId({ workstationId: values.workstationId });\r\n if (!users || users.length === 0) {\r\n message.warning('当前工作站没有配置人力资源');\r\n }\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n\r\n if (!values.workstationId || !values.quantity) return;\r\n try {\r\n const res = await calculateTaskDuration(values.workstationId, values.quantity);\r\n await formApi.setFieldValue('duration', res.duration);\r\n if (res.duration === 0) {\r\n message.warning('该工作站未绑定设备,或绑定设备未配置生产效率');\r\n }\r\n // 重新计算结束时间\r\n await recalcEndTime(formApi);\r\n } catch {\r\n // 计算失败不阻塞用户操作\r\n }\r\n}\r\n\r\n/** 计算结束时间:开始时间 + 生产时长(小时) */\r\nasync function recalcEndTime(formApi?: VbenFormApi) {\r\n if (!formApi) {\r\n return;\r\n }\r\n const values = await formApi.getValues();\r\n if (values.startTime && values.duration) {\r\n const start = new Date(values.startTime).getTime();\r\n const endTime = start + values.duration * 3600 * 1000;\r\n const pad = (n: number) => String(n).padStart(2, '0');\r\n const d = new Date(endTime);\r\n const formatted = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;\r\n await formApi.setFieldValue('endTime', formatted);\r\n }\r\n}\r\n\r\n/** 任务选择弹窗的搜索表单 */\r\nexport function useTaskSelectGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'workOrderId',\r\n label: '生产订单',\r\n component: markRaw(ProWorkOrderSelect),\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请选择生产订单',\r\n },\r\n },\r\n {\r\n fieldName: 'processId',\r\n label: '所属工序',\r\n component: markRaw(ProProcessSelect),\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请选择工序',\r\n },\r\n },\r\n {\r\n fieldName: 'workstationId',\r\n label: '工作站',\r\n component: markRaw(MdWorkstationSelect),\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请选择工作站',\r\n },\r\n },\r\n {\r\n fieldName: 'code',\r\n label: '任务编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入任务编号',\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '任务名称',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入任务名称',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 任务选择弹窗的字段 */\r\nexport function useTaskSelectGridColumns(\r\n multiple = false,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n { type: multiple ? 'checkbox' : 'radio', width: 50 },\r\n { field: 'code', title: '任务编号', width: 180 },\r\n { field: 'name', title: '任务名称', minWidth: 140 },\r\n { field: 'workstationCode', title: '工作站编码', width: 140 },\r\n { field: 'workstationName', title: '工作站名称', width: 140 },\r\n { field: 'processName', title: '工序', width: 120 },\r\n {\r\n field: 'checkFlag',\r\n title: '是否质检',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.INFRA_BOOLEAN_STRING },\r\n },\r\n },\r\n { field: 'itemCode', title: '物料编码', width: 140 },\r\n { field: 'itemName', title: '物料名称', width: 140 },\r\n { field: 'itemSpecification', title: '规格型号', width: 120 },\r\n { field: 'quantity', title: '排产数量', width: 100 },\r\n { field: 'producedQuantity', title: '已生产数量', width: 110 },\r\n {\r\n field: 'startTime',\r\n title: '开始生产时间',\r\n width: 170,\r\n formatter: 'formatDateTime',\r\n },\r\n { field: 'duration', title: '生产时长(h)', width: 120 },\r\n {\r\n field: 'endTime',\r\n title: '预计完成时间',\r\n width: 170,\r\n formatter: 'formatDateTime',\r\n },\r\n {\r\n field: 'status',\r\n title: '任务状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_TASK_STATUS },\r\n },\r\n },\r\n ];\r\n}\r\n" }, { "file": "mom-pro2-before\\src\\views\\mes\\pro\\workorder\\data.ts", "removed": 2, "before": "import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';\r\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\r\nimport { type MesProWorkOrderApi, getWorkOrderApproveProcessList } from '#/api/mes/pro/workorder';\r\nimport { getSimpleRoleList } from '#/api/system/role';\r\nimport type { MesProWorkOrderBomApi } from '#/api/mes/pro/workorder/bom';\r\nimport type { MesProWorkOrderProcessApi } from '#/api/mes/pro/workorder/process';\r\n\r\nimport { h, markRaw } from 'vue';\r\n\r\nimport {\r\n DICT_TYPE,\r\n MesAutoCodeRuleCode,\r\n MesProWorkOrderSourceTypeEnum,\r\n MesProWorkOrderTypeEnum,\r\n} from '@vben/constants';\r\nimport { getDictOptions } from '@vben/hooks';\r\n\r\nimport { Button } from 'ant-design-vue';\r\n\r\nimport { generateAutoCode } from '#/api/mes/md/autocode/record';\r\nimport CrmCustomerSelect from '#/components/crm-customer-select.vue';\r\nimport { getRangePickerDefaultProps } from '#/utils';\r\nimport {\r\n MdItemSelect,\r\n} from '#/views/mes/md/item/components';\r\nimport { MdVendorSelect } from '#/views/mes/md/vendor/components';\r\n\r\n/** 表单类型 */\r\nexport type FormType = 'confirm' | 'create' | 'detail' | 'finish' | 'update';\r\n\r\n/** 表头是否只读(确认、完成、详情态) */\r\nfunction isHeaderReadonly(formType: FormType): boolean {\r\n return ['confirm', 'detail', 'finish'].includes(formType);\r\n}\r\n\r\n/** 新增/修改的表单 */\r\nexport function useFormSchema(\r\n formType: FormType,\r\n formApi?: VbenFormApi,\r\n): VbenFormSchema[] {\r\n const headerReadonly = isHeaderReadonly(formType);\r\n return [\r\n {\r\n fieldName: 'id',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'parentId',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n label: '订单状态',\r\n component: 'Select',\r\n componentProps: {\r\n disabled: true,\r\n options: getDictOptions(DICT_TYPE.MES_PRO_WORK_ORDER_STATUS, 'number'),\r\n },\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => formType !== 'create',\r\n },\r\n },\r\n {\r\n fieldName: 'code',\r\n label: '订单编码',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请输入订单编码',\r\n },\r\n rules: 'required',\r\n suffix:\r\n formType === 'create' || formType === 'update'\r\n ? () =>\r\n h(\r\n Button,\r\n {\r\n type: 'default',\r\n onClick: async () => {\r\n const code = await generateAutoCode(\r\n MesAutoCodeRuleCode.PRO_WORK_ORDER_CODE,\r\n );\r\n await formApi?.setFieldValue('code', code);\r\n },\r\n },\r\n { default: () => '生成' },\r\n )\r\n : undefined,\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '订单名称',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请输入订单名称',\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'orderSourceType',\r\n label: '订单来源',\r\n component: 'Select',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n options: getDictOptions(\r\n DICT_TYPE.MES_PRO_WORK_ORDER_SOURCE_TYPE,\r\n 'number',\r\n ),\r\n placeholder: '请选择订单来源',\r\n // 订单来源变更:非客户订单时清空来源单据编号和客户\r\n onChange: async (value: number) => {\r\n if (value !== MesProWorkOrderSourceTypeEnum.ORDER) {\r\n await formApi?.setValues({\r\n clientId: undefined,\r\n orderSourceCode: undefined,\r\n });\r\n }\r\n },\r\n },\r\n help: (values: { orderSourceType?: number }) =>\r\n values.orderSourceType === MesProWorkOrderSourceTypeEnum.ORDER\r\n ? '已选客户订单:需补充来源单据编号与客户,便于追溯订单来源。'\r\n : '用于区分订单业务归属;选「客户订单」时才需关联来源单据与客户。',\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'orderSourceCode',\r\n label: '来源单据编号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请输入来源单据编号',\r\n },\r\n dependencies: {\r\n triggerFields: ['orderSourceType'],\r\n show: (values) =>\r\n values.orderSourceType === MesProWorkOrderSourceTypeEnum.ORDER,\r\n },\r\n help: '填写上游单据(如销售订单)的编号,用于追溯该订单的来源。',\r\n },\r\n {\r\n fieldName: 'type',\r\n label: '订单类型',\r\n component: 'Select',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n options: getDictOptions(DICT_TYPE.MES_PRO_WORK_ORDER_TYPE, 'number'),\r\n placeholder: '请选择订单类型',\r\n // 订单类型变更:非代工/采购时清空供应商\r\n onChange: async (value: number) => {\r\n if (\r\n value !== MesProWorkOrderTypeEnum.OUTSOURCE &&\r\n value !== MesProWorkOrderTypeEnum.PURCHASE\r\n ) {\r\n await formApi?.setFieldValue('vendorId', undefined);\r\n }\r\n },\r\n },\r\n help: (values: { type?: number }) =>\r\n values.type === MesProWorkOrderTypeEnum.OUTSOURCE ||\r\n values.type === MesProWorkOrderTypeEnum.PURCHASE\r\n ? '已选委外/采购生产:需指定供应商,委外报工与入库将按该供应商结算。'\r\n : '自营生产按本单工序排产;选「委外加工」或「采购生产」时需额外指定供应商。',\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'productId',\r\n label: '产品',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请选择产品',\r\n },\r\n help: '选择产品后,工序将自动从其工艺路线带出并按需调整;产品需先在「工艺流程」中配置路线与投料 BOM。',\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '订单数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n disabled: headerReadonly,\r\n min: 1,\r\n placeholder: '请输入订单数量',\r\n precision: 2,\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请选择客户',\r\n },\r\n dependencies: {\r\n triggerFields: ['orderSourceType'],\r\n show: (values) =>\r\n values.orderSourceType === MesProWorkOrderSourceTypeEnum.ORDER,\r\n },\r\n help: '关联客户后,订单可在客户维度追溯并对接后续结算。',\r\n },\r\n {\r\n fieldName: 'vendorId',\r\n label: '供应商',\r\n component: markRaw(MdVendorSelect),\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请选择供应商',\r\n },\r\n dependencies: {\r\n triggerFields: ['type'],\r\n show: (values) =>\r\n values.type === MesProWorkOrderTypeEnum.OUTSOURCE ||\r\n values.type === MesProWorkOrderTypeEnum.PURCHASE,\r\n },\r\n help: '委外/采购订单需指定供应商,委外报工与入库均以该供应商为准。',\r\n },\r\n {\r\n fieldName: 'batchCode',\r\n label: '批次号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请输入批次号',\r\n },\r\n },\r\n {\r\n fieldName: 'requestDate',\r\n label: '需求日期',\r\n component: 'DatePicker',\r\n componentProps: {\r\n class: '!w-full',\r\n disabled: headerReadonly,\r\n format: 'YYYY-MM-DD',\r\n placeholder: '请选择需求日期',\r\n valueFormat: 'YYYY-MM-DD',\r\n },\r\n help: '预计交付/完成日期,用于排产、进度跟踪与交期预警。',\r\n rules: 'required',\r\n },\r\n // {\r\n // fieldName: 'feedbackRole',\r\n // label: '报工角色',\r\n // component: 'ApiSelect',\r\n // componentProps: {\r\n // api: getSimpleRoleList,\r\n // disabled: headerReadonly,\r\n // labelField: 'name',\r\n // valueField: 'code',\r\n // mode: 'multiple',\r\n // placeholder: '请选择报工角色',\r\n // },\r\n // rules: 'selectRequired',\r\n // },\r\n {\r\n fieldName: 'feedbackApprove',\r\n label: '是否报工审批',\r\n component: 'Switch',\r\n componentProps: {\r\n class: '!w-auto',\r\n checkedChildren: '是',\r\n unCheckedChildren: '否',\r\n disabled: headerReadonly,\r\n },\r\n defaultValue: false,\r\n help: '开启后,生产报工提交需经审批通过才计入产量;关闭则报工直接生效。',\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'processDefinitionKey',\r\n label: '审批流程',\r\n component: 'ApiSelect',\r\n componentProps: {\r\n api: getWorkOrderApproveProcessList,\r\n disabled: headerReadonly,\r\n labelField: 'name',\r\n valueField: 'key',\r\n placeholder: '请选择审批流程',\r\n },\r\n dependencies: {\r\n triggerFields: ['feedbackApprove'],\r\n show: (values) => !!values.feedbackApprove,\r\n rules(values) {\r\n if (values.feedbackApprove) {\r\n return 'selectRequired';\r\n }\r\n return undefined;\r\n },\r\n },\r\n help: '选择报工提交后走的审批流程;流程需先在系统「流程管理」中部署,仅「报工审批」类流程可选。',\r\n },\r\n\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的搜索表单 */\r\nexport function useGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '订单编码',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入订单编码',\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '订单名称',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入订单名称',\r\n },\r\n },\r\n {\r\n fieldName: 'orderSourceCode',\r\n label: '来源单据',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入来源单据编号',\r\n },\r\n },\r\n {\r\n fieldName: 'productId',\r\n label: '产品',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n placeholder: '请选择产品',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'type',\r\n label: '订单类型',\r\n component: 'Select',\r\n componentProps: {\r\n allowClear: true,\r\n options: getDictOptions(DICT_TYPE.MES_PRO_WORK_ORDER_TYPE, 'number'),\r\n placeholder: '请选择订单类型',\r\n },\r\n },\r\n {\r\n fieldName: 'requestDate',\r\n label: '需求日期',\r\n component: 'RangePicker',\r\n componentProps: {\r\n ...getRangePickerDefaultProps(),\r\n allowClear: true,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的字段 */\r\nexport function useGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '订单编码',\r\n fixed: 'left',\r\n width: 200,\r\n treeNode: true,\r\n slots: { default: 'code' },\r\n },\r\n {\r\n field: 'name',\r\n title: '订单名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'type',\r\n title: '订单类型',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_TYPE },\r\n },\r\n },\r\n {\r\n field: 'orderSourceType',\r\n title: '订单来源',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_SOURCE_TYPE },\r\n },\r\n },\r\n {\r\n field: 'orderSourceCode',\r\n title: '来源单据编号',\r\n width: 140,\r\n },\r\n {\r\n field: 'productCode',\r\n title: '产品编码',\r\n width: 120,\r\n },\r\n {\r\n field: 'productName',\r\n title: '产品名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'productSpecification',\r\n title: '规格型号',\r\n width: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '订单数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'quantityProduced',\r\n title: '已生产数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'clientCode',\r\n title: '客户编码',\r\n width: 120,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n width: 120,\r\n },\r\n {\r\n field: 'requestDate',\r\n title: '需求日期',\r\n width: 180,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'status',\r\n title: '订单状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_STATUS },\r\n },\r\n },\r\n {\r\n field: 'productionStatus',\r\n title: '生产状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.ORDER_PRODUCTION_STATUS },\r\n },\r\n },\r\n {\r\n field: 'processProgressList',\r\n title: '工序生产进度',\r\n width: 350,\r\n slots: { default: 'processProgressList' },\r\n },\r\n {\r\n field: 'completionProgress',\r\n title: '完成进度',\r\n width: 200,\r\n slots: { default: 'completionProgress' },\r\n },\r\n {\r\n field: 'createTime',\r\n title: '创建时间',\r\n width: 180,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n title: '操作',\r\n width: 240,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 订单选择弹窗的搜索表单 */\r\nexport function useWorkOrderSelectGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '订单编码',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入订单编码',\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '订单名称',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入订单名称',\r\n },\r\n },\r\n {\r\n fieldName: 'productId',\r\n label: '产品',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n placeholder: '请选择产品',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n label: '订单状态',\r\n component: 'Select',\r\n componentProps: {\r\n allowClear: true,\r\n options: getDictOptions(DICT_TYPE.MES_PRO_WORK_ORDER_STATUS, 'number'),\r\n placeholder: '请选择订单状态',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 订单选择弹窗的字段 */\r\nexport function useWorkOrderSelectGridColumns(\r\n multiple = false,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n type: multiple ? 'checkbox' : 'radio',\r\n width: 50,\r\n },\r\n {\r\n field: 'code',\r\n title: '订单编码',\r\n width: 180,\r\n },\r\n {\r\n field: 'name',\r\n title: '订单名称',\r\n minWidth: 180,\r\n },\r\n {\r\n field: 'orderSourceType',\r\n title: '订单来源',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_SOURCE_TYPE },\r\n },\r\n },\r\n {\r\n field: 'orderSourceCode',\r\n title: '订单编号',\r\n width: 140,\r\n },\r\n {\r\n field: 'productCode',\r\n title: '产品编号',\r\n width: 120,\r\n },\r\n {\r\n field: 'productName',\r\n title: '产品名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'productSpecification',\r\n title: '规格型号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '订单数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'clientCode',\r\n title: '客户编码',\r\n width: 120,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'status',\r\n title: '订单状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_STATUS },\r\n },\r\n },\r\n {\r\n field: 'requestDate',\r\n title: '需求日期',\r\n width: 120,\r\n formatter: 'formatDate',\r\n },\r\n ];\r\n}\r\n\r\n/** 订单物料需求子表的字段(只读) */\r\nexport function useItemGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'itemCode',\r\n title: '物料编码',\r\n width: 120,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '物料名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'itemSpecification',\r\n title: '规格型号',\r\n width: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'itemOrProduct',\r\n title: '物料/产品',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_MD_ITEM_OR_PRODUCT },\r\n },\r\n },\r\n {\r\n field: 'quantity',\r\n title: '需求数量',\r\n width: 120,\r\n },\r\n ];\r\n}\r\n\r\n/** 订单工序列表的字段 */\r\nexport function useProcessGridColumns(\r\n draggable = false,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n ...(draggable\r\n ? [\r\n {\r\n field: 'drag',\r\n title: '',\r\n width: 40,\r\n slots: { default: 'dragHandle' },\r\n } as const,\r\n ]\r\n : []),\r\n {\r\n type: 'expand',\r\n width: 50,\r\n slots: { content: 'expand_content' },\r\n } as const,\r\n {\r\n field: 'sort',\r\n title: '序号',\r\n width: 80,\r\n },\r\n {\r\n field: 'processCode',\r\n title: '工序编码',\r\n width: 120,\r\n },\r\n {\r\n field: 'processName',\r\n title: '工序名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'nextProcessName',\r\n title: '下一道工序',\r\n width: 120,\r\n },\r\n {\r\n field: 'linkType',\r\n title: '工序关系',\r\n width: 100,\r\n formatter: ({ cellValue }) => {\r\n const map: Record = {\r\n 0: '开始-开始',\r\n 1: '结束-结束',\r\n 2: '开始-结束',\r\n 3: '结束-开始',\r\n };\r\n return map[cellValue] ?? '-';\r\n },\r\n },\r\n {\r\n field: 'prepareTime',\r\n title: '准备时间(分)',\r\n width: 100,\r\n },\r\n {\r\n field: 'waitTime',\r\n title: '等待时间(分)',\r\n width: 100,\r\n },\r\n {\r\n field: 'keyFlag',\r\n title: '关键工序',\r\n width: 80,\r\n slots: { default: 'keyFlag' },\r\n },\r\n {\r\n field: 'checkFlag',\r\n title: '质检工序',\r\n width: 80,\r\n slots: { default: 'checkFlag' },\r\n },\r\n {\r\n field: 'backflushFlag',\r\n title: '倒冲',\r\n width: 80,\r\n slots: { default: 'backflushFlag' },\r\n },\r\n {\r\n field: 'outputItemNames',\r\n title: '产出物料',\r\n width: 160,\r\n },\r\n {\r\n field: 'remark',\r\n title: '备注',\r\n minWidth: 120,\r\n },\r\n {\r\n title: '操作',\r\n width: 200,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n", "after": "import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';\r\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\r\nimport { type MesProWorkOrderApi, getWorkOrderApproveProcessList } from '#/api/mes/pro/workorder';\r\nimport { getSimpleRoleList } from '#/api/system/role';\r\nimport type { MesProWorkOrderBomApi } from '#/api/mes/pro/workorder/bom';\r\nimport type { MesProWorkOrderProcessApi } from '#/api/mes/pro/workorder/process';\r\n\r\nimport { h, markRaw } from 'vue';\r\n\r\nimport {\r\n DICT_TYPE,\r\n MesAutoCodeRuleCode,\r\n MesProWorkOrderSourceTypeEnum,\r\n MesProWorkOrderTypeEnum,\r\n} from '@vben/constants';\r\nimport { getDictOptions } from '@vben/hooks';\r\n\r\nimport { Button } from 'ant-design-vue';\r\n\r\nimport { generateAutoCode } from '#/api/mes/md/autocode/record';\r\nimport CrmCustomerSelect from '#/components/crm-customer-select.vue';\r\nimport { getRangePickerDefaultProps } from '#/utils';\r\nimport {\r\n MdItemSelect,\r\n} from '#/views/mes/md/item/components';\r\nimport { MdVendorSelect } from '#/views/mes/md/vendor/components';\r\n\r\n/** 表单类型 */\r\nexport type FormType = 'confirm' | 'create' | 'detail' | 'finish' | 'update';\r\n\r\n/** 表头是否只读(确认、完成、详情态) */\r\nfunction isHeaderReadonly(formType: FormType): boolean {\r\n return ['confirm', 'detail', 'finish'].includes(formType);\r\n}\r\n\r\n/** 新增/修改的表单 */\r\nexport function useFormSchema(\r\n formType: FormType,\r\n formApi?: VbenFormApi,\r\n): VbenFormSchema[] {\r\n const headerReadonly = isHeaderReadonly(formType);\r\n return [\r\n {\r\n fieldName: 'id',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'parentId',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n label: '订单状态',\r\n component: 'Select',\r\n componentProps: {\r\n disabled: true,\r\n options: getDictOptions(DICT_TYPE.MES_PRO_WORK_ORDER_STATUS, 'number'),\r\n },\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => formType !== 'create',\r\n },\r\n },\r\n {\r\n fieldName: 'code',\r\n label: '订单编码',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请输入订单编码',\r\n },\r\n rules: 'required',\r\n suffix:\r\n formType === 'create' || formType === 'update'\r\n ? () =>\r\n h(\r\n Button,\r\n {\r\n type: 'default',\r\n onClick: async () => {\r\n const code = await generateAutoCode(\r\n MesAutoCodeRuleCode.PRO_WORK_ORDER_CODE,\r\n );\r\n await formApi?.setFieldValue('code', code);\r\n },\r\n },\r\n { default: () => '生成' },\r\n )\r\n : undefined,\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '订单名称',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请输入订单名称',\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'orderSourceType',\r\n label: '订单来源',\r\n component: 'Select',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n options: getDictOptions(\r\n DICT_TYPE.MES_PRO_WORK_ORDER_SOURCE_TYPE,\r\n 'number',\r\n ),\r\n placeholder: '请选择订单来源',\r\n // 订单来源变更:非客户订单时清空来源单据编号和客户\r\n onChange: async (value: number) => {\r\n if (value !== MesProWorkOrderSourceTypeEnum.ORDER) {\r\n await formApi?.setValues({\r\n clientId: undefined,\r\n orderSourceCode: undefined,\r\n });\r\n }\r\n },\r\n },\r\n help: (values: { orderSourceType?: number }) =>\r\n values.orderSourceType === MesProWorkOrderSourceTypeEnum.ORDER\r\n ? '已选客户订单:需补充来源单据编号与客户,便于追溯订单来源。'\r\n : '用于区分订单业务归属;选「客户订单」时才需关联来源单据与客户。',\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'orderSourceCode',\r\n label: '来源单据编号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请输入来源单据编号',\r\n },\r\n dependencies: {\r\n triggerFields: ['orderSourceType'],\r\n show: (values) =>\r\n values.orderSourceType === MesProWorkOrderSourceTypeEnum.ORDER,\r\n },\r\n help: '填写上游单据(如销售订单)的编号,用于追溯该订单的来源。',\r\n },\r\n {\r\n fieldName: 'type',\r\n label: '订单类型',\r\n component: 'Select',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n options: getDictOptions(DICT_TYPE.MES_PRO_WORK_ORDER_TYPE, 'number'),\r\n placeholder: '请选择订单类型',\r\n // 订单类型变更:非代工/采购时清空供应商\r\n onChange: async (value: number) => {\r\n if (\r\n value !== MesProWorkOrderTypeEnum.OUTSOURCE &&\r\n value !== MesProWorkOrderTypeEnum.PURCHASE\r\n ) {\r\n await formApi?.setFieldValue('vendorId', undefined);\r\n }\r\n },\r\n },\r\n help: (values: { type?: number }) =>\r\n values.type === MesProWorkOrderTypeEnum.OUTSOURCE ||\r\n values.type === MesProWorkOrderTypeEnum.PURCHASE\r\n ? '已选委外/采购生产:需指定供应商,委外报工与入库将按该供应商结算。'\r\n : '自营生产按本单工序排产;选「委外加工」或「采购生产」时需额外指定供应商。',\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'productId',\r\n label: '产品',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请选择产品',\r\n },\r\n help: '选择产品后,工序将自动从其工艺路线带出并按需调整;产品需先在「工艺流程」中配置路线与投料 BOM。',\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '订单数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n disabled: headerReadonly,\r\n min: 1,\r\n placeholder: '请输入订单数量',\r\n precision: 2,\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请选择客户',\r\n },\r\n dependencies: {\r\n triggerFields: ['orderSourceType'],\r\n show: (values) =>\r\n values.orderSourceType === MesProWorkOrderSourceTypeEnum.ORDER,\r\n },\r\n help: '关联客户后,订单可在客户维度追溯并对接后续结算。',\r\n },\r\n {\r\n fieldName: 'vendorId',\r\n label: '供应商',\r\n component: markRaw(MdVendorSelect),\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请选择供应商',\r\n },\r\n dependencies: {\r\n triggerFields: ['type'],\r\n show: (values) =>\r\n values.type === MesProWorkOrderTypeEnum.OUTSOURCE ||\r\n values.type === MesProWorkOrderTypeEnum.PURCHASE,\r\n },\r\n help: '委外/采购订单需指定供应商,委外报工与入库均以该供应商为准。',\r\n },\r\n {\r\n fieldName: 'batchCode',\r\n label: '批次号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请输入批次号',\r\n },\r\n },\r\n {\r\n fieldName: 'requestDate',\r\n label: '需求日期',\r\n component: 'DatePicker',\r\n componentProps: {\r\n class: '!w-full',\r\n disabled: headerReadonly,\r\n format: 'YYYY-MM-DD',\r\n placeholder: '请选择需求日期',\r\n valueFormat: 'YYYY-MM-DD',\r\n },\r\n help: '预计交付/完成日期,用于排产、进度跟踪与交期预警。',\r\n rules: 'required',\r\n },\r\n // {\r\n // fieldName: 'feedbackRole',\r\n // label: '报工角色',\r\n // component: 'ApiSelect',\r\n // componentProps: {\r\n // api: getSimpleRoleList,\r\n // disabled: headerReadonly,\r\n // labelField: 'name',\r\n // valueField: 'code',\r\n // mode: 'multiple',\r\n // placeholder: '请选择报工角色',\r\n // },\r\n // rules: 'selectRequired',\r\n // },\r\n {\r\n fieldName: 'feedbackApprove',\r\n label: '是否报工审批',\r\n component: 'Switch',\r\n componentProps: {\r\n class: '!w-auto',\r\n checkedChildren: '是',\r\n unCheckedChildren: '否',\r\n disabled: headerReadonly,\r\n },\r\n defaultValue: false,\r\n help: '开启后,生产报工提交需经审批通过才计入产量;关闭则报工直接生效。',\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'processDefinitionKey',\r\n label: '审批流程',\r\n component: 'ApiSelect',\r\n componentProps: {\r\n api: getWorkOrderApproveProcessList,\r\n disabled: headerReadonly,\r\n labelField: 'name',\r\n valueField: 'key',\r\n placeholder: '请选择审批流程',\r\n },\r\n dependencies: {\r\n triggerFields: ['feedbackApprove'],\r\n show: (values) => !!values.feedbackApprove,\r\n rules(values) {\r\n if (values.feedbackApprove) {\r\n return 'selectRequired';\r\n }\r\n return undefined;\r\n },\r\n },\r\n help: '选择报工提交后走的审批流程;流程需先在系统「流程管理」中部署,仅「报工审批」类流程可选。',\r\n },\r\n\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n disabled: headerReadonly,\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的搜索表单 */\r\nexport function useGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '订单编码',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入订单编码',\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '订单名称',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入订单名称',\r\n },\r\n },\r\n {\r\n fieldName: 'orderSourceCode',\r\n label: '来源单据',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入来源单据编号',\r\n },\r\n },\r\n {\r\n fieldName: 'productId',\r\n label: '产品',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n placeholder: '请选择产品',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'type',\r\n label: '订单类型',\r\n component: 'Select',\r\n componentProps: {\r\n allowClear: true,\r\n options: getDictOptions(DICT_TYPE.MES_PRO_WORK_ORDER_TYPE, 'number'),\r\n placeholder: '请选择订单类型',\r\n },\r\n },\r\n {\r\n fieldName: 'requestDate',\r\n label: '需求日期',\r\n component: 'RangePicker',\r\n componentProps: {\r\n ...getRangePickerDefaultProps(),\r\n allowClear: true,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的字段 */\r\nexport function useGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '订单编码',\r\n fixed: 'left',\r\n width: 200,\r\n treeNode: true,\r\n slots: { default: 'code' },\r\n },\r\n {\r\n field: 'name',\r\n title: '订单名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'type',\r\n title: '订单类型',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_TYPE },\r\n },\r\n },\r\n {\r\n field: 'orderSourceType',\r\n title: '订单来源',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_SOURCE_TYPE },\r\n },\r\n },\r\n {\r\n field: 'orderSourceCode',\r\n title: '来源单据编号',\r\n width: 140,\r\n },\r\n {\r\n field: 'productCode',\r\n title: '产品编码',\r\n width: 120,\r\n },\r\n {\r\n field: 'productName',\r\n title: '产品名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'productSpecification',\r\n title: '规格型号',\r\n width: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '订单数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'quantityProduced',\r\n title: '已生产数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n width: 120,\r\n },\r\n {\r\n field: 'requestDate',\r\n title: '需求日期',\r\n width: 180,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'status',\r\n title: '订单状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_STATUS },\r\n },\r\n },\r\n {\r\n field: 'productionStatus',\r\n title: '生产状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.ORDER_PRODUCTION_STATUS },\r\n },\r\n },\r\n {\r\n field: 'processProgressList',\r\n title: '工序生产进度',\r\n width: 350,\r\n slots: { default: 'processProgressList' },\r\n },\r\n {\r\n field: 'completionProgress',\r\n title: '完成进度',\r\n width: 200,\r\n slots: { default: 'completionProgress' },\r\n },\r\n {\r\n field: 'createTime',\r\n title: '创建时间',\r\n width: 180,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n title: '操作',\r\n width: 240,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 订单选择弹窗的搜索表单 */\r\nexport function useWorkOrderSelectGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '订单编码',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入订单编码',\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '订单名称',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入订单名称',\r\n },\r\n },\r\n {\r\n fieldName: 'productId',\r\n label: '产品',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n placeholder: '请选择产品',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n label: '订单状态',\r\n component: 'Select',\r\n componentProps: {\r\n allowClear: true,\r\n options: getDictOptions(DICT_TYPE.MES_PRO_WORK_ORDER_STATUS, 'number'),\r\n placeholder: '请选择订单状态',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 订单选择弹窗的字段 */\r\nexport function useWorkOrderSelectGridColumns(\r\n multiple = false,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n type: multiple ? 'checkbox' : 'radio',\r\n width: 50,\r\n },\r\n {\r\n field: 'code',\r\n title: '订单编码',\r\n width: 180,\r\n },\r\n {\r\n field: 'name',\r\n title: '订单名称',\r\n minWidth: 180,\r\n },\r\n {\r\n field: 'orderSourceType',\r\n title: '订单来源',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_SOURCE_TYPE },\r\n },\r\n },\r\n {\r\n field: 'orderSourceCode',\r\n title: '订单编号',\r\n width: 140,\r\n },\r\n {\r\n field: 'productCode',\r\n title: '产品编号',\r\n width: 120,\r\n },\r\n {\r\n field: 'productName',\r\n title: '产品名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'productSpecification',\r\n title: '规格型号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '订单数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'status',\r\n title: '订单状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_PRO_WORK_ORDER_STATUS },\r\n },\r\n },\r\n {\r\n field: 'requestDate',\r\n title: '需求日期',\r\n width: 120,\r\n formatter: 'formatDate',\r\n },\r\n ];\r\n}\r\n\r\n/** 订单物料需求子表的字段(只读) */\r\nexport function useItemGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'itemCode',\r\n title: '物料编码',\r\n width: 120,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '物料名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'itemSpecification',\r\n title: '规格型号',\r\n width: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'itemOrProduct',\r\n title: '物料/产品',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_MD_ITEM_OR_PRODUCT },\r\n },\r\n },\r\n {\r\n field: 'quantity',\r\n title: '需求数量',\r\n width: 120,\r\n },\r\n ];\r\n}\r\n\r\n/** 订单工序列表的字段 */\r\nexport function useProcessGridColumns(\r\n draggable = false,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n ...(draggable\r\n ? [\r\n {\r\n field: 'drag',\r\n title: '',\r\n width: 40,\r\n slots: { default: 'dragHandle' },\r\n } as const,\r\n ]\r\n : []),\r\n {\r\n type: 'expand',\r\n width: 50,\r\n slots: { content: 'expand_content' },\r\n } as const,\r\n {\r\n field: 'sort',\r\n title: '序号',\r\n width: 80,\r\n },\r\n {\r\n field: 'processCode',\r\n title: '工序编码',\r\n width: 120,\r\n },\r\n {\r\n field: 'processName',\r\n title: '工序名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'nextProcessName',\r\n title: '下一道工序',\r\n width: 120,\r\n },\r\n {\r\n field: 'linkType',\r\n title: '工序关系',\r\n width: 100,\r\n formatter: ({ cellValue }) => {\r\n const map: Record = {\r\n 0: '开始-开始',\r\n 1: '结束-结束',\r\n 2: '开始-结束',\r\n 3: '结束-开始',\r\n };\r\n return map[cellValue] ?? '-';\r\n },\r\n },\r\n {\r\n field: 'prepareTime',\r\n title: '准备时间(分)',\r\n width: 100,\r\n },\r\n {\r\n field: 'waitTime',\r\n title: '等待时间(分)',\r\n width: 100,\r\n },\r\n {\r\n field: 'keyFlag',\r\n title: '关键工序',\r\n width: 80,\r\n slots: { default: 'keyFlag' },\r\n },\r\n {\r\n field: 'checkFlag',\r\n title: '质检工序',\r\n width: 80,\r\n slots: { default: 'checkFlag' },\r\n },\r\n {\r\n field: 'backflushFlag',\r\n title: '倒冲',\r\n width: 80,\r\n slots: { default: 'backflushFlag' },\r\n },\r\n {\r\n field: 'outputItemNames',\r\n title: '产出物料',\r\n width: 160,\r\n },\r\n {\r\n field: 'remark',\r\n title: '备注',\r\n minWidth: 120,\r\n },\r\n {\r\n title: '操作',\r\n width: 200,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n" }, { "file": "mom-pro2-before\\src\\views\\mes\\qc\\batchtrace\\data.ts", "removed": 2, "before": "import type { VbenFormSchema } from '#/adapter/form';\r\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\r\nimport type { MesWmBatchApi } from '#/api/mes/wm/batch';\r\nimport type { DescriptionItemSchema } from '#/components/description';\r\n\r\nimport { markRaw } from 'vue';\r\n\r\nimport { DICT_TYPE } from '@vben/constants';\r\n\r\nimport { MdClientSelect } from '#/views/mes/md/client/components';\r\nimport { MdItemSelect } from '#/views/mes/md/item/components';\r\nimport { MdVendorSelect } from '#/views/mes/md/vendor/components';\r\n\r\n/** 列表的搜索表单 */\r\nexport function useGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '批次号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入批次号',\r\n },\r\n },\r\n {\r\n fieldName: 'itemId',\r\n label: '产品物料',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n placeholder: '请选择产品物料',\r\n },\r\n },\r\n {\r\n fieldName: 'vendorId',\r\n label: '供应商',\r\n component: markRaw(MdVendorSelect),\r\n componentProps: {\r\n placeholder: '请选择供应商',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(MdClientSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n label: '销售订单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入销售订单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'purchaseOrderCode',\r\n label: '采购订单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入采购订单编号',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的字段 */\r\nexport function useGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '批次编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'itemCode',\r\n title: '产品物料编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '产品物料名称',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'itemSpecification',\r\n title: '规格型号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'unitName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'vendorCode',\r\n title: '供应商编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'vendorName',\r\n title: '供应商名称',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'clientCode',\r\n title: '客户编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'purchaseOrderCode',\r\n title: '采购订单编号',\r\n minWidth: 160,\r\n },\r\n {\r\n title: '操作',\r\n width: 110,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 追溯明细列表的字段 */\r\nexport function useTraceGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'workOrderCode',\r\n title: '生产订单号',\r\n width: 160,\r\n },\r\n {\r\n field: 'code',\r\n title: '批次编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'itemCode',\r\n title: '产品物料编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '产品物料名称',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'itemSpecification',\r\n title: '规格型号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'unitName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n ];\r\n}\r\n\r\n/** 批次追溯详情的描述字段 */\r\nexport function useDetailSchema(): DescriptionItemSchema[] {\r\n return [\r\n {\r\n field: 'code',\r\n label: '批次编号',\r\n },\r\n {\r\n field: 'itemCode',\r\n label: '物资编码',\r\n },\r\n {\r\n field: 'itemName',\r\n label: '物资名称',\r\n },\r\n {\r\n field: 'itemSpecification',\r\n label: '规格型号',\r\n span: 3,\r\n },\r\n {\r\n field: 'purchaseOrderCode',\r\n label: '采购订单编号',\r\n },\r\n {\r\n field: 'vendorCode',\r\n label: '供应商编码',\r\n },\r\n {\r\n field: 'vendorName',\r\n label: '供应商名称',\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n label: '销售订单编号',\r\n },\r\n {\r\n field: 'clientCode',\r\n label: '客户编码',\r\n },\r\n {\r\n field: 'clientName',\r\n label: '客户名称',\r\n },\r\n {\r\n field: 'lotNumber',\r\n label: '生产批号',\r\n },\r\n {\r\n field: 'workOrderCode',\r\n label: '生产订单',\r\n },\r\n {\r\n field: 'workstationCode',\r\n label: '工作站编码',\r\n },\r\n ];\r\n}\r\n\r\n/** 采购来源列表的字段 */\r\nexport function usePurchaseSourceColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'receiptCode',\r\n title: '采购入库单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'receiptDate',\r\n title: '入库日期',\r\n minWidth: 160,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'purchaseOrderCode',\r\n title: '采购订单编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'vendorCode',\r\n title: '供应商编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'vendorName',\r\n title: '供应商名称',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'itemCode',\r\n title: '物料编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '物料名称',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'iqcCode',\r\n title: 'IQC 检验单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'checkResult',\r\n title: 'IQC 检验结论',\r\n width: 110,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_QC_CHECK_RESULT },\r\n },\r\n },\r\n {\r\n field: 'receivedQuantity',\r\n title: '入库数量',\r\n width: 100,\r\n },\r\n ];\r\n}\r\n\r\n/** 销售去向列表的字段 */\r\nexport function useSalesTargetColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'salesCode',\r\n title: '销售出库单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'salesDate',\r\n title: '出库日期',\r\n minWidth: 160,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'itemCode',\r\n title: '物料编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '物料名称',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'oqcCode',\r\n title: 'OQC 检验单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'checkResult',\r\n title: 'OQC 检验结论',\r\n width: 110,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_QC_CHECK_RESULT },\r\n },\r\n },\r\n {\r\n field: 'quantity',\r\n title: '出库数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'qualityStatus',\r\n title: '质量状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_QUALITY_STATUS },\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 工序流转列表的字段 */\r\nexport function useProcessTraceColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'eventType',\r\n title: '事件类型',\r\n width: 90,\r\n slots: { default: 'eventType' },\r\n },\r\n {\r\n field: 'workOrderCode',\r\n title: '生产工单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'processCode',\r\n title: '工序编码',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'processName',\r\n title: '工序名称',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'qualityStatus',\r\n title: '质量状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_QUALITY_STATUS },\r\n },\r\n },\r\n {\r\n field: 'eventTime',\r\n title: '事件时间',\r\n minWidth: 160,\r\n formatter: 'formatDateTime',\r\n },\r\n ];\r\n}\r\n", "after": "import type { VbenFormSchema } from '#/adapter/form';\r\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\r\nimport type { MesWmBatchApi } from '#/api/mes/wm/batch';\r\nimport type { DescriptionItemSchema } from '#/components/description';\r\n\r\nimport { markRaw } from 'vue';\r\n\r\nimport { DICT_TYPE } from '@vben/constants';\r\n\r\nimport { MdClientSelect } from '#/views/mes/md/client/components';\r\nimport { MdItemSelect } from '#/views/mes/md/item/components';\r\nimport { MdVendorSelect } from '#/views/mes/md/vendor/components';\r\n\r\n/** 列表的搜索表单 */\r\nexport function useGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '批次号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入批次号',\r\n },\r\n },\r\n {\r\n fieldName: 'itemId',\r\n label: '产品物料',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n placeholder: '请选择产品物料',\r\n },\r\n },\r\n {\r\n fieldName: 'vendorId',\r\n label: '供应商',\r\n component: markRaw(MdVendorSelect),\r\n componentProps: {\r\n placeholder: '请选择供应商',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(MdClientSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n label: '销售订单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入销售订单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'purchaseOrderCode',\r\n label: '采购订单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入采购订单编号',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的字段 */\r\nexport function useGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '批次编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'itemCode',\r\n title: '产品物料编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '产品物料名称',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'itemSpecification',\r\n title: '规格型号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'unitName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'vendorCode',\r\n title: '供应商编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'vendorName',\r\n title: '供应商名称',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'purchaseOrderCode',\r\n title: '采购订单编号',\r\n minWidth: 160,\r\n },\r\n {\r\n title: '操作',\r\n width: 110,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 追溯明细列表的字段 */\r\nexport function useTraceGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'workOrderCode',\r\n title: '生产订单号',\r\n width: 160,\r\n },\r\n {\r\n field: 'code',\r\n title: '批次编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'itemCode',\r\n title: '产品物料编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '产品物料名称',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'itemSpecification',\r\n title: '规格型号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'unitName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n ];\r\n}\r\n\r\n/** 批次追溯详情的描述字段 */\r\nexport function useDetailSchema(): DescriptionItemSchema[] {\r\n return [\r\n {\r\n field: 'code',\r\n label: '批次编号',\r\n },\r\n {\r\n field: 'itemCode',\r\n label: '物资编码',\r\n },\r\n {\r\n field: 'itemName',\r\n label: '物资名称',\r\n },\r\n {\r\n field: 'itemSpecification',\r\n label: '规格型号',\r\n span: 3,\r\n },\r\n {\r\n field: 'purchaseOrderCode',\r\n label: '采购订单编号',\r\n },\r\n {\r\n field: 'vendorCode',\r\n label: '供应商编码',\r\n },\r\n {\r\n field: 'vendorName',\r\n label: '供应商名称',\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n label: '销售订单编号',\r\n },\r\n {\r\n field: 'clientName',\r\n label: '客户名称',\r\n },\r\n {\r\n field: 'lotNumber',\r\n label: '生产批号',\r\n },\r\n {\r\n field: 'workOrderCode',\r\n label: '生产订单',\r\n },\r\n {\r\n field: 'workstationCode',\r\n label: '工作站编码',\r\n },\r\n ];\r\n}\r\n\r\n/** 采购来源列表的字段 */\r\nexport function usePurchaseSourceColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'receiptCode',\r\n title: '采购入库单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'receiptDate',\r\n title: '入库日期',\r\n minWidth: 160,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'purchaseOrderCode',\r\n title: '采购订单编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'vendorCode',\r\n title: '供应商编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'vendorName',\r\n title: '供应商名称',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'itemCode',\r\n title: '物料编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '物料名称',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'iqcCode',\r\n title: 'IQC 检验单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'checkResult',\r\n title: 'IQC 检验结论',\r\n width: 110,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_QC_CHECK_RESULT },\r\n },\r\n },\r\n {\r\n field: 'receivedQuantity',\r\n title: '入库数量',\r\n width: 100,\r\n },\r\n ];\r\n}\r\n\r\n/** 销售去向列表的字段 */\r\nexport function useSalesTargetColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'salesCode',\r\n title: '销售出库单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'salesDate',\r\n title: '出库日期',\r\n minWidth: 160,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'itemCode',\r\n title: '物料编码',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '物料名称',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'oqcCode',\r\n title: 'OQC 检验单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'checkResult',\r\n title: 'OQC 检验结论',\r\n width: 110,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_QC_CHECK_RESULT },\r\n },\r\n },\r\n {\r\n field: 'quantity',\r\n title: '出库数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'qualityStatus',\r\n title: '质量状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_QUALITY_STATUS },\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 工序流转列表的字段 */\r\nexport function useProcessTraceColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'eventType',\r\n title: '事件类型',\r\n width: 90,\r\n slots: { default: 'eventType' },\r\n },\r\n {\r\n field: 'workOrderCode',\r\n title: '生产工单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'processCode',\r\n title: '工序编码',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'processName',\r\n title: '工序名称',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'qualityStatus',\r\n title: '质量状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_QUALITY_STATUS },\r\n },\r\n },\r\n {\r\n field: 'eventTime',\r\n title: '事件时间',\r\n minWidth: 160,\r\n formatter: 'formatDateTime',\r\n },\r\n ];\r\n}\r\n" }, { "file": "mom-pro2-before\\src\\views\\wls\\batch\\data.ts", "removed": 1, "before": "import type { VbenFormSchema } from '#/adapter/form';\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\nimport type { MesWmBatchApi } from '#/api/mes/wm/batch';\nimport type { DescriptionItemSchema } from '#/components/description';\n\nimport { h, markRaw } from 'vue';\n\nimport { DICT_TYPE } from '@vben/constants';\nimport { getDictOptions } from '@vben/hooks';\nimport { formatDate } from '@vben/utils';\n\nimport { DictTag } from '#/components/dict-tag';\nimport { getRangePickerDefaultProps } from '#/utils';\nimport { MdClientSelect } from '#/views/mes/md/client/components';\nimport { MdItemSelect } from '#/views/mes/md/item/components';\nimport { MdVendorSelect } from '#/views/mes/md/vendor/components';\nimport { MdWorkstationSelect } from '#/views/mes/md/workstation/components';\nimport { ProTaskSelect } from '#/views/mes/pro/task/components';\nimport { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';\nimport { TmToolSelect } from '#/views/mes/tm/tool/components';\n\n/** 批次选择弹窗的搜索表单 */\nexport function useBatchSelectGridFormSchema(): VbenFormSchema[] {\n return [\n {\n fieldName: 'code',\n label: '批次编号',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入批次编号',\n },\n },\n {\n fieldName: 'itemId',\n label: '产品物料',\n component: markRaw(MdItemSelect),\n componentProps: {\n placeholder: '请选择产品物料',\n },\n },\n {\n fieldName: 'vendorId',\n label: '供应商',\n component: markRaw(MdVendorSelect),\n componentProps: {\n placeholder: '请选择供应商',\n },\n },\n {\n fieldName: 'clientId',\n label: '客户',\n component: markRaw(MdClientSelect),\n componentProps: {\n placeholder: '请选择客户',\n },\n },\n {\n fieldName: 'workOrderId',\n label: '生产订单',\n component: markRaw(ProWorkOrderSelect),\n componentProps: {\n placeholder: '请选择生产订单',\n },\n },\n {\n fieldName: 'workstationId',\n label: '工作站',\n component: markRaw(MdWorkstationSelect),\n componentProps: {\n placeholder: '请选择工作站',\n },\n },\n {\n fieldName: 'taskId',\n label: '生产任务',\n component: markRaw(ProTaskSelect),\n componentProps: {\n placeholder: '请选择生产任务',\n },\n },\n {\n fieldName: 'toolId',\n label: '工具',\n component: markRaw(TmToolSelect),\n componentProps: {\n placeholder: '请选择工具',\n },\n },\n {\n fieldName: 'moldId',\n label: '模具编号',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入模具编号',\n },\n },\n {\n fieldName: 'salesOrderCode',\n label: '销售订单编号',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入销售订单编号',\n },\n },\n {\n fieldName: 'purchaseOrderCode',\n label: '采购订单编号',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入采购订单编号',\n },\n },\n {\n fieldName: 'lotNumber',\n label: '生产批号',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入生产批号',\n },\n },\n {\n fieldName: 'qualityStatus',\n label: '质量状态',\n component: 'Select',\n componentProps: {\n allowClear: true,\n options: getDictOptions(DICT_TYPE.MES_WM_QUALITY_STATUS, 'number'),\n placeholder: '请选择质量状态',\n },\n },\n {\n fieldName: 'produceDate',\n label: '生产日期',\n component: 'RangePicker',\n componentProps: {\n ...getRangePickerDefaultProps(),\n allowClear: true,\n },\n },\n {\n fieldName: 'expireDate',\n label: '有效期',\n component: 'RangePicker',\n componentProps: {\n ...getRangePickerDefaultProps(),\n allowClear: true,\n },\n },\n {\n fieldName: 'receiptDate',\n label: '入库日期',\n component: 'RangePicker',\n componentProps: {\n ...getRangePickerDefaultProps(),\n allowClear: true,\n },\n },\n ];\n}\n\n/** 批次选择弹窗的字段 */\nexport function useBatchSelectGridColumns(\n multiple = false,\n): VxeTableGridOptions['columns'] {\n return [\n {\n type: multiple ? 'checkbox' : 'radio',\n width: 50,\n },\n {\n field: 'code',\n title: '批次编号',\n width: 150,\n },\n {\n field: 'itemCode',\n title: '物料编码',\n width: 150,\n },\n {\n field: 'itemName',\n title: '物料名称',\n minWidth: 140,\n },\n {\n field: 'itemSpecification',\n title: '规格型号',\n width: 120,\n },\n {\n field: 'unitName',\n title: '单位',\n width: 80,\n },\n {\n field: 'vendorCode',\n title: '供应商编码',\n width: 120,\n },\n {\n field: 'vendorName',\n title: '供应商名称',\n width: 120,\n },\n {\n field: 'clientCode',\n title: '客户编码',\n width: 110,\n },\n {\n field: 'clientName',\n title: '客户名称',\n width: 110,\n },\n {\n field: 'salesOrderCode',\n title: '销售订单编号',\n width: 140,\n },\n {\n field: 'purchaseOrderCode',\n title: '采购订单编号',\n width: 140,\n },\n {\n field: 'workOrderCode',\n title: '订单编码',\n width: 140,\n },\n {\n field: 'workstationCode',\n title: '工作站编码',\n width: 120,\n },\n {\n field: 'taskCode',\n title: '生产任务编号',\n width: 140,\n },\n {\n field: 'toolCode',\n title: '工具编号',\n width: 120,\n },\n {\n field: 'lotNumber',\n title: '生产批号',\n width: 120,\n },\n {\n field: 'qualityStatus',\n title: '质量状态',\n width: 100,\n cellRender: {\n name: 'CellDict',\n props: { type: DICT_TYPE.MES_WM_QUALITY_STATUS },\n },\n },\n {\n field: 'produceDate',\n title: '生产日期',\n width: 120,\n formatter: 'formatDate',\n },\n {\n field: 'expireDate',\n title: '有效期',\n width: 120,\n formatter: 'formatDate',\n },\n {\n field: 'receiptDate',\n title: '入库日期',\n width: 120,\n formatter: 'formatDate',\n },\n ];\n}\n\n/** 批次详情的描述字段 */\nexport function useDetailSchema(): DescriptionItemSchema[] {\n return [\n {\n field: 'code',\n label: '批次编号',\n },\n {\n field: 'itemCode',\n label: '物料编码',\n },\n {\n field: 'itemName',\n label: '物料名称',\n },\n {\n field: 'itemSpecification',\n label: '规格型号',\n },\n {\n field: 'unitName',\n label: '单位',\n },\n {\n field: 'lotNumber',\n label: '生产批号',\n },\n {\n field: 'produceDate',\n label: '生产日期',\n render: (value) => (value ? formatDate(value, 'YYYY-MM-DD') : '-'),\n },\n {\n field: 'expireDate',\n label: '有效期',\n render: (value) => (value ? formatDate(value, 'YYYY-MM-DD') : '-'),\n },\n {\n field: 'receiptDate',\n label: '入库日期',\n render: (value) => (value ? formatDate(value, 'YYYY-MM-DD') : '-'),\n },\n {\n field: 'vendorName',\n label: '供应商',\n render: (value) => value || '-',\n },\n {\n field: 'clientName',\n label: '客户',\n render: (value) => value || '-',\n },\n {\n field: 'workstationCode',\n label: '工作站',\n render: (value) => value || '-',\n },\n {\n field: 'purchaseOrderCode',\n label: '采购订单编号',\n render: (value) => value || '-',\n },\n {\n field: 'salesOrderCode',\n label: '销售订单编号',\n render: (value) => value || '-',\n },\n {\n field: 'workOrderCode',\n label: '生产订单',\n render: (value) => value || '-',\n },\n {\n field: 'qualityStatus',\n label: '质量状态',\n render: (value) =>\n value === null\n ? '-'\n : h(DictTag, { type: DICT_TYPE.MES_WM_QUALITY_STATUS, value }),\n },\n {\n field: 'remark',\n label: '备注',\n span: 3,\n render: (value) => value || '-',\n },\n ];\n}\n", "after": "import type { VbenFormSchema } from '#/adapter/form';\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\nimport type { MesWmBatchApi } from '#/api/mes/wm/batch';\nimport type { DescriptionItemSchema } from '#/components/description';\n\nimport { h, markRaw } from 'vue';\n\nimport { DICT_TYPE } from '@vben/constants';\nimport { getDictOptions } from '@vben/hooks';\nimport { formatDate } from '@vben/utils';\n\nimport { DictTag } from '#/components/dict-tag';\nimport { getRangePickerDefaultProps } from '#/utils';\nimport { MdClientSelect } from '#/views/mes/md/client/components';\nimport { MdItemSelect } from '#/views/mes/md/item/components';\nimport { MdVendorSelect } from '#/views/mes/md/vendor/components';\nimport { MdWorkstationSelect } from '#/views/mes/md/workstation/components';\nimport { ProTaskSelect } from '#/views/mes/pro/task/components';\nimport { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';\nimport { TmToolSelect } from '#/views/mes/tm/tool/components';\n\n/** 批次选择弹窗的搜索表单 */\nexport function useBatchSelectGridFormSchema(): VbenFormSchema[] {\n return [\n {\n fieldName: 'code',\n label: '批次编号',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入批次编号',\n },\n },\n {\n fieldName: 'itemId',\n label: '产品物料',\n component: markRaw(MdItemSelect),\n componentProps: {\n placeholder: '请选择产品物料',\n },\n },\n {\n fieldName: 'vendorId',\n label: '供应商',\n component: markRaw(MdVendorSelect),\n componentProps: {\n placeholder: '请选择供应商',\n },\n },\n {\n fieldName: 'clientId',\n label: '客户',\n component: markRaw(MdClientSelect),\n componentProps: {\n placeholder: '请选择客户',\n },\n },\n {\n fieldName: 'workOrderId',\n label: '生产订单',\n component: markRaw(ProWorkOrderSelect),\n componentProps: {\n placeholder: '请选择生产订单',\n },\n },\n {\n fieldName: 'workstationId',\n label: '工作站',\n component: markRaw(MdWorkstationSelect),\n componentProps: {\n placeholder: '请选择工作站',\n },\n },\n {\n fieldName: 'taskId',\n label: '生产任务',\n component: markRaw(ProTaskSelect),\n componentProps: {\n placeholder: '请选择生产任务',\n },\n },\n {\n fieldName: 'toolId',\n label: '工具',\n component: markRaw(TmToolSelect),\n componentProps: {\n placeholder: '请选择工具',\n },\n },\n {\n fieldName: 'moldId',\n label: '模具编号',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入模具编号',\n },\n },\n {\n fieldName: 'salesOrderCode',\n label: '销售订单编号',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入销售订单编号',\n },\n },\n {\n fieldName: 'purchaseOrderCode',\n label: '采购订单编号',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入采购订单编号',\n },\n },\n {\n fieldName: 'lotNumber',\n label: '生产批号',\n component: 'Input',\n componentProps: {\n allowClear: true,\n placeholder: '请输入生产批号',\n },\n },\n {\n fieldName: 'qualityStatus',\n label: '质量状态',\n component: 'Select',\n componentProps: {\n allowClear: true,\n options: getDictOptions(DICT_TYPE.MES_WM_QUALITY_STATUS, 'number'),\n placeholder: '请选择质量状态',\n },\n },\n {\n fieldName: 'produceDate',\n label: '生产日期',\n component: 'RangePicker',\n componentProps: {\n ...getRangePickerDefaultProps(),\n allowClear: true,\n },\n },\n {\n fieldName: 'expireDate',\n label: '有效期',\n component: 'RangePicker',\n componentProps: {\n ...getRangePickerDefaultProps(),\n allowClear: true,\n },\n },\n {\n fieldName: 'receiptDate',\n label: '入库日期',\n component: 'RangePicker',\n componentProps: {\n ...getRangePickerDefaultProps(),\n allowClear: true,\n },\n },\n ];\n}\n\n/** 批次选择弹窗的字段 */\nexport function useBatchSelectGridColumns(\n multiple = false,\n): VxeTableGridOptions['columns'] {\n return [\n {\n type: multiple ? 'checkbox' : 'radio',\n width: 50,\n },\n {\n field: 'code',\n title: '批次编号',\n width: 150,\n },\n {\n field: 'itemCode',\n title: '物料编码',\n width: 150,\n },\n {\n field: 'itemName',\n title: '物料名称',\n minWidth: 140,\n },\n {\n field: 'itemSpecification',\n title: '规格型号',\n width: 120,\n },\n {\n field: 'unitName',\n title: '单位',\n width: 80,\n },\n {\n field: 'vendorCode',\n title: '供应商编码',\n width: 120,\n },\n {\n field: 'vendorName',\n title: '供应商名称',\n width: 120,\n },\n {\n field: 'clientName',\n title: '客户名称',\n width: 110,\n },\n {\n field: 'salesOrderCode',\n title: '销售订单编号',\n width: 140,\n },\n {\n field: 'purchaseOrderCode',\n title: '采购订单编号',\n width: 140,\n },\n {\n field: 'workOrderCode',\n title: '订单编码',\n width: 140,\n },\n {\n field: 'workstationCode',\n title: '工作站编码',\n width: 120,\n },\n {\n field: 'taskCode',\n title: '生产任务编号',\n width: 140,\n },\n {\n field: 'toolCode',\n title: '工具编号',\n width: 120,\n },\n {\n field: 'lotNumber',\n title: '生产批号',\n width: 120,\n },\n {\n field: 'qualityStatus',\n title: '质量状态',\n width: 100,\n cellRender: {\n name: 'CellDict',\n props: { type: DICT_TYPE.MES_WM_QUALITY_STATUS },\n },\n },\n {\n field: 'produceDate',\n title: '生产日期',\n width: 120,\n formatter: 'formatDate',\n },\n {\n field: 'expireDate',\n title: '有效期',\n width: 120,\n formatter: 'formatDate',\n },\n {\n field: 'receiptDate',\n title: '入库日期',\n width: 120,\n formatter: 'formatDate',\n },\n ];\n}\n\n/** 批次详情的描述字段 */\nexport function useDetailSchema(): DescriptionItemSchema[] {\n return [\n {\n field: 'code',\n label: '批次编号',\n },\n {\n field: 'itemCode',\n label: '物料编码',\n },\n {\n field: 'itemName',\n label: '物料名称',\n },\n {\n field: 'itemSpecification',\n label: '规格型号',\n },\n {\n field: 'unitName',\n label: '单位',\n },\n {\n field: 'lotNumber',\n label: '生产批号',\n },\n {\n field: 'produceDate',\n label: '生产日期',\n render: (value) => (value ? formatDate(value, 'YYYY-MM-DD') : '-'),\n },\n {\n field: 'expireDate',\n label: '有效期',\n render: (value) => (value ? formatDate(value, 'YYYY-MM-DD') : '-'),\n },\n {\n field: 'receiptDate',\n label: '入库日期',\n render: (value) => (value ? formatDate(value, 'YYYY-MM-DD') : '-'),\n },\n {\n field: 'vendorName',\n label: '供应商',\n render: (value) => value || '-',\n },\n {\n field: 'clientName',\n label: '客户',\n render: (value) => value || '-',\n },\n {\n field: 'workstationCode',\n label: '工作站',\n render: (value) => value || '-',\n },\n {\n field: 'purchaseOrderCode',\n label: '采购订单编号',\n render: (value) => value || '-',\n },\n {\n field: 'salesOrderCode',\n label: '销售订单编号',\n render: (value) => value || '-',\n },\n {\n field: 'workOrderCode',\n label: '生产订单',\n render: (value) => value || '-',\n },\n {\n field: 'qualityStatus',\n label: '质量状态',\n render: (value) =>\n value === null\n ? '-'\n : h(DictTag, { type: DICT_TYPE.MES_WM_QUALITY_STATUS, value }),\n },\n {\n field: 'remark',\n label: '备注',\n span: 3,\n render: (value) => value || '-',\n },\n ];\n}\n" }, { "file": "mom-pro2-before\\src\\views\\wls\\packages\\data.ts", "removed": 3, "before": "import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';\r\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\r\nimport type { MesWmPackageApi } from '#/api/mes/wm/packages';\r\nimport type { MesWmPackageLineApi } from '#/api/mes/wm/packages/line';\r\n\r\nimport { h, markRaw } from 'vue';\r\n\r\nimport {\r\n DICT_TYPE,\r\n MesAutoCodeRuleCode,\r\n} from '@vben/constants';\r\n\r\nimport { Button } from 'ant-design-vue';\r\n\r\nimport { generateAutoCode } from '#/api/mes/md/autocode/record';\r\nimport { getSimpleUserList } from '#/api/system/user';\r\nimport { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';\r\nimport { MdClientSelect } from '#/views/mes/md/client/components';\r\nimport { MdItemSelect } from '#/views/mes/md/item/components';\r\nimport { MdUnitMeasureSelect } from '#/views/mes/md/unitmeasure/components';\r\nimport { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';\r\n\r\n/** 表单类型 */\r\nexport type FormType = 'create' | 'detail' | 'update';\r\n\r\n/** 新增/修改的表单 */\r\nexport function useFormSchema(\r\n formType: FormType,\r\n formApi?: VbenFormApi,\r\n): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'id',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'code',\r\n label: '装箱单编号',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '请输入装箱单编号',\r\n },\r\n rules: 'required',\r\n suffix:\r\n formType === 'detail'\r\n ? undefined\r\n : () =>\r\n h(\r\n Button,\r\n {\r\n type: 'default',\r\n onClick: async () => {\r\n const code = await generateAutoCode(\r\n MesAutoCodeRuleCode.WM_PACKAGE_CODE,\r\n );\r\n await formApi?.setFieldValue('code', code);\r\n },\r\n },\r\n { default: () => '生成' },\r\n ),\r\n },\r\n {\r\n fieldName: 'packageDate',\r\n label: '装箱日期',\r\n component: 'DatePicker',\r\n componentProps: {\r\n format: 'YYYY-MM-DD',\r\n placeholder: '请选择装箱日期',\r\n valueFormat: 'YYYY-MM-DD',\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'inspectorUserId',\r\n label: '检查员',\r\n component: 'ApiSelect',\r\n componentProps: {\r\n allowClear: true,\r\n api: getSimpleUserList,\r\n labelField: 'nickname',\r\n placeholder: '请选择检查员',\r\n valueField: 'id',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'saleOrderId',\r\n label: '销售订单编号',\r\n component: markRaw(ErpSaleOrderSelect),\r\n componentProps: {\r\n placeholder: '请选择销售订单',\r\n onChange: (item: any) => {\r\n if (formApi) {\r\n formApi.setFieldValue('salesOrderCode', item?.no ?? '');\r\n formApi.setFieldValue('clientId', item?.customerId ?? undefined);\r\n formApi.setFieldValue('clientName', item?.customerName ?? '');\r\n }\r\n },\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'invoiceCode',\r\n label: '发票编号',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '请输入发票编号',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'clientName',\r\n label: '客户',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '选择销售订单后自动反显',\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'sizeUnitId',\r\n label: '尺寸单位',\r\n component: markRaw(MdUnitMeasureSelect),\r\n componentProps: {\r\n placeholder: '请选择尺寸单位',\r\n },\r\n },\r\n {\r\n fieldName: 'length',\r\n label: '箱长度',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入箱长度',\r\n precision: 2,\r\n },\r\n },\r\n {\r\n fieldName: 'width',\r\n label: '箱宽度',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入箱宽度',\r\n precision: 2,\r\n },\r\n },\r\n {\r\n fieldName: 'height',\r\n label: '箱高度',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入箱高度',\r\n precision: 2,\r\n },\r\n },\r\n {\r\n fieldName: 'weightUnitId',\r\n label: '重量单位',\r\n component: markRaw(MdUnitMeasureSelect),\r\n componentProps: {\r\n placeholder: '请选择重量单位',\r\n },\r\n },\r\n {\r\n fieldName: 'netWeight',\r\n label: '净重',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入净重',\r\n precision: 2,\r\n },\r\n },\r\n {\r\n fieldName: 'grossWeight',\r\n label: '毛重',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入毛重',\r\n precision: 2,\r\n },\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的搜索表单 */\r\nexport function useGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '装箱单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入装箱单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n label: '销售订单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入销售订单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(MdClientSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'inspectorUserId',\r\n label: '检查员',\r\n component: 'ApiSelect',\r\n componentProps: {\r\n allowClear: true,\r\n api: getSimpleUserList,\r\n labelField: 'nickname',\r\n placeholder: '请选择检查员',\r\n valueField: 'id',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的字段 */\r\nexport function useGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '装箱单编号',\r\n minWidth: 250,\r\n fixed: 'left',\r\n treeNode: true,\r\n slots: { default: 'code' },\r\n },\r\n {\r\n field: 'packageDate',\r\n title: '装箱日期',\r\n width: 120,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单编号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'invoiceCode',\r\n title: '发票编号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'clientCode',\r\n title: '客户编码',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'length',\r\n title: '箱长度',\r\n width: 80,\r\n },\r\n {\r\n field: 'width',\r\n title: '箱宽度',\r\n width: 80,\r\n },\r\n {\r\n field: 'height',\r\n title: '箱高度',\r\n width: 80,\r\n },\r\n {\r\n field: 'sizeUnitName',\r\n title: '尺寸单位',\r\n width: 90,\r\n },\r\n {\r\n field: 'netWeight',\r\n title: '净重',\r\n width: 80,\r\n },\r\n {\r\n field: 'grossWeight',\r\n title: '毛重',\r\n width: 80,\r\n },\r\n {\r\n field: 'weightUnitName',\r\n title: '重量单位',\r\n width: 90,\r\n },\r\n {\r\n field: 'inspectorName',\r\n title: '检查员',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'status',\r\n title: '单据状态',\r\n minWidth: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_PACKAGE_STATUS },\r\n },\r\n },\r\n {\r\n title: '操作',\r\n width: 160,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 子箱列表的字段 */\r\nexport function useSubPackageGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '装箱单编号',\r\n minWidth: 160,\r\n fixed: 'left',\r\n },\r\n {\r\n field: 'packageDate',\r\n title: '装箱日期',\r\n width: 120,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单编号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'invoiceCode',\r\n title: '发票编号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'clientCode',\r\n title: '客户编码',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'netWeight',\r\n title: '净重',\r\n width: 80,\r\n },\r\n {\r\n field: 'grossWeight',\r\n title: '毛重',\r\n width: 80,\r\n },\r\n {\r\n field: 'weightUnitName',\r\n title: '重量单位',\r\n width: 90,\r\n },\r\n {\r\n field: 'inspectorName',\r\n title: '检查员',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'status',\r\n title: '单据状态',\r\n minWidth: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_PACKAGE_STATUS },\r\n },\r\n },\r\n {\r\n title: '操作',\r\n width: 100,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 装箱明细的表单 */\r\nexport function useLineFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'workOrderId',\r\n label: '生产订单',\r\n component: markRaw(ProWorkOrderSelect),\r\n componentProps: {\r\n placeholder: '请选择生产订单',\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'itemId',\r\n label: '产品物料',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n placeholder: '请选择产品物料',\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '装箱数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0.01,\r\n placeholder: '请输入装箱数量',\r\n precision: 2,\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'expireDate',\r\n label: '有效期',\r\n component: 'DatePicker',\r\n componentProps: {\r\n format: 'YYYY-MM-DD',\r\n placeholder: '请选择有效期',\r\n valueFormat: 'YYYY-MM-DD',\r\n },\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-2',\r\n componentProps: {\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 装箱明细列表的字段 */\r\nexport function useLineGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'itemCode',\r\n title: '产品物料编码',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '产品物料名称',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'specification',\r\n title: '规格型号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '装箱数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'workOrderCode',\r\n title: '生产订单编号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'batchCode',\r\n title: '批次号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'expireDate',\r\n title: '有效期',\r\n width: 120,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n title: '操作',\r\n width: 120,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 选择弹窗的搜索表单 */\r\nexport function useSelectGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '装箱单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入装箱单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n label: '销售订单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入销售订单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(MdClientSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'inspectorUserId',\r\n label: '检查员',\r\n component: 'ApiSelect',\r\n componentProps: {\r\n allowClear: true,\r\n api: getSimpleUserList,\r\n labelField: 'nickname',\r\n placeholder: '请选择检查员',\r\n valueField: 'id',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 选择弹窗的字段 */\r\nexport function useSelectGridColumns(\r\n multiple = true,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n type: multiple ? 'checkbox' : 'radio',\r\n width: 50,\r\n },\r\n {\r\n field: 'code',\r\n title: '装箱单编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'packageDate',\r\n title: '装箱日期',\r\n width: 120,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单编号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'invoiceCode',\r\n title: '发票编号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'clientCode',\r\n title: '客户编码',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'netWeight',\r\n title: '净重',\r\n width: 80,\r\n },\r\n {\r\n field: 'grossWeight',\r\n title: '毛重',\r\n width: 80,\r\n },\r\n {\r\n field: 'weightUnitName',\r\n title: '重量单位',\r\n width: 90,\r\n },\r\n {\r\n field: 'inspectorName',\r\n title: '检查员',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'status',\r\n title: '单据状态',\r\n minWidth: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_PACKAGE_STATUS },\r\n },\r\n },\r\n ];\r\n}\r\n", "after": "import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';\r\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\r\nimport type { MesWmPackageApi } from '#/api/mes/wm/packages';\r\nimport type { MesWmPackageLineApi } from '#/api/mes/wm/packages/line';\r\n\r\nimport { h, markRaw } from 'vue';\r\n\r\nimport {\r\n DICT_TYPE,\r\n MesAutoCodeRuleCode,\r\n} from '@vben/constants';\r\n\r\nimport { Button } from 'ant-design-vue';\r\n\r\nimport { generateAutoCode } from '#/api/mes/md/autocode/record';\r\nimport { getSimpleUserList } from '#/api/system/user';\r\nimport { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';\r\nimport { MdClientSelect } from '#/views/mes/md/client/components';\r\nimport { MdItemSelect } from '#/views/mes/md/item/components';\r\nimport { MdUnitMeasureSelect } from '#/views/mes/md/unitmeasure/components';\r\nimport { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';\r\n\r\n/** 表单类型 */\r\nexport type FormType = 'create' | 'detail' | 'update';\r\n\r\n/** 新增/修改的表单 */\r\nexport function useFormSchema(\r\n formType: FormType,\r\n formApi?: VbenFormApi,\r\n): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'id',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'code',\r\n label: '装箱单编号',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '请输入装箱单编号',\r\n },\r\n rules: 'required',\r\n suffix:\r\n formType === 'detail'\r\n ? undefined\r\n : () =>\r\n h(\r\n Button,\r\n {\r\n type: 'default',\r\n onClick: async () => {\r\n const code = await generateAutoCode(\r\n MesAutoCodeRuleCode.WM_PACKAGE_CODE,\r\n );\r\n await formApi?.setFieldValue('code', code);\r\n },\r\n },\r\n { default: () => '生成' },\r\n ),\r\n },\r\n {\r\n fieldName: 'packageDate',\r\n label: '装箱日期',\r\n component: 'DatePicker',\r\n componentProps: {\r\n format: 'YYYY-MM-DD',\r\n placeholder: '请选择装箱日期',\r\n valueFormat: 'YYYY-MM-DD',\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'inspectorUserId',\r\n label: '检查员',\r\n component: 'ApiSelect',\r\n componentProps: {\r\n allowClear: true,\r\n api: getSimpleUserList,\r\n labelField: 'nickname',\r\n placeholder: '请选择检查员',\r\n valueField: 'id',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'saleOrderId',\r\n label: '销售订单编号',\r\n component: markRaw(ErpSaleOrderSelect),\r\n componentProps: {\r\n placeholder: '请选择销售订单',\r\n onChange: (item: any) => {\r\n if (formApi) {\r\n formApi.setFieldValue('salesOrderCode', item?.no ?? '');\r\n formApi.setFieldValue('clientId', item?.customerId ?? undefined);\r\n formApi.setFieldValue('clientName', item?.customerName ?? '');\r\n }\r\n },\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'invoiceCode',\r\n label: '发票编号',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '请输入发票编号',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'clientName',\r\n label: '客户',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '选择销售订单后自动反显',\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'sizeUnitId',\r\n label: '尺寸单位',\r\n component: markRaw(MdUnitMeasureSelect),\r\n componentProps: {\r\n placeholder: '请选择尺寸单位',\r\n },\r\n },\r\n {\r\n fieldName: 'length',\r\n label: '箱长度',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入箱长度',\r\n precision: 2,\r\n },\r\n },\r\n {\r\n fieldName: 'width',\r\n label: '箱宽度',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入箱宽度',\r\n precision: 2,\r\n },\r\n },\r\n {\r\n fieldName: 'height',\r\n label: '箱高度',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入箱高度',\r\n precision: 2,\r\n },\r\n },\r\n {\r\n fieldName: 'weightUnitId',\r\n label: '重量单位',\r\n component: markRaw(MdUnitMeasureSelect),\r\n componentProps: {\r\n placeholder: '请选择重量单位',\r\n },\r\n },\r\n {\r\n fieldName: 'netWeight',\r\n label: '净重',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入净重',\r\n precision: 2,\r\n },\r\n },\r\n {\r\n fieldName: 'grossWeight',\r\n label: '毛重',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入毛重',\r\n precision: 2,\r\n },\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的搜索表单 */\r\nexport function useGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '装箱单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入装箱单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n label: '销售订单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入销售订单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(MdClientSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'inspectorUserId',\r\n label: '检查员',\r\n component: 'ApiSelect',\r\n componentProps: {\r\n allowClear: true,\r\n api: getSimpleUserList,\r\n labelField: 'nickname',\r\n placeholder: '请选择检查员',\r\n valueField: 'id',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的字段 */\r\nexport function useGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '装箱单编号',\r\n minWidth: 250,\r\n fixed: 'left',\r\n treeNode: true,\r\n slots: { default: 'code' },\r\n },\r\n {\r\n field: 'packageDate',\r\n title: '装箱日期',\r\n width: 120,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单编号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'invoiceCode',\r\n title: '发票编号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'length',\r\n title: '箱长度',\r\n width: 80,\r\n },\r\n {\r\n field: 'width',\r\n title: '箱宽度',\r\n width: 80,\r\n },\r\n {\r\n field: 'height',\r\n title: '箱高度',\r\n width: 80,\r\n },\r\n {\r\n field: 'sizeUnitName',\r\n title: '尺寸单位',\r\n width: 90,\r\n },\r\n {\r\n field: 'netWeight',\r\n title: '净重',\r\n width: 80,\r\n },\r\n {\r\n field: 'grossWeight',\r\n title: '毛重',\r\n width: 80,\r\n },\r\n {\r\n field: 'weightUnitName',\r\n title: '重量单位',\r\n width: 90,\r\n },\r\n {\r\n field: 'inspectorName',\r\n title: '检查员',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'status',\r\n title: '单据状态',\r\n minWidth: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_PACKAGE_STATUS },\r\n },\r\n },\r\n {\r\n title: '操作',\r\n width: 160,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 子箱列表的字段 */\r\nexport function useSubPackageGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '装箱单编号',\r\n minWidth: 160,\r\n fixed: 'left',\r\n },\r\n {\r\n field: 'packageDate',\r\n title: '装箱日期',\r\n width: 120,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单编号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'invoiceCode',\r\n title: '发票编号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'netWeight',\r\n title: '净重',\r\n width: 80,\r\n },\r\n {\r\n field: 'grossWeight',\r\n title: '毛重',\r\n width: 80,\r\n },\r\n {\r\n field: 'weightUnitName',\r\n title: '重量单位',\r\n width: 90,\r\n },\r\n {\r\n field: 'inspectorName',\r\n title: '检查员',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'status',\r\n title: '单据状态',\r\n minWidth: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_PACKAGE_STATUS },\r\n },\r\n },\r\n {\r\n title: '操作',\r\n width: 100,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 装箱明细的表单 */\r\nexport function useLineFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'workOrderId',\r\n label: '生产订单',\r\n component: markRaw(ProWorkOrderSelect),\r\n componentProps: {\r\n placeholder: '请选择生产订单',\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'itemId',\r\n label: '产品物料',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n placeholder: '请选择产品物料',\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '装箱数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0.01,\r\n placeholder: '请输入装箱数量',\r\n precision: 2,\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'expireDate',\r\n label: '有效期',\r\n component: 'DatePicker',\r\n componentProps: {\r\n format: 'YYYY-MM-DD',\r\n placeholder: '请选择有效期',\r\n valueFormat: 'YYYY-MM-DD',\r\n },\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-2',\r\n componentProps: {\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 装箱明细列表的字段 */\r\nexport function useLineGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'itemCode',\r\n title: '产品物料编码',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '产品物料名称',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'specification',\r\n title: '规格型号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '装箱数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'workOrderCode',\r\n title: '生产订单编号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'batchCode',\r\n title: '批次号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'expireDate',\r\n title: '有效期',\r\n width: 120,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n title: '操作',\r\n width: 120,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 选择弹窗的搜索表单 */\r\nexport function useSelectGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '装箱单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入装箱单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n label: '销售订单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入销售订单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(MdClientSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'inspectorUserId',\r\n label: '检查员',\r\n component: 'ApiSelect',\r\n componentProps: {\r\n allowClear: true,\r\n api: getSimpleUserList,\r\n labelField: 'nickname',\r\n placeholder: '请选择检查员',\r\n valueField: 'id',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 选择弹窗的字段 */\r\nexport function useSelectGridColumns(\r\n multiple = true,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n type: multiple ? 'checkbox' : 'radio',\r\n width: 50,\r\n },\r\n {\r\n field: 'code',\r\n title: '装箱单编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'packageDate',\r\n title: '装箱日期',\r\n width: 120,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单编号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'invoiceCode',\r\n title: '发票编号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'netWeight',\r\n title: '净重',\r\n width: 80,\r\n },\r\n {\r\n field: 'grossWeight',\r\n title: '毛重',\r\n width: 80,\r\n },\r\n {\r\n field: 'weightUnitName',\r\n title: '重量单位',\r\n width: 90,\r\n },\r\n {\r\n field: 'inspectorName',\r\n title: '检查员',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'status',\r\n title: '单据状态',\r\n minWidth: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_PACKAGE_STATUS },\r\n },\r\n },\r\n ];\r\n}\r\n" }, { "file": "mom-pro2-before\\src\\views\\wls\\productsales\\data.ts", "removed": 1, "before": "import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';\r\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\r\nimport type { MesWmMaterialStockApi } from '#/api/mes/wm/materialstock';\r\nimport type { MesWmProductSalesApi } from '#/api/mes/wm/productsales';\r\nimport type { MesWmProductSalesDetailApi } from '#/api/mes/wm/productsales/detail';\r\nimport type { MesWmProductSalesLineApi } from '#/api/mes/wm/productsales/line';\r\nimport type { MesWmSalesNoticeApi } from '#/api/mes/wm/salesnotice';\r\nimport type { MesWmSalesNoticeLineApi } from '#/api/mes/wm/salesnotice/line';\r\n\r\nimport { h, markRaw } from 'vue';\r\n\r\nimport {\r\n DICT_TYPE,\r\n MesAutoCodeRuleCode,\r\n MesWmSalesNoticeStatusEnum,\r\n} from '@vben/constants';\r\nimport { getDictOptions } from '@vben/hooks';\r\n\r\nimport { Button } from 'ant-design-vue';\r\n\r\nimport { z } from '#/adapter/form';\r\nimport CrmCustomerSelect from '#/components/crm-customer-select.vue';\r\nimport { generateAutoCode } from '#/api/mes/md/autocode/record';\r\nimport { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';\r\nimport { getRangePickerDefaultProps } from '#/utils';\r\nimport { MdItemSelect } from '#/views/mes/md/item/components';\r\nimport { WmMaterialStockSelect } from '#/views/wls/materialstock/components';\r\nimport {\r\n WmSalesNoticeLineSelect,\r\n WmSalesNoticeSelect,\r\n} from '#/views/wls/salesnotice/components';\r\nimport {\r\n WmWarehouseAreaSelect,\r\n WmWarehouseLocationSelect,\r\n WmWarehouseSelect,\r\n} from '#/views/wls/warehouse/components';\r\n\r\n/** 表单类型 */\r\nexport type FormType =\r\n | 'create'\r\n | 'detail'\r\n | 'finish'\r\n | 'shipping'\r\n | 'stock'\r\n | 'update';\r\n\r\n/** 表单头部是否只读(拣货、填写运单、出库、详情态) */\r\nfunction isHeaderReadonly(formType: FormType): boolean {\r\n return (\r\n formType === 'detail' ||\r\n formType === 'finish' ||\r\n formType === 'shipping' ||\r\n formType === 'stock'\r\n );\r\n}\r\n\r\n/** 是否展示运输信息 */\r\nexport function showShippingInfo(formType: FormType): boolean {\r\n return (\r\n formType === 'shipping' || formType === 'detail' || formType === 'finish'\r\n );\r\n}\r\n\r\n/** 新增/修改的表单 */\r\nexport function useFormSchema(\r\n formType: FormType,\r\n formApi?: VbenFormApi,\r\n): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'id',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'code',\r\n label: '出库单编号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请输入出库单编号',\r\n },\r\n rules: 'required',\r\n suffix: isHeaderReadonly(formType)\r\n ? undefined\r\n : () =>\r\n h(\r\n Button,\r\n {\r\n type: 'default',\r\n onClick: async () => {\r\n const code = await generateAutoCode(\r\n MesAutoCodeRuleCode.WM_PRODUCT_SALES_CODE,\r\n );\r\n await formApi?.setFieldValue('code', code);\r\n },\r\n },\r\n { default: () => '生成' },\r\n ),\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '出库单名称',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请输入出库单名称',\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'noticeId',\r\n label: '发货通知单',\r\n component: markRaw(WmSalesNoticeSelect),\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n // 选择发货通知单后,自动回填销售订单号、客户、收货人信息\r\n onChange: async (notice?: MesWmSalesNoticeApi.SalesNotice) => {\r\n await formApi?.setValues({\r\n clientId: notice?.clientId,\r\n contactAddress: notice?.recipientAddress,\r\n contactName: notice?.recipientName,\r\n contactTelephone: notice?.recipientTelephone,\r\n salesOrderCode: notice?.salesOrderCode,\r\n });\r\n },\r\n status: MesWmSalesNoticeStatusEnum.APPROVED,\r\n },\r\n },\r\n {\r\n fieldName: 'saleOrderId',\r\n label: '销售订单编号',\r\n component: markRaw(ErpSaleOrderSelect),\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请选择销售订单',\r\n onChange: (item: any) => {\r\n if (formApi) {\r\n formApi.setFieldValue('salesOrderCode', item?.no ?? '');\r\n if (item?.customerId) {\r\n formApi.setFieldValue('clientId', item.customerId);\r\n }\r\n }\r\n },\r\n },\r\n rules: 'selectRequired',\r\n dependencies: {\r\n triggerFields: ['salesOrderCode'],\r\n if: () => formType === 'create',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n label: '销售订单编号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n placeholder: '销售订单编号',\r\n },\r\n dependencies: {\r\n triggerFields: [''],\r\n if: () => formType !== 'create',\r\n },\r\n },\r\n {\r\n fieldName: 'salesDate',\r\n label: '出库日期',\r\n component: 'DatePicker',\r\n componentProps: {\r\n class: '!w-full',\r\n disabled: isHeaderReadonly(formType),\r\n format: 'YYYY-MM-DD',\r\n placeholder: '请选择出库日期',\r\n valueFormat: 'YYYY-MM-DD',\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请选择客户',\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'contactName',\r\n label: '收货人',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请输入收货人',\r\n },\r\n },\r\n {\r\n fieldName: 'contactTelephone',\r\n label: '联系方式',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请输入联系方式',\r\n },\r\n },\r\n {\r\n fieldName: 'contactAddress',\r\n label: '收货地址',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请输入收货地址',\r\n },\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n {\r\n fieldName: 'carrier',\r\n label: '承运商',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: formType !== 'shipping',\r\n placeholder: '请输入承运商',\r\n },\r\n dependencies: {\r\n triggerFields: [''],\r\n if: () => showShippingInfo(formType),\r\n },\r\n },\r\n {\r\n fieldName: 'shippingNumber',\r\n label: '运输单号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: formType !== 'shipping',\r\n placeholder: '请输入运输单号',\r\n },\r\n dependencies: {\r\n triggerFields: [''],\r\n if: () => showShippingInfo(formType),\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的搜索表单 */\r\nexport function useGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '出库单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入出库单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '出库单名称',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入出库单名称',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n label: '销售订单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入销售订单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'salesDate',\r\n label: '出库日期',\r\n component: 'RangePicker',\r\n componentProps: {\r\n ...getRangePickerDefaultProps(),\r\n allowClear: true,\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n label: '单据状态',\r\n component: 'Select',\r\n componentProps: {\r\n allowClear: true,\r\n options: getDictOptions(\r\n DICT_TYPE.MES_WM_PRODUCT_SALES_STATUS,\r\n 'number',\r\n ),\r\n placeholder: '请选择单据状态',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的字段 */\r\nexport function useGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '出库单编号',\r\n minWidth: 160,\r\n slots: { default: 'code' },\r\n },\r\n {\r\n field: 'name',\r\n title: '出库单名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'noticeCode',\r\n title: '发货通知单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'clientCode',\r\n title: '客户编码',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'contactName',\r\n title: '收货人',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'carrier',\r\n title: '承运商',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'shippingNumber',\r\n title: '运输单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'salesDate',\r\n title: '出库日期',\r\n width: 180,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'status',\r\n title: '单据状态',\r\n minWidth: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_PRODUCT_SALES_STATUS },\r\n },\r\n },\r\n {\r\n title: '操作',\r\n width: 240,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 出库单行子表的字段 */\r\nexport function useLineGridColumns(\r\n editable: boolean,\r\n stockable: boolean,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n type: 'expand',\r\n width: 48,\r\n slots: { content: 'detail' },\r\n },\r\n {\r\n field: 'itemCode',\r\n title: '产品编码',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '产品名称',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'specification',\r\n title: '规格型号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '出库数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'batchCode',\r\n title: '批次号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'oqcCheckFlag',\r\n title: '是否校验',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.INFRA_BOOLEAN_STRING },\r\n },\r\n },\r\n {\r\n field: 'remark',\r\n title: '备注',\r\n minWidth: 150,\r\n },\r\n ...(editable || stockable\r\n ? [\r\n {\r\n title: '操作',\r\n width: 160,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n } as const,\r\n ]\r\n : []),\r\n ];\r\n}\r\n\r\n/** 出库单行新增/修改的表单 */\r\nexport function useLineFormSchema(\r\n hasNotice: boolean,\r\n formApi?: VbenFormApi,\r\n): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'noticeId',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'noticeLineId',\r\n label: '发货通知单行',\r\n component: markRaw(WmSalesNoticeLineSelect),\r\n componentProps: {\r\n // 选择发货通知单行后,自动回填物料、数量、批次、是否检验\r\n onChange: async (line?: MesWmSalesNoticeLineApi.SalesNoticeLine) => {\r\n await formApi?.setValues({\r\n batchCode: line?.batchCode,\r\n itemId: line?.itemId,\r\n oqcCheckFlag: line?.oqcCheckFlag ?? false,\r\n quantity: line?.quantity,\r\n });\r\n },\r\n },\r\n dependencies: {\r\n triggerFields: ['noticeId'],\r\n if: () => hasNotice,\r\n componentProps: (values) => ({\r\n noticeId: values.noticeId,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'itemId',\r\n label: '产品',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n placeholder: '请选择产品',\r\n },\r\n rules: 'selectRequired',\r\n dependencies: {\r\n triggerFields: ['noticeLineId'],\r\n componentProps: (values) => ({\r\n disabled: !!values.noticeLineId,\r\n placeholder: '请选择产品',\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'batchCode',\r\n label: '批次号',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '请输入批次号',\r\n },\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '出库数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入出库数量',\r\n precision: 2,\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'oqcCheckFlag',\r\n label: '是否校验',\r\n component: 'RadioGroup',\r\n componentProps: {\r\n buttonStyle: 'solid',\r\n optionType: 'button',\r\n options: getDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING, 'boolean'),\r\n },\r\n rules: z.boolean().default(false),\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 拣货明细子表的字段 */\r\nexport function useDetailGridColumns(\r\n stockable: boolean,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'warehouseName',\r\n title: '仓库名称',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'locationName',\r\n title: '库区名称',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'areaName',\r\n title: '库位名称',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '数量',\r\n width: 100,\r\n },\r\n ...(stockable\r\n ? [\r\n {\r\n title: '操作',\r\n width: 120,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n } as const,\r\n ]\r\n : []),\r\n ];\r\n}\r\n\r\n/** 拣货明细新增/修改的表单 */\r\nexport function useDetailFormSchema(formApi?: VbenFormApi): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'quantityMax',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'batchId',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'itemId',\r\n label: '物料',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'materialStockId',\r\n label: '选择库存',\r\n component: markRaw(WmMaterialStockSelect),\r\n componentProps: {\r\n // 选择库存记录后,自动回填仓库/库区/库位/批次/数量\r\n onChange: async (stock?: MesWmMaterialStockApi.MaterialStock) => {\r\n await formApi?.setValues({\r\n areaId: stock?.areaId,\r\n batchCode: stock?.batchCode,\r\n batchId: stock?.batchId,\r\n locationId: stock?.locationId,\r\n quantity: stock?.quantity,\r\n quantityMax: stock?.quantity,\r\n warehouseId: stock?.warehouseId,\r\n });\r\n },\r\n },\r\n rules: 'selectRequired',\r\n dependencies: {\r\n triggerFields: ['itemId', 'batchId'],\r\n componentProps: (values) => ({\r\n batchId: values.batchId,\r\n itemId: values.itemId,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入数量',\r\n precision: 2,\r\n },\r\n rules: 'required',\r\n dependencies: {\r\n triggerFields: ['quantityMax'],\r\n componentProps: (values) => ({\r\n class: '!w-full',\r\n max: values.quantityMax,\r\n min: 0,\r\n placeholder: '请输入数量',\r\n precision: 2,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'warehouseId',\r\n label: '出库仓库',\r\n component: markRaw(WmWarehouseSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'locationId',\r\n label: '库区',\r\n component: markRaw(WmWarehouseLocationSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n dependencies: {\r\n triggerFields: ['warehouseId'],\r\n componentProps: (values) => ({\r\n disabled: true,\r\n warehouseId: values.warehouseId,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'areaId',\r\n label: '库位',\r\n component: markRaw(WmWarehouseAreaSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n dependencies: {\r\n triggerFields: ['locationId'],\r\n componentProps: (values) => ({\r\n disabled: true,\r\n locationId: values.locationId,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'batchCode',\r\n label: '批次号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n ];\r\n}\r\n", "after": "import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';\r\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\r\nimport type { MesWmMaterialStockApi } from '#/api/mes/wm/materialstock';\r\nimport type { MesWmProductSalesApi } from '#/api/mes/wm/productsales';\r\nimport type { MesWmProductSalesDetailApi } from '#/api/mes/wm/productsales/detail';\r\nimport type { MesWmProductSalesLineApi } from '#/api/mes/wm/productsales/line';\r\nimport type { MesWmSalesNoticeApi } from '#/api/mes/wm/salesnotice';\r\nimport type { MesWmSalesNoticeLineApi } from '#/api/mes/wm/salesnotice/line';\r\n\r\nimport { h, markRaw } from 'vue';\r\n\r\nimport {\r\n DICT_TYPE,\r\n MesAutoCodeRuleCode,\r\n MesWmSalesNoticeStatusEnum,\r\n} from '@vben/constants';\r\nimport { getDictOptions } from '@vben/hooks';\r\n\r\nimport { Button } from 'ant-design-vue';\r\n\r\nimport { z } from '#/adapter/form';\r\nimport CrmCustomerSelect from '#/components/crm-customer-select.vue';\r\nimport { generateAutoCode } from '#/api/mes/md/autocode/record';\r\nimport { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';\r\nimport { getRangePickerDefaultProps } from '#/utils';\r\nimport { MdItemSelect } from '#/views/mes/md/item/components';\r\nimport { WmMaterialStockSelect } from '#/views/wls/materialstock/components';\r\nimport {\r\n WmSalesNoticeLineSelect,\r\n WmSalesNoticeSelect,\r\n} from '#/views/wls/salesnotice/components';\r\nimport {\r\n WmWarehouseAreaSelect,\r\n WmWarehouseLocationSelect,\r\n WmWarehouseSelect,\r\n} from '#/views/wls/warehouse/components';\r\n\r\n/** 表单类型 */\r\nexport type FormType =\r\n | 'create'\r\n | 'detail'\r\n | 'finish'\r\n | 'shipping'\r\n | 'stock'\r\n | 'update';\r\n\r\n/** 表单头部是否只读(拣货、填写运单、出库、详情态) */\r\nfunction isHeaderReadonly(formType: FormType): boolean {\r\n return (\r\n formType === 'detail' ||\r\n formType === 'finish' ||\r\n formType === 'shipping' ||\r\n formType === 'stock'\r\n );\r\n}\r\n\r\n/** 是否展示运输信息 */\r\nexport function showShippingInfo(formType: FormType): boolean {\r\n return (\r\n formType === 'shipping' || formType === 'detail' || formType === 'finish'\r\n );\r\n}\r\n\r\n/** 新增/修改的表单 */\r\nexport function useFormSchema(\r\n formType: FormType,\r\n formApi?: VbenFormApi,\r\n): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'id',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'code',\r\n label: '出库单编号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请输入出库单编号',\r\n },\r\n rules: 'required',\r\n suffix: isHeaderReadonly(formType)\r\n ? undefined\r\n : () =>\r\n h(\r\n Button,\r\n {\r\n type: 'default',\r\n onClick: async () => {\r\n const code = await generateAutoCode(\r\n MesAutoCodeRuleCode.WM_PRODUCT_SALES_CODE,\r\n );\r\n await formApi?.setFieldValue('code', code);\r\n },\r\n },\r\n { default: () => '生成' },\r\n ),\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '出库单名称',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请输入出库单名称',\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'noticeId',\r\n label: '发货通知单',\r\n component: markRaw(WmSalesNoticeSelect),\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n // 选择发货通知单后,自动回填销售订单号、客户、收货人信息\r\n onChange: async (notice?: MesWmSalesNoticeApi.SalesNotice) => {\r\n await formApi?.setValues({\r\n clientId: notice?.clientId,\r\n contactAddress: notice?.recipientAddress,\r\n contactName: notice?.recipientName,\r\n contactTelephone: notice?.recipientTelephone,\r\n salesOrderCode: notice?.salesOrderCode,\r\n });\r\n },\r\n status: MesWmSalesNoticeStatusEnum.APPROVED,\r\n },\r\n },\r\n {\r\n fieldName: 'saleOrderId',\r\n label: '销售订单编号',\r\n component: markRaw(ErpSaleOrderSelect),\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请选择销售订单',\r\n onChange: (item: any) => {\r\n if (formApi) {\r\n formApi.setFieldValue('salesOrderCode', item?.no ?? '');\r\n if (item?.customerId) {\r\n formApi.setFieldValue('clientId', item.customerId);\r\n }\r\n }\r\n },\r\n },\r\n rules: 'selectRequired',\r\n dependencies: {\r\n triggerFields: ['salesOrderCode'],\r\n if: () => formType === 'create',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n label: '销售订单编号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n placeholder: '销售订单编号',\r\n },\r\n dependencies: {\r\n triggerFields: [''],\r\n if: () => formType !== 'create',\r\n },\r\n },\r\n {\r\n fieldName: 'salesDate',\r\n label: '出库日期',\r\n component: 'DatePicker',\r\n componentProps: {\r\n class: '!w-full',\r\n disabled: isHeaderReadonly(formType),\r\n format: 'YYYY-MM-DD',\r\n placeholder: '请选择出库日期',\r\n valueFormat: 'YYYY-MM-DD',\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请选择客户',\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'contactName',\r\n label: '收货人',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请输入收货人',\r\n },\r\n },\r\n {\r\n fieldName: 'contactTelephone',\r\n label: '联系方式',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请输入联系方式',\r\n },\r\n },\r\n {\r\n fieldName: 'contactAddress',\r\n label: '收货地址',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请输入收货地址',\r\n },\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n disabled: isHeaderReadonly(formType),\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n {\r\n fieldName: 'carrier',\r\n label: '承运商',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: formType !== 'shipping',\r\n placeholder: '请输入承运商',\r\n },\r\n dependencies: {\r\n triggerFields: [''],\r\n if: () => showShippingInfo(formType),\r\n },\r\n },\r\n {\r\n fieldName: 'shippingNumber',\r\n label: '运输单号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: formType !== 'shipping',\r\n placeholder: '请输入运输单号',\r\n },\r\n dependencies: {\r\n triggerFields: [''],\r\n if: () => showShippingInfo(formType),\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的搜索表单 */\r\nexport function useGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '出库单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入出库单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '出库单名称',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入出库单名称',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n label: '销售订单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入销售订单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'salesDate',\r\n label: '出库日期',\r\n component: 'RangePicker',\r\n componentProps: {\r\n ...getRangePickerDefaultProps(),\r\n allowClear: true,\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n label: '单据状态',\r\n component: 'Select',\r\n componentProps: {\r\n allowClear: true,\r\n options: getDictOptions(\r\n DICT_TYPE.MES_WM_PRODUCT_SALES_STATUS,\r\n 'number',\r\n ),\r\n placeholder: '请选择单据状态',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的字段 */\r\nexport function useGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '出库单编号',\r\n minWidth: 160,\r\n slots: { default: 'code' },\r\n },\r\n {\r\n field: 'name',\r\n title: '出库单名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'noticeCode',\r\n title: '发货通知单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单编号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'contactName',\r\n title: '收货人',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'carrier',\r\n title: '承运商',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'shippingNumber',\r\n title: '运输单号',\r\n minWidth: 160,\r\n },\r\n {\r\n field: 'salesDate',\r\n title: '出库日期',\r\n width: 180,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'status',\r\n title: '单据状态',\r\n minWidth: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_PRODUCT_SALES_STATUS },\r\n },\r\n },\r\n {\r\n title: '操作',\r\n width: 240,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 出库单行子表的字段 */\r\nexport function useLineGridColumns(\r\n editable: boolean,\r\n stockable: boolean,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n type: 'expand',\r\n width: 48,\r\n slots: { content: 'detail' },\r\n },\r\n {\r\n field: 'itemCode',\r\n title: '产品编码',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '产品名称',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'specification',\r\n title: '规格型号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '出库数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'batchCode',\r\n title: '批次号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'oqcCheckFlag',\r\n title: '是否校验',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.INFRA_BOOLEAN_STRING },\r\n },\r\n },\r\n {\r\n field: 'remark',\r\n title: '备注',\r\n minWidth: 150,\r\n },\r\n ...(editable || stockable\r\n ? [\r\n {\r\n title: '操作',\r\n width: 160,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n } as const,\r\n ]\r\n : []),\r\n ];\r\n}\r\n\r\n/** 出库单行新增/修改的表单 */\r\nexport function useLineFormSchema(\r\n hasNotice: boolean,\r\n formApi?: VbenFormApi,\r\n): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'noticeId',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'noticeLineId',\r\n label: '发货通知单行',\r\n component: markRaw(WmSalesNoticeLineSelect),\r\n componentProps: {\r\n // 选择发货通知单行后,自动回填物料、数量、批次、是否检验\r\n onChange: async (line?: MesWmSalesNoticeLineApi.SalesNoticeLine) => {\r\n await formApi?.setValues({\r\n batchCode: line?.batchCode,\r\n itemId: line?.itemId,\r\n oqcCheckFlag: line?.oqcCheckFlag ?? false,\r\n quantity: line?.quantity,\r\n });\r\n },\r\n },\r\n dependencies: {\r\n triggerFields: ['noticeId'],\r\n if: () => hasNotice,\r\n componentProps: (values) => ({\r\n noticeId: values.noticeId,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'itemId',\r\n label: '产品',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n placeholder: '请选择产品',\r\n },\r\n rules: 'selectRequired',\r\n dependencies: {\r\n triggerFields: ['noticeLineId'],\r\n componentProps: (values) => ({\r\n disabled: !!values.noticeLineId,\r\n placeholder: '请选择产品',\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'batchCode',\r\n label: '批次号',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '请输入批次号',\r\n },\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '出库数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入出库数量',\r\n precision: 2,\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'oqcCheckFlag',\r\n label: '是否校验',\r\n component: 'RadioGroup',\r\n componentProps: {\r\n buttonStyle: 'solid',\r\n optionType: 'button',\r\n options: getDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING, 'boolean'),\r\n },\r\n rules: z.boolean().default(false),\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 拣货明细子表的字段 */\r\nexport function useDetailGridColumns(\r\n stockable: boolean,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'warehouseName',\r\n title: '仓库名称',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'locationName',\r\n title: '库区名称',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'areaName',\r\n title: '库位名称',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '数量',\r\n width: 100,\r\n },\r\n ...(stockable\r\n ? [\r\n {\r\n title: '操作',\r\n width: 120,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n } as const,\r\n ]\r\n : []),\r\n ];\r\n}\r\n\r\n/** 拣货明细新增/修改的表单 */\r\nexport function useDetailFormSchema(formApi?: VbenFormApi): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'quantityMax',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'batchId',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'itemId',\r\n label: '物料',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'materialStockId',\r\n label: '选择库存',\r\n component: markRaw(WmMaterialStockSelect),\r\n componentProps: {\r\n // 选择库存记录后,自动回填仓库/库区/库位/批次/数量\r\n onChange: async (stock?: MesWmMaterialStockApi.MaterialStock) => {\r\n await formApi?.setValues({\r\n areaId: stock?.areaId,\r\n batchCode: stock?.batchCode,\r\n batchId: stock?.batchId,\r\n locationId: stock?.locationId,\r\n quantity: stock?.quantity,\r\n quantityMax: stock?.quantity,\r\n warehouseId: stock?.warehouseId,\r\n });\r\n },\r\n },\r\n rules: 'selectRequired',\r\n dependencies: {\r\n triggerFields: ['itemId', 'batchId'],\r\n componentProps: (values) => ({\r\n batchId: values.batchId,\r\n itemId: values.itemId,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入数量',\r\n precision: 2,\r\n },\r\n rules: 'required',\r\n dependencies: {\r\n triggerFields: ['quantityMax'],\r\n componentProps: (values) => ({\r\n class: '!w-full',\r\n max: values.quantityMax,\r\n min: 0,\r\n placeholder: '请输入数量',\r\n precision: 2,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'warehouseId',\r\n label: '出库仓库',\r\n component: markRaw(WmWarehouseSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'locationId',\r\n label: '库区',\r\n component: markRaw(WmWarehouseLocationSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n dependencies: {\r\n triggerFields: ['warehouseId'],\r\n componentProps: (values) => ({\r\n disabled: true,\r\n warehouseId: values.warehouseId,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'areaId',\r\n label: '库位',\r\n component: markRaw(WmWarehouseAreaSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n dependencies: {\r\n triggerFields: ['locationId'],\r\n componentProps: (values) => ({\r\n disabled: true,\r\n locationId: values.locationId,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'batchCode',\r\n label: '批次号',\r\n component: 'Input',\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n ];\r\n}\r\n" }, { "file": "mom-pro2-before\\src\\views\\wls\\returnsales\\data.ts", "removed": 1, "before": "import type { ErpSaleOrderApi } from '#/api/erp/sale/order';\r\nimport type { VbenFormApi, VbenFormSchema } from '#/adapter/form';\r\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\r\nimport type { MesWmReturnSalesApi } from '#/api/mes/wm/returnsales';\r\nimport type { MesWmReturnSalesDetailApi } from '#/api/mes/wm/returnsales/detail';\r\nimport type { MesWmReturnSalesLineApi } from '#/api/mes/wm/returnsales/line';\r\n\r\nimport { h, markRaw } from 'vue';\r\n\r\nimport { DICT_TYPE, MesAutoCodeRuleCode } from '@vben/constants';\r\nimport { getDictOptions } from '@vben/hooks';\r\n\r\nimport { Button } from 'ant-design-vue';\r\n\r\nimport { z } from '#/adapter/form';\r\nimport CrmCustomerSelect from '#/components/crm-customer-select.vue';\r\nimport { generateAutoCode } from '#/api/mes/md/autocode/record';\r\nimport { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';\r\nimport { MdItemSelect } from '#/views/mes/md/item/components';\r\nimport { WmBatchSelect } from '#/views/wls/batch/components';\r\nimport {\r\n WmWarehouseAreaSelect,\r\n WmWarehouseLocationSelect,\r\n WmWarehouseSelect,\r\n} from '#/views/wls/warehouse/components';\r\n\r\n/** 表单类型 */\r\nexport type FormType = 'create' | 'detail' | 'finish' | 'stock' | 'update';\r\n\r\n/** 表单头部是否只读(上架、详情、执行退货态) */\r\nfunction isHeaderReadonly(formType: FormType): boolean {\r\n return formType === 'detail' || formType === 'finish' || formType === 'stock';\r\n}\r\n\r\n/** 新增/修改的表单 */\r\nexport function useFormSchema(\r\n formType: FormType,\r\n formApi?: VbenFormApi,\r\n onOrderChange?: (item: Record | undefined) => void,\r\n): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'id',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'code',\r\n label: '退货单编号',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '请输入退货单编号',\r\n },\r\n rules: 'required',\r\n suffix: isHeaderReadonly(formType)\r\n ? undefined\r\n : () =>\r\n h(\r\n Button,\r\n {\r\n type: 'default',\r\n onClick: async () => {\r\n const code = await generateAutoCode(\r\n MesAutoCodeRuleCode.WM_RETURN_SALES_CODE,\r\n );\r\n await formApi?.setFieldValue('code', code);\r\n },\r\n },\r\n { default: () => '生成' },\r\n ),\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '退货单名称',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '请输入退货单名称',\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'saleOrderId',\r\n label: '销售订单号',\r\n component: markRaw(ErpSaleOrderSelect),\r\n componentProps: {\r\n outStatus: 3,\r\n placeholder: '请选择销售订单',\r\n onChange: (item: any) => {\r\n if (formApi) {\r\n formApi.setFieldValue('salesOrderCode', item?.no ?? '');\r\n if (item?.customerId) {\r\n formApi.setFieldValue('clientId', item.customerId);\r\n }\r\n }\r\n onOrderChange?.(item);\r\n },\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'returnDate',\r\n label: '退货日期',\r\n component: 'DatePicker',\r\n componentProps: {\r\n class: '!w-full',\r\n format: 'YYYY-MM-DD',\r\n placeholder: '请选择退货日期',\r\n valueFormat: 'YYYY-MM-DD',\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'returnReason',\r\n label: '退货原因',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n placeholder: '请输入退货原因',\r\n rows: 2,\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的搜索表单 */\r\nexport function useGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '退货单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入退货单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '退货单名称',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入退货单名称',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n label: '销售订单号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入销售订单号',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n label: '单据状态',\r\n component: 'Select',\r\n componentProps: {\r\n allowClear: true,\r\n options: getDictOptions(DICT_TYPE.MES_WM_RETURN_SALES_STATUS, 'number'),\r\n placeholder: '请选择单据状态',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的字段 */\r\nexport function useGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '退货单编号',\r\n minWidth: 160,\r\n slots: { default: 'code' },\r\n },\r\n {\r\n field: 'name',\r\n title: '退货单名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'clientCode',\r\n title: '客户编码',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'returnReason',\r\n title: '退货原因',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'returnDate',\r\n title: '退货日期',\r\n width: 180,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'status',\r\n title: '单据状态',\r\n minWidth: 110,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_RETURN_SALES_STATUS },\r\n },\r\n },\r\n {\r\n title: '操作',\r\n width: 240,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 退货单行子表的字段 */\r\nexport function useLineGridColumns(\r\n editable: boolean,\r\n stockable: boolean,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n type: 'expand',\r\n width: 48,\r\n slots: { content: 'detail' },\r\n },\r\n {\r\n field: 'itemCode',\r\n title: '物料编码',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '物料名称',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'specification',\r\n title: '规格型号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '退货数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'batchCode',\r\n title: '批次号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'rqcCheckFlag',\r\n title: '是否需要质检',\r\n width: 120,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.INFRA_BOOLEAN_STRING },\r\n },\r\n },\r\n {\r\n field: 'qualityStatus',\r\n title: '质量状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_QUALITY_STATUS },\r\n },\r\n },\r\n ...(editable || stockable\r\n ? [\r\n {\r\n title: '操作',\r\n width: 160,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n } as const,\r\n ]\r\n : []),\r\n ];\r\n}\r\n\r\n/** 退货单行新增/修改的表单 */\r\nexport function useLineFormSchema(\r\n clientId?: number,\r\n salesOrderCode?: string,\r\n items?: ErpSaleOrderApi.SaleOrderItem[],\r\n onItemChange?: (item: ErpSaleOrderApi.SaleOrderItem | undefined) => void,\r\n): VbenFormSchema[] {\r\n const hasItems = items && items.length > 0;\r\n return [\r\n {\r\n fieldName: 'itemId',\r\n label: '物料',\r\n component: hasItems ? 'Select' : markRaw(MdItemSelect),\r\n componentProps: hasItems\r\n ? {\r\n placeholder: '请选择物料',\r\n options: items.map((item) => ({\r\n label: `${item.productName || ''}(${item.productBarCode || ''})`,\r\n value: item.productId,\r\n })),\r\n showSearch: true,\r\n onChange: (value: number | undefined) => {\r\n const selected = items.find((i) => i.productId === value);\r\n onItemChange?.(selected);\r\n },\r\n }\r\n : {\r\n placeholder: '请选择物料',\r\n productIds: [],\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '退货数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入退货数量',\r\n precision: 2,\r\n },\r\n dependencies: {\r\n triggerFields: ['itemId'],\r\n componentProps: (values) => {\r\n const selected = items?.find((i) => i.productId === values.itemId);\r\n return {\r\n class: '!w-full',\r\n max: selected?.count ?? undefined,\r\n min: 0,\r\n placeholder: '请输入退货数量',\r\n precision: 2,\r\n };\r\n },\r\n rules: (values) => {\r\n const selected = items?.find((i) => i.productId === values.itemId);\r\n const max = selected?.count;\r\n if (max !== undefined && max !== null) {\r\n return z\r\n .number({ message: '请输入退货数量' })\r\n .min(0)\r\n .max(max, `可退货数量不能超过 ${max}`);\r\n }\r\n return z.number({ message: '请输入退货数量' }).min(0);\r\n },\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'batchId',\r\n label: '批次',\r\n component: markRaw(WmBatchSelect),\r\n componentProps: {\r\n clientId,\r\n disabled: true,\r\n placeholder: '请选择批次',\r\n salesOrderCode,\r\n },\r\n dependencies: {\r\n triggerFields: ['itemId'],\r\n componentProps: (values) => ({\r\n clientId,\r\n disabled: true,\r\n itemId: values.itemId,\r\n placeholder: '请选择批次',\r\n salesOrderCode,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'rqcCheckFlag',\r\n label: '需要质检',\r\n component: 'Switch',\r\n rules: z.boolean().default(false),\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 上架明细子表的字段 */\r\nexport function useDetailGridColumns(\r\n stockable: boolean,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'batchCode',\r\n title: '批次号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'warehouseName',\r\n title: '仓库名称',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'locationName',\r\n title: '库区名称',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'areaName',\r\n title: '库位名称',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '数量',\r\n width: 100,\r\n },\r\n ...(stockable\r\n ? [\r\n {\r\n title: '操作',\r\n width: 120,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n } as const,\r\n ]\r\n : []),\r\n ];\r\n}\r\n\r\n/** 上架明细新增/修改的表单 */\r\nexport function useDetailFormSchema(formApi?: VbenFormApi): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'itemId',\r\n label: '物料',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'warehouseId',\r\n label: '入库仓库',\r\n component: markRaw(WmWarehouseSelect),\r\n componentProps: {\r\n // 切换仓库后清空库区和库位\r\n onChange: async () => {\r\n await formApi?.setValues({\r\n areaId: undefined,\r\n locationId: undefined,\r\n });\r\n },\r\n placeholder: '请选择仓库',\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'locationId',\r\n label: '库区',\r\n component: markRaw(WmWarehouseLocationSelect),\r\n componentProps: {\r\n placeholder: '请选择库区',\r\n },\r\n rules: 'selectRequired',\r\n dependencies: {\r\n triggerFields: ['warehouseId'],\r\n componentProps: (values) => ({\r\n // 切换库区后清空库位\r\n onChange: async () => {\r\n await formApi?.setFieldValue('areaId', undefined);\r\n },\r\n placeholder: '请选择库区',\r\n warehouseId: values.warehouseId,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'areaId',\r\n label: '库位',\r\n component: markRaw(WmWarehouseAreaSelect),\r\n componentProps: {\r\n placeholder: '请选择库位',\r\n },\r\n rules: 'selectRequired',\r\n dependencies: {\r\n triggerFields: ['locationId'],\r\n componentProps: (values) => ({\r\n locationId: values.locationId,\r\n placeholder: '请选择库位',\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'batchCode',\r\n label: '批次号',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '请输入批次号',\r\n },\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入数量',\r\n precision: 2,\r\n },\r\n rules: 'required',\r\n },\r\n ];\r\n}\r\n", "after": "import type { ErpSaleOrderApi } from '#/api/erp/sale/order';\r\nimport type { VbenFormApi, VbenFormSchema } from '#/adapter/form';\r\nimport type { VxeTableGridOptions } from '#/adapter/vxe-table';\r\nimport type { MesWmReturnSalesApi } from '#/api/mes/wm/returnsales';\r\nimport type { MesWmReturnSalesDetailApi } from '#/api/mes/wm/returnsales/detail';\r\nimport type { MesWmReturnSalesLineApi } from '#/api/mes/wm/returnsales/line';\r\n\r\nimport { h, markRaw } from 'vue';\r\n\r\nimport { DICT_TYPE, MesAutoCodeRuleCode } from '@vben/constants';\r\nimport { getDictOptions } from '@vben/hooks';\r\n\r\nimport { Button } from 'ant-design-vue';\r\n\r\nimport { z } from '#/adapter/form';\r\nimport CrmCustomerSelect from '#/components/crm-customer-select.vue';\r\nimport { generateAutoCode } from '#/api/mes/md/autocode/record';\r\nimport { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';\r\nimport { MdItemSelect } from '#/views/mes/md/item/components';\r\nimport { WmBatchSelect } from '#/views/wls/batch/components';\r\nimport {\r\n WmWarehouseAreaSelect,\r\n WmWarehouseLocationSelect,\r\n WmWarehouseSelect,\r\n} from '#/views/wls/warehouse/components';\r\n\r\n/** 表单类型 */\r\nexport type FormType = 'create' | 'detail' | 'finish' | 'stock' | 'update';\r\n\r\n/** 表单头部是否只读(上架、详情、执行退货态) */\r\nfunction isHeaderReadonly(formType: FormType): boolean {\r\n return formType === 'detail' || formType === 'finish' || formType === 'stock';\r\n}\r\n\r\n/** 新增/修改的表单 */\r\nexport function useFormSchema(\r\n formType: FormType,\r\n formApi?: VbenFormApi,\r\n onOrderChange?: (item: Record | undefined) => void,\r\n): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'id',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'code',\r\n label: '退货单编号',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '请输入退货单编号',\r\n },\r\n rules: 'required',\r\n suffix: isHeaderReadonly(formType)\r\n ? undefined\r\n : () =>\r\n h(\r\n Button,\r\n {\r\n type: 'default',\r\n onClick: async () => {\r\n const code = await generateAutoCode(\r\n MesAutoCodeRuleCode.WM_RETURN_SALES_CODE,\r\n );\r\n await formApi?.setFieldValue('code', code);\r\n },\r\n },\r\n { default: () => '生成' },\r\n ),\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '退货单名称',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '请输入退货单名称',\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n component: 'Input',\r\n dependencies: {\r\n triggerFields: [''],\r\n show: () => false,\r\n },\r\n },\r\n {\r\n fieldName: 'saleOrderId',\r\n label: '销售订单号',\r\n component: markRaw(ErpSaleOrderSelect),\r\n componentProps: {\r\n outStatus: 3,\r\n placeholder: '请选择销售订单',\r\n onChange: (item: any) => {\r\n if (formApi) {\r\n formApi.setFieldValue('salesOrderCode', item?.no ?? '');\r\n if (item?.customerId) {\r\n formApi.setFieldValue('clientId', item.customerId);\r\n }\r\n }\r\n onOrderChange?.(item);\r\n },\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'returnDate',\r\n label: '退货日期',\r\n component: 'DatePicker',\r\n componentProps: {\r\n class: '!w-full',\r\n format: 'YYYY-MM-DD',\r\n placeholder: '请选择退货日期',\r\n valueFormat: 'YYYY-MM-DD',\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'returnReason',\r\n label: '退货原因',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n placeholder: '请输入退货原因',\r\n rows: 2,\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的搜索表单 */\r\nexport function useGridFormSchema(): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'code',\r\n label: '退货单编号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入退货单编号',\r\n },\r\n },\r\n {\r\n fieldName: 'name',\r\n label: '退货单名称',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入退货单名称',\r\n },\r\n },\r\n {\r\n fieldName: 'salesOrderCode',\r\n label: '销售订单号',\r\n component: 'Input',\r\n componentProps: {\r\n allowClear: true,\r\n placeholder: '请输入销售订单号',\r\n },\r\n },\r\n {\r\n fieldName: 'clientId',\r\n label: '客户',\r\n component: markRaw(CrmCustomerSelect),\r\n componentProps: {\r\n placeholder: '请选择客户',\r\n },\r\n },\r\n {\r\n fieldName: 'status',\r\n label: '单据状态',\r\n component: 'Select',\r\n componentProps: {\r\n allowClear: true,\r\n options: getDictOptions(DICT_TYPE.MES_WM_RETURN_SALES_STATUS, 'number'),\r\n placeholder: '请选择单据状态',\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 列表的字段 */\r\nexport function useGridColumns(): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'code',\r\n title: '退货单编号',\r\n minWidth: 160,\r\n slots: { default: 'code' },\r\n },\r\n {\r\n field: 'name',\r\n title: '退货单名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'salesOrderCode',\r\n title: '销售订单号',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'clientName',\r\n title: '客户名称',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'returnReason',\r\n title: '退货原因',\r\n minWidth: 150,\r\n },\r\n {\r\n field: 'returnDate',\r\n title: '退货日期',\r\n width: 180,\r\n formatter: 'formatDate',\r\n },\r\n {\r\n field: 'status',\r\n title: '单据状态',\r\n minWidth: 110,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_RETURN_SALES_STATUS },\r\n },\r\n },\r\n {\r\n title: '操作',\r\n width: 240,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n },\r\n ];\r\n}\r\n\r\n/** 退货单行子表的字段 */\r\nexport function useLineGridColumns(\r\n editable: boolean,\r\n stockable: boolean,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n type: 'expand',\r\n width: 48,\r\n slots: { content: 'detail' },\r\n },\r\n {\r\n field: 'itemCode',\r\n title: '物料编码',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'itemName',\r\n title: '物料名称',\r\n minWidth: 140,\r\n },\r\n {\r\n field: 'specification',\r\n title: '规格型号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'unitMeasureName',\r\n title: '单位',\r\n width: 80,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '退货数量',\r\n width: 100,\r\n },\r\n {\r\n field: 'batchCode',\r\n title: '批次号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'rqcCheckFlag',\r\n title: '是否需要质检',\r\n width: 120,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.INFRA_BOOLEAN_STRING },\r\n },\r\n },\r\n {\r\n field: 'qualityStatus',\r\n title: '质量状态',\r\n width: 100,\r\n cellRender: {\r\n name: 'CellDict',\r\n props: { type: DICT_TYPE.MES_WM_QUALITY_STATUS },\r\n },\r\n },\r\n ...(editable || stockable\r\n ? [\r\n {\r\n title: '操作',\r\n width: 160,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n } as const,\r\n ]\r\n : []),\r\n ];\r\n}\r\n\r\n/** 退货单行新增/修改的表单 */\r\nexport function useLineFormSchema(\r\n clientId?: number,\r\n salesOrderCode?: string,\r\n items?: ErpSaleOrderApi.SaleOrderItem[],\r\n onItemChange?: (item: ErpSaleOrderApi.SaleOrderItem | undefined) => void,\r\n): VbenFormSchema[] {\r\n const hasItems = items && items.length > 0;\r\n return [\r\n {\r\n fieldName: 'itemId',\r\n label: '物料',\r\n component: hasItems ? 'Select' : markRaw(MdItemSelect),\r\n componentProps: hasItems\r\n ? {\r\n placeholder: '请选择物料',\r\n options: items.map((item) => ({\r\n label: `${item.productName || ''}(${item.productBarCode || ''})`,\r\n value: item.productId,\r\n })),\r\n showSearch: true,\r\n onChange: (value: number | undefined) => {\r\n const selected = items.find((i) => i.productId === value);\r\n onItemChange?.(selected);\r\n },\r\n }\r\n : {\r\n placeholder: '请选择物料',\r\n productIds: [],\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '退货数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入退货数量',\r\n precision: 2,\r\n },\r\n dependencies: {\r\n triggerFields: ['itemId'],\r\n componentProps: (values) => {\r\n const selected = items?.find((i) => i.productId === values.itemId);\r\n return {\r\n class: '!w-full',\r\n max: selected?.count ?? undefined,\r\n min: 0,\r\n placeholder: '请输入退货数量',\r\n precision: 2,\r\n };\r\n },\r\n rules: (values) => {\r\n const selected = items?.find((i) => i.productId === values.itemId);\r\n const max = selected?.count;\r\n if (max !== undefined && max !== null) {\r\n return z\r\n .number({ message: '请输入退货数量' })\r\n .min(0)\r\n .max(max, `可退货数量不能超过 ${max}`);\r\n }\r\n return z.number({ message: '请输入退货数量' }).min(0);\r\n },\r\n },\r\n rules: 'required',\r\n },\r\n {\r\n fieldName: 'batchId',\r\n label: '批次',\r\n component: markRaw(WmBatchSelect),\r\n componentProps: {\r\n clientId,\r\n disabled: true,\r\n placeholder: '请选择批次',\r\n salesOrderCode,\r\n },\r\n dependencies: {\r\n triggerFields: ['itemId'],\r\n componentProps: (values) => ({\r\n clientId,\r\n disabled: true,\r\n itemId: values.itemId,\r\n placeholder: '请选择批次',\r\n salesOrderCode,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'rqcCheckFlag',\r\n label: '需要质检',\r\n component: 'Switch',\r\n rules: z.boolean().default(false),\r\n },\r\n {\r\n fieldName: 'remark',\r\n label: '备注',\r\n component: 'Textarea',\r\n formItemClass: 'col-span-3',\r\n componentProps: {\r\n placeholder: '请输入备注',\r\n rows: 3,\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/** 上架明细子表的字段 */\r\nexport function useDetailGridColumns(\r\n stockable: boolean,\r\n): VxeTableGridOptions['columns'] {\r\n return [\r\n {\r\n field: 'batchCode',\r\n title: '批次号',\r\n minWidth: 120,\r\n },\r\n {\r\n field: 'warehouseName',\r\n title: '仓库名称',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'locationName',\r\n title: '库区名称',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'areaName',\r\n title: '库位名称',\r\n minWidth: 100,\r\n },\r\n {\r\n field: 'quantity',\r\n title: '数量',\r\n width: 100,\r\n },\r\n ...(stockable\r\n ? [\r\n {\r\n title: '操作',\r\n width: 120,\r\n fixed: 'right',\r\n slots: { default: 'actions' },\r\n } as const,\r\n ]\r\n : []),\r\n ];\r\n}\r\n\r\n/** 上架明细新增/修改的表单 */\r\nexport function useDetailFormSchema(formApi?: VbenFormApi): VbenFormSchema[] {\r\n return [\r\n {\r\n fieldName: 'itemId',\r\n label: '物料',\r\n component: markRaw(MdItemSelect),\r\n componentProps: {\r\n disabled: true,\r\n },\r\n },\r\n {\r\n fieldName: 'warehouseId',\r\n label: '入库仓库',\r\n component: markRaw(WmWarehouseSelect),\r\n componentProps: {\r\n // 切换仓库后清空库区和库位\r\n onChange: async () => {\r\n await formApi?.setValues({\r\n areaId: undefined,\r\n locationId: undefined,\r\n });\r\n },\r\n placeholder: '请选择仓库',\r\n },\r\n rules: 'selectRequired',\r\n },\r\n {\r\n fieldName: 'locationId',\r\n label: '库区',\r\n component: markRaw(WmWarehouseLocationSelect),\r\n componentProps: {\r\n placeholder: '请选择库区',\r\n },\r\n rules: 'selectRequired',\r\n dependencies: {\r\n triggerFields: ['warehouseId'],\r\n componentProps: (values) => ({\r\n // 切换库区后清空库位\r\n onChange: async () => {\r\n await formApi?.setFieldValue('areaId', undefined);\r\n },\r\n placeholder: '请选择库区',\r\n warehouseId: values.warehouseId,\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'areaId',\r\n label: '库位',\r\n component: markRaw(WmWarehouseAreaSelect),\r\n componentProps: {\r\n placeholder: '请选择库位',\r\n },\r\n rules: 'selectRequired',\r\n dependencies: {\r\n triggerFields: ['locationId'],\r\n componentProps: (values) => ({\r\n locationId: values.locationId,\r\n placeholder: '请选择库位',\r\n }),\r\n },\r\n },\r\n {\r\n fieldName: 'batchCode',\r\n label: '批次号',\r\n component: 'Input',\r\n componentProps: {\r\n placeholder: '请输入批次号',\r\n },\r\n },\r\n {\r\n fieldName: 'quantity',\r\n label: '数量',\r\n component: 'InputNumber',\r\n componentProps: {\r\n class: '!w-full',\r\n min: 0,\r\n placeholder: '请输入数量',\r\n precision: 2,\r\n },\r\n rules: 'required',\r\n },\r\n ];\r\n}\r\n" }, { "file": "mom-pro2-before\\src\\views\\mes\\md\\client\\components\\select.vue", "removed": 1, "before": "\n\n\n", "after": "\n\n\n" }, { "file": "yudao-module-mes\\src\\main\\java\\cn\\iocoder\\yudao\\module\\mes\\controller\\admin\\pro\\mps\\vo\\MesProMpsRespVO.java", "removed": 1, "before": "package cn.iocoder.yudao.module.mes.controller.admin.pro.mps.vo;\n\nimport cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;\nimport cn.iocoder.yudao.framework.excel.core.convert.DictConvert;\nimport cn.iocoder.yudao.module.mes.enums.DictTypeConstants;\nimport cn.idev.excel.annotation.ExcelIgnoreUnannotated;\nimport cn.idev.excel.annotation.ExcelProperty;\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.Data;\n\nimport java.math.BigDecimal;\nimport java.time.LocalDateTime;\n\n@Schema(description = \"管理后台 - MES 生产主计划 Response VO\")\n@Data\n@ExcelIgnoreUnannotated\npublic class MesProMpsRespVO {\n\n @Schema(description = \"编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1024\")\n @ExcelProperty(\"编号\")\n private Long id;\n\n @Schema(description = \"MPS 编码\", example = \"MPS-001\")\n @ExcelProperty(\"MPS 编码\")\n private String code;\n\n @Schema(description = \"状态\", example = \"0\")\n @ExcelProperty(value = \"状态\", converter = DictConvert.class)\n @DictFormat(DictTypeConstants.MES_PRO_MPS_STATUS)\n private Integer status;\n\n // ========== 来源信息 ==========\n\n @Schema(description = \"销售订单ID\", example = \"100\")\n private Long saleOrderId;\n\n @Schema(description = \"销售订单号\", example = \"SO-001\")\n @ExcelProperty(\"销售订单号\")\n private String saleOrderNo;\n\n @Schema(description = \"销售订单明细ID\", example = \"200\")\n private Long saleOrderItemId;\n\n // ========== 产品信息 ==========\n\n @Schema(description = \"产品编号\", example = \"100\")\n private Long productId;\n\n @Schema(description = \"产品编码\", example = \"P-001\")\n @ExcelProperty(\"产品编码\")\n private String productCode;\n\n @Schema(description = \"产品名称\", example = \"电路板 A\")\n @ExcelProperty(\"产品名称\")\n private String productName;\n\n @Schema(description = \"规格型号\", example = \"100x200mm\")\n @ExcelProperty(\"规格型号\")\n private String productSpecification;\n\n @Schema(description = \"单位名称\", example = \"个\")\n @ExcelProperty(\"单位\")\n private String unitMeasureName;\n\n @Schema(description = \"计划生产数量\", example = \"100.00\")\n @ExcelProperty(\"计划生产数量\")\n private BigDecimal quantity;\n\n @Schema(description = \"已生产数量\", example = \"50.00\")\n @ExcelProperty(\"已生产数量\")\n private BigDecimal quantityProduced;\n\n // ========== 客户信息 ==========\n\n @Schema(description = \"客户编号\", example = \"300\")\n private Long clientId;\n\n @Schema(description = \"客户编码\", example = \"C-001\")\n @ExcelProperty(\"客户编码\")\n private String clientCode;\n\n @Schema(description = \"客户名称\", example = \"客户 A\")\n @ExcelProperty(\"客户名称\")\n private String clientName;\n\n // ========== 时间信息 ==========\n\n @Schema(description = \"需求日期\")\n @ExcelProperty(\"需求日期\")\n private LocalDateTime requestDate;\n\n @Schema(description = \"下发日期\")\n @ExcelProperty(\"下发日期\")\n private LocalDateTime issueDate;\n\n @Schema(description = \"完成日期\")\n @ExcelProperty(\"完成日期\")\n private LocalDateTime finishDate;\n\n // ========== 生产工单关联 ==========\n\n @Schema(description = \"生产工单ID\", example = \"500\")\n private Long workOrderId;\n\n @Schema(description = \"生产工单编码\", example = \"WO-001\")\n @ExcelProperty(\"生产工单编码\")\n private String workOrderCode;\n\n // ========== 合并下发标识 ==========\n\n @Schema(description = \"是否合并下发\", example = \"0\")\n private Integer mergeFlag;\n\n @Schema(description = \"合并批次号\", example = \"MERGE-001\")\n private String mergeBatchNo;\n\n @Schema(description = \"备注\", example = \"备注\")\n @ExcelProperty(\"备注\")\n private String remark;\n\n @Schema(description = \"创建时间\", requiredMode = Schema.RequiredMode.REQUIRED)\n @ExcelProperty(\"创建时间\")\n private LocalDateTime createTime;\n\n}", "after": "package cn.iocoder.yudao.module.mes.controller.admin.pro.mps.vo;\n\nimport cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;\nimport cn.iocoder.yudao.framework.excel.core.convert.DictConvert;\nimport cn.iocoder.yudao.module.mes.enums.DictTypeConstants;\nimport cn.idev.excel.annotation.ExcelIgnoreUnannotated;\nimport cn.idev.excel.annotation.ExcelProperty;\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.Data;\n\nimport java.math.BigDecimal;\nimport java.time.LocalDateTime;\n\n@Schema(description = \"管理后台 - MES 生产主计划 Response VO\")\n@Data\n@ExcelIgnoreUnannotated\npublic class MesProMpsRespVO {\n\n @Schema(description = \"编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1024\")\n @ExcelProperty(\"编号\")\n private Long id;\n\n @Schema(description = \"MPS 编码\", example = \"MPS-001\")\n @ExcelProperty(\"MPS 编码\")\n private String code;\n\n @Schema(description = \"状态\", example = \"0\")\n @ExcelProperty(value = \"状态\", converter = DictConvert.class)\n @DictFormat(DictTypeConstants.MES_PRO_MPS_STATUS)\n private Integer status;\n\n // ========== 来源信息 ==========\n\n @Schema(description = \"销售订单ID\", example = \"100\")\n private Long saleOrderId;\n\n @Schema(description = \"销售订单号\", example = \"SO-001\")\n @ExcelProperty(\"销售订单号\")\n private String saleOrderNo;\n\n @Schema(description = \"销售订单明细ID\", example = \"200\")\n private Long saleOrderItemId;\n\n // ========== 产品信息 ==========\n\n @Schema(description = \"产品编号\", example = \"100\")\n private Long productId;\n\n @Schema(description = \"产品编码\", example = \"P-001\")\n @ExcelProperty(\"产品编码\")\n private String productCode;\n\n @Schema(description = \"产品名称\", example = \"电路板 A\")\n @ExcelProperty(\"产品名称\")\n private String productName;\n\n @Schema(description = \"规格型号\", example = \"100x200mm\")\n @ExcelProperty(\"规格型号\")\n private String productSpecification;\n\n @Schema(description = \"单位名称\", example = \"个\")\n @ExcelProperty(\"单位\")\n private String unitMeasureName;\n\n @Schema(description = \"计划生产数量\", example = \"100.00\")\n @ExcelProperty(\"计划生产数量\")\n private BigDecimal quantity;\n\n @Schema(description = \"已生产数量\", example = \"50.00\")\n @ExcelProperty(\"已生产数量\")\n private BigDecimal quantityProduced;\n\n // ========== 客户信息 ==========\n\n @Schema(description = \"客户编号\", example = \"300\")\n private Long clientId;\n\n\n @Schema(description = \"客户名称\", example = \"客户 A\")\n @ExcelProperty(\"客户名称\")\n private String clientName;\n\n // ========== 时间信息 ==========\n\n @Schema(description = \"需求日期\")\n @ExcelProperty(\"需求日期\")\n private LocalDateTime requestDate;\n\n @Schema(description = \"下发日期\")\n @ExcelProperty(\"下发日期\")\n private LocalDateTime issueDate;\n\n @Schema(description = \"完成日期\")\n @ExcelProperty(\"完成日期\")\n private LocalDateTime finishDate;\n\n // ========== 生产工单关联 ==========\n\n @Schema(description = \"生产工单ID\", example = \"500\")\n private Long workOrderId;\n\n @Schema(description = \"生产工单编码\", example = \"WO-001\")\n @ExcelProperty(\"生产工单编码\")\n private String workOrderCode;\n\n // ========== 合并下发标识 ==========\n\n @Schema(description = \"是否合并下发\", example = \"0\")\n private Integer mergeFlag;\n\n @Schema(description = \"合并批次号\", example = \"MERGE-001\")\n private String mergeBatchNo;\n\n @Schema(description = \"备注\", example = \"备注\")\n @ExcelProperty(\"备注\")\n private String remark;\n\n @Schema(description = \"创建时间\", requiredMode = Schema.RequiredMode.REQUIRED)\n @ExcelProperty(\"创建时间\")\n private LocalDateTime createTime;\n\n}" }, { "file": "yudao-module-mes\\src\\main\\java\\cn\\iocoder\\yudao\\module\\mes\\controller\\admin\\pro\\workorder\\vo\\MesProWorkOrderRespVO.java", "removed": 1, "before": "package cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo;\r\n\r\nimport cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;\r\nimport cn.iocoder.yudao.framework.excel.core.convert.DictConvert;\r\nimport cn.iocoder.yudao.module.mes.enums.DictTypeConstants;\r\nimport cn.idev.excel.annotation.ExcelIgnoreUnannotated;\r\nimport cn.idev.excel.annotation.ExcelProperty;\r\nimport io.swagger.v3.oas.annotations.media.Schema;\r\nimport lombok.Data;\r\n\r\nimport java.math.BigDecimal;\r\nimport java.time.LocalDateTime;\r\n\r\n@Schema(description = \"管理后台 - MES 生产工单 Response VO\")\r\n@Data\r\n@ExcelIgnoreUnannotated\r\npublic class MesProWorkOrderRespVO {\r\n\r\n @Schema(description = \"编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1024\")\r\n @ExcelProperty(\"编号\")\r\n private Long id;\r\n\r\n @Schema(description = \"工单编码\", example = \"WO-001\")\r\n @ExcelProperty(\"工单编码\")\r\n private String code;\r\n\r\n @Schema(description = \"工单名称\", example = \"生产工单-A\")\r\n @ExcelProperty(\"工单名称\")\r\n private String name;\r\n\r\n @Schema(description = \"工单类型\", example = \"1\")\r\n @ExcelProperty(value = \"工单类型\", converter = DictConvert.class)\r\n @DictFormat(DictTypeConstants.MES_PRO_WORK_ORDER_TYPE)\r\n private Integer type;\r\n\r\n @Schema(description = \"来源类型\", example = \"1\")\r\n @ExcelProperty(value = \"来源类型\", converter = DictConvert.class)\r\n @DictFormat(DictTypeConstants.MES_PRO_WORK_ORDER_SOURCE_TYPE)\r\n private Integer orderSourceType;\r\n\r\n @Schema(description = \"来源单据编号\", example = \"SO-001\")\r\n @ExcelProperty(\"来源单据编号\")\r\n private String orderSourceCode;\r\n\r\n @Schema(description = \"产品编号\", example = \"100\")\r\n private Long productId;\r\n\r\n @Schema(description = \"产品名称\", example = \"电路板 A\")\r\n @ExcelProperty(\"产品名称\")\r\n private String productName;\r\n\r\n @Schema(description = \"产品编码\", example = \"P-001\")\r\n @ExcelProperty(\"产品编码\")\r\n private String productCode;\r\n\r\n @Schema(description = \"规格型号\", example = \"100x200mm\")\r\n @ExcelProperty(\"规格型号\")\r\n private String productSpecification;\r\n\r\n @Schema(description = \"单位名称\", example = \"个\")\r\n @ExcelProperty(\"单位\")\r\n private String unitMeasureName;\r\n\r\n @Schema(description = \"订单数量\", example = \"100.00\")\r\n @ExcelProperty(\"订单数量\")\r\n private BigDecimal quantity;\r\n\r\n @Schema(description = \"已生产数量\", example = \"50.00\")\r\n @ExcelProperty(\"已生产数量\")\r\n private BigDecimal quantityProduced;\r\n\r\n @Schema(description = \"完工进度\", example = \"50.00\")\r\n @ExcelProperty(\"完工进度\")\r\n private BigDecimal completionProgress;\r\n\r\n @Schema(description = \"调整数量\", example = \"0\")\r\n @ExcelProperty(\"调整数量\")\r\n private BigDecimal quantityChanged;\r\n\r\n @Schema(description = \"已排产数量\", example = \"80.00\")\r\n @ExcelProperty(\"已排产数量\")\r\n private BigDecimal quantityScheduled;\r\n\r\n @Schema(description = \"客户编号\", example = \"300\")\r\n private Long clientId;\r\n\r\n @Schema(description = \"客户编码\", example = \"C-001\")\r\n @ExcelProperty(\"客户编码\")\r\n private String clientCode;\r\n\r\n @Schema(description = \"客户名称\", example = \"客户 A\")\r\n @ExcelProperty(\"客户名称\")\r\n private String clientName;\r\n\r\n @Schema(description = \"供应商编号\", example = \"400\")\r\n private Long vendorId;\r\n\r\n @Schema(description = \"供应商编码\", example = \"V-001\")\r\n @ExcelProperty(\"供应商编码\")\r\n private String vendorCode;\r\n\r\n @Schema(description = \"供应商名称\", example = \"供应商 A\")\r\n @ExcelProperty(\"供应商名称\")\r\n private String vendorName;\r\n\r\n @Schema(description = \"批次号\", example = \"BATCH-001\")\r\n @ExcelProperty(\"批次号\")\r\n private String batchCode;\r\n\r\n @Schema(description = \"需求日期\")\r\n @ExcelProperty(\"需求日期\")\r\n private LocalDateTime requestDate;\r\n\r\n @Schema(description = \"父工单编号\", example = \"0\")\r\n private Long parentId;\r\n\r\n @Schema(description = \"父工单编码\", example = \"WO-001\")\r\n private String parentCode;\r\n\r\n @Schema(description = \"完成时间\")\r\n @ExcelProperty(\"完成时间\")\r\n private LocalDateTime finishDate;\r\n\r\n @Schema(description = \"取消时间\")\r\n @ExcelProperty(\"取消时间\")\r\n private LocalDateTime cancelDate;\r\n\r\n @Schema(description = \"工单状态\", example = \"0\")\r\n @ExcelProperty(value = \"工单状态\", converter = DictConvert.class)\r\n @DictFormat(DictTypeConstants.MES_PRO_WORK_ORDER_STATUS)\r\n private Integer status;\r\n\r\n @Schema(description = \"备注\", example = \"备注\")\r\n @ExcelProperty(\"备注\")\r\n private String remark;\r\n\r\n @Schema(description = \"创建时间\", requiredMode = Schema.RequiredMode.REQUIRED)\r\n @ExcelProperty(\"创建时间\")\r\n private LocalDateTime createTime;\r\n\r\n @Schema(description = \"工序进度列表\")\r\n private java.util.List processProgressList;\r\n\r\n @Schema(description = \"生产状态 (0: 待生产, 1: 生产中, 2: 生产完成)\")\r\n @ExcelProperty(\"生产状态\")\r\n private Integer productionStatus;\r\n\r\n @Schema(description = \"是否报工审批\")\r\n @ExcelProperty(\"是否报工审批\")\r\n private Boolean feedbackApprove;\r\n\r\n @Schema(description = \"BPM 流程定义 Key\")\r\n @ExcelProperty(\"BPM 流程定义 Key\")\r\n private String processDefinitionKey;\r\n\r\n @Schema(description = \"报工角色 (多个角色逗号分隔)\")\r\n @ExcelProperty(\"报工角色\")\r\n private String feedbackRole;\r\n\r\n}\r\n", "after": "package cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo;\r\n\r\nimport cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;\r\nimport cn.iocoder.yudao.framework.excel.core.convert.DictConvert;\r\nimport cn.iocoder.yudao.module.mes.enums.DictTypeConstants;\r\nimport cn.idev.excel.annotation.ExcelIgnoreUnannotated;\r\nimport cn.idev.excel.annotation.ExcelProperty;\r\nimport io.swagger.v3.oas.annotations.media.Schema;\r\nimport lombok.Data;\r\n\r\nimport java.math.BigDecimal;\r\nimport java.time.LocalDateTime;\r\n\r\n@Schema(description = \"管理后台 - MES 生产工单 Response VO\")\r\n@Data\r\n@ExcelIgnoreUnannotated\r\npublic class MesProWorkOrderRespVO {\r\n\r\n @Schema(description = \"编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1024\")\r\n @ExcelProperty(\"编号\")\r\n private Long id;\r\n\r\n @Schema(description = \"工单编码\", example = \"WO-001\")\r\n @ExcelProperty(\"工单编码\")\r\n private String code;\r\n\r\n @Schema(description = \"工单名称\", example = \"生产工单-A\")\r\n @ExcelProperty(\"工单名称\")\r\n private String name;\r\n\r\n @Schema(description = \"工单类型\", example = \"1\")\r\n @ExcelProperty(value = \"工单类型\", converter = DictConvert.class)\r\n @DictFormat(DictTypeConstants.MES_PRO_WORK_ORDER_TYPE)\r\n private Integer type;\r\n\r\n @Schema(description = \"来源类型\", example = \"1\")\r\n @ExcelProperty(value = \"来源类型\", converter = DictConvert.class)\r\n @DictFormat(DictTypeConstants.MES_PRO_WORK_ORDER_SOURCE_TYPE)\r\n private Integer orderSourceType;\r\n\r\n @Schema(description = \"来源单据编号\", example = \"SO-001\")\r\n @ExcelProperty(\"来源单据编号\")\r\n private String orderSourceCode;\r\n\r\n @Schema(description = \"产品编号\", example = \"100\")\r\n private Long productId;\r\n\r\n @Schema(description = \"产品名称\", example = \"电路板 A\")\r\n @ExcelProperty(\"产品名称\")\r\n private String productName;\r\n\r\n @Schema(description = \"产品编码\", example = \"P-001\")\r\n @ExcelProperty(\"产品编码\")\r\n private String productCode;\r\n\r\n @Schema(description = \"规格型号\", example = \"100x200mm\")\r\n @ExcelProperty(\"规格型号\")\r\n private String productSpecification;\r\n\r\n @Schema(description = \"单位名称\", example = \"个\")\r\n @ExcelProperty(\"单位\")\r\n private String unitMeasureName;\r\n\r\n @Schema(description = \"订单数量\", example = \"100.00\")\r\n @ExcelProperty(\"订单数量\")\r\n private BigDecimal quantity;\r\n\r\n @Schema(description = \"已生产数量\", example = \"50.00\")\r\n @ExcelProperty(\"已生产数量\")\r\n private BigDecimal quantityProduced;\r\n\r\n @Schema(description = \"完工进度\", example = \"50.00\")\r\n @ExcelProperty(\"完工进度\")\r\n private BigDecimal completionProgress;\r\n\r\n @Schema(description = \"调整数量\", example = \"0\")\r\n @ExcelProperty(\"调整数量\")\r\n private BigDecimal quantityChanged;\r\n\r\n @Schema(description = \"已排产数量\", example = \"80.00\")\r\n @ExcelProperty(\"已排产数量\")\r\n private BigDecimal quantityScheduled;\r\n\r\n @Schema(description = \"客户编号\", example = \"300\")\r\n private Long clientId;\r\n\r\n\r\n @Schema(description = \"客户名称\", example = \"客户 A\")\r\n @ExcelProperty(\"客户名称\")\r\n private String clientName;\r\n\r\n @Schema(description = \"供应商编号\", example = \"400\")\r\n private Long vendorId;\r\n\r\n @Schema(description = \"供应商编码\", example = \"V-001\")\r\n @ExcelProperty(\"供应商编码\")\r\n private String vendorCode;\r\n\r\n @Schema(description = \"供应商名称\", example = \"供应商 A\")\r\n @ExcelProperty(\"供应商名称\")\r\n private String vendorName;\r\n\r\n @Schema(description = \"批次号\", example = \"BATCH-001\")\r\n @ExcelProperty(\"批次号\")\r\n private String batchCode;\r\n\r\n @Schema(description = \"需求日期\")\r\n @ExcelProperty(\"需求日期\")\r\n private LocalDateTime requestDate;\r\n\r\n @Schema(description = \"父工单编号\", example = \"0\")\r\n private Long parentId;\r\n\r\n @Schema(description = \"父工单编码\", example = \"WO-001\")\r\n private String parentCode;\r\n\r\n @Schema(description = \"完成时间\")\r\n @ExcelProperty(\"完成时间\")\r\n private LocalDateTime finishDate;\r\n\r\n @Schema(description = \"取消时间\")\r\n @ExcelProperty(\"取消时间\")\r\n private LocalDateTime cancelDate;\r\n\r\n @Schema(description = \"工单状态\", example = \"0\")\r\n @ExcelProperty(value = \"工单状态\", converter = DictConvert.class)\r\n @DictFormat(DictTypeConstants.MES_PRO_WORK_ORDER_STATUS)\r\n private Integer status;\r\n\r\n @Schema(description = \"备注\", example = \"备注\")\r\n @ExcelProperty(\"备注\")\r\n private String remark;\r\n\r\n @Schema(description = \"创建时间\", requiredMode = Schema.RequiredMode.REQUIRED)\r\n @ExcelProperty(\"创建时间\")\r\n private LocalDateTime createTime;\r\n\r\n @Schema(description = \"工序进度列表\")\r\n private java.util.List processProgressList;\r\n\r\n @Schema(description = \"生产状态 (0: 待生产, 1: 生产中, 2: 生产完成)\")\r\n @ExcelProperty(\"生产状态\")\r\n private Integer productionStatus;\r\n\r\n @Schema(description = \"是否报工审批\")\r\n @ExcelProperty(\"是否报工审批\")\r\n private Boolean feedbackApprove;\r\n\r\n @Schema(description = \"BPM 流程定义 Key\")\r\n @ExcelProperty(\"BPM 流程定义 Key\")\r\n private String processDefinitionKey;\r\n\r\n @Schema(description = \"报工角色 (多个角色逗号分隔)\")\r\n @ExcelProperty(\"报工角色\")\r\n private String feedbackRole;\r\n\r\n}\r\n" }, { "file": "yudao-module-mes\\src\\main\\java\\cn\\iocoder\\yudao\\module\\mes\\controller\\admin\\wm\\batch\\vo\\MesWmBatchRespVO.java", "removed": 1, "before": "package cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.Data;\n\nimport java.time.LocalDateTime;\n\n@Schema(description = \"管理后台 - MES 批次管理 Response VO\")\n@Data\npublic class MesWmBatchRespVO {\n\n @Schema(description = \"批次 ID\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1\")\n private Long id;\n\n @Schema(description = \"批次编码\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"BATCH20250314001\")\n private String code;\n\n @Schema(description = \"物料 ID\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1\")\n private Long itemId;\n\n @Schema(description = \"物料编码\", example = \"ITEM001\")\n private String itemCode;\n\n @Schema(description = \"物料名称\", example = \"产品A\")\n private String itemName;\n\n @Schema(description = \"规格型号\", example = \"100*200\")\n private String itemSpecification;\n\n @Schema(description = \"单位名称\", example = \"个\")\n private String unitName;\n\n @Schema(description = \"生产日期\")\n private LocalDateTime produceDate;\n\n @Schema(description = \"有效期\")\n private LocalDateTime expireDate;\n\n @Schema(description = \"入库日期\")\n private LocalDateTime receiptDate;\n\n @Schema(description = \"供应商 ID\", example = \"1\")\n private Long vendorId;\n\n @Schema(description = \"供应商编码\", example = \"V001\")\n private String vendorCode;\n\n @Schema(description = \"供应商名称\", example = \"供应商A\")\n private String vendorName;\n\n @Schema(description = \"客户 ID\", example = \"1\")\n private Long clientId;\n\n @Schema(description = \"客户编码\", example = \"C001\")\n private String clientCode;\n\n @Schema(description = \"客户名称\", example = \"客户A\")\n private String clientName;\n\n @Schema(description = \"采购订单编号\", example = \"PO20250314001\")\n private String purchaseOrderCode;\n\n @Schema(description = \"销售订单编号\", example = \"SO20250314001\")\n private String salesOrderCode;\n\n @Schema(description = \"生产工单 ID\", example = \"1\")\n private Long workOrderId;\n\n @Schema(description = \"生产工单编号\", example = \"WO20250314001\")\n private String workOrderCode;\n\n @Schema(description = \"生产任务 ID\", example = \"1\")\n private Long taskId;\n\n @Schema(description = \"生产任务编号\", example = \"TASK20250314001\")\n private String taskCode;\n\n @Schema(description = \"工作站 ID\", example = \"1\")\n private Long workstationId;\n\n @Schema(description = \"工作站编码\", example = \"WS001\")\n private String workstationCode;\n\n @Schema(description = \"工具 ID\", example = \"1\")\n private Long toolId;\n\n @Schema(description = \"工具编号\", example = \"TOOL001\")\n private String toolCode;\n\n @Schema(description = \"模具 ID\", example = \"1\")\n private Long moldId;\n\n @Schema(description = \"生产批号\", example = \"LOT20250314001\")\n private String lotNumber;\n\n @Schema(description = \"质量状态\", example = \"1\")\n private Integer qualityStatus;\n\n @Schema(description = \"备注\", example = \"备注\")\n private String remark;\n\n @Schema(description = \"创建时间\", requiredMode = Schema.RequiredMode.REQUIRED)\n private LocalDateTime createTime;\n\n}\n", "after": "package cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.Data;\n\nimport java.time.LocalDateTime;\n\n@Schema(description = \"管理后台 - MES 批次管理 Response VO\")\n@Data\npublic class MesWmBatchRespVO {\n\n @Schema(description = \"批次 ID\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1\")\n private Long id;\n\n @Schema(description = \"批次编码\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"BATCH20250314001\")\n private String code;\n\n @Schema(description = \"物料 ID\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1\")\n private Long itemId;\n\n @Schema(description = \"物料编码\", example = \"ITEM001\")\n private String itemCode;\n\n @Schema(description = \"物料名称\", example = \"产品A\")\n private String itemName;\n\n @Schema(description = \"规格型号\", example = \"100*200\")\n private String itemSpecification;\n\n @Schema(description = \"单位名称\", example = \"个\")\n private String unitName;\n\n @Schema(description = \"生产日期\")\n private LocalDateTime produceDate;\n\n @Schema(description = \"有效期\")\n private LocalDateTime expireDate;\n\n @Schema(description = \"入库日期\")\n private LocalDateTime receiptDate;\n\n @Schema(description = \"供应商 ID\", example = \"1\")\n private Long vendorId;\n\n @Schema(description = \"供应商编码\", example = \"V001\")\n private String vendorCode;\n\n @Schema(description = \"供应商名称\", example = \"供应商A\")\n private String vendorName;\n\n @Schema(description = \"客户 ID\", example = \"1\")\n private Long clientId;\n\n\n @Schema(description = \"客户名称\", example = \"客户A\")\n private String clientName;\n\n @Schema(description = \"采购订单编号\", example = \"PO20250314001\")\n private String purchaseOrderCode;\n\n @Schema(description = \"销售订单编号\", example = \"SO20250314001\")\n private String salesOrderCode;\n\n @Schema(description = \"生产工单 ID\", example = \"1\")\n private Long workOrderId;\n\n @Schema(description = \"生产工单编号\", example = \"WO20250314001\")\n private String workOrderCode;\n\n @Schema(description = \"生产任务 ID\", example = \"1\")\n private Long taskId;\n\n @Schema(description = \"生产任务编号\", example = \"TASK20250314001\")\n private String taskCode;\n\n @Schema(description = \"工作站 ID\", example = \"1\")\n private Long workstationId;\n\n @Schema(description = \"工作站编码\", example = \"WS001\")\n private String workstationCode;\n\n @Schema(description = \"工具 ID\", example = \"1\")\n private Long toolId;\n\n @Schema(description = \"工具编号\", example = \"TOOL001\")\n private String toolCode;\n\n @Schema(description = \"模具 ID\", example = \"1\")\n private Long moldId;\n\n @Schema(description = \"生产批号\", example = \"LOT20250314001\")\n private String lotNumber;\n\n @Schema(description = \"质量状态\", example = \"1\")\n private Integer qualityStatus;\n\n @Schema(description = \"备注\", example = \"备注\")\n private String remark;\n\n @Schema(description = \"创建时间\", requiredMode = Schema.RequiredMode.REQUIRED)\n private LocalDateTime createTime;\n\n}\n" }, { "file": "yudao-module-mes\\src\\main\\java\\cn\\iocoder\\yudao\\module\\mes\\controller\\admin\\wm\\batch\\vo\\MesWmBatchSalesTargetRespVO.java", "removed": 1, "before": "package cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo;\r\n\r\nimport io.swagger.v3.oas.annotations.media.Schema;\r\nimport lombok.Data;\r\n\r\nimport java.math.BigDecimal;\r\nimport java.time.LocalDateTime;\r\n\r\n@Schema(description = \"管理后台 - MES 批次销售去向 Response VO\")\r\n@Data\r\npublic class MesWmBatchSalesTargetRespVO {\r\n\r\n @Schema(description = \"销售出库单号\", example = \"SO20250801001\")\r\n private String salesCode;\r\n\r\n @Schema(description = \"出库日期\")\r\n private LocalDateTime salesDate;\r\n\r\n @Schema(description = \"销售订单编号\", example = \"SO20250801001\")\r\n private String salesOrderCode;\r\n\r\n @Schema(description = \"客户 ID\", example = \"1\")\r\n private Long clientId;\r\n\r\n @Schema(description = \"客户编码\", example = \"C001\")\r\n private String clientCode;\r\n\r\n @Schema(description = \"客户名称\", example = \"客户A\")\r\n private String clientName;\r\n\r\n @Schema(description = \"出厂检验单号(OQC)\", example = \"OQC20250801001\")\r\n private String oqcCode;\r\n\r\n @Schema(description = \"OQC 检验结论(字典 mes_qc_check_result)\", example = \"1\")\r\n private Integer checkResult;\r\n\r\n @Schema(description = \"物料 ID\", example = \"1\")\r\n private Long itemId;\r\n\r\n @Schema(description = \"物料编码\", example = \"ITEM001\")\r\n private String itemCode;\r\n\r\n @Schema(description = \"物料名称\", example = \"产品A\")\r\n private String itemName;\r\n\r\n @Schema(description = \"批次号\", example = \"BATCH20250801001\")\r\n private String batchCode;\r\n\r\n @Schema(description = \"出库数量\", example = \"100\")\r\n private BigDecimal quantity;\r\n\r\n @Schema(description = \"质量状态(字典 mes_wm_quality_status)\", example = \"1\")\r\n private Integer qualityStatus;\r\n\r\n}\r\n", "after": "package cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo;\r\n\r\nimport io.swagger.v3.oas.annotations.media.Schema;\r\nimport lombok.Data;\r\n\r\nimport java.math.BigDecimal;\r\nimport java.time.LocalDateTime;\r\n\r\n@Schema(description = \"管理后台 - MES 批次销售去向 Response VO\")\r\n@Data\r\npublic class MesWmBatchSalesTargetRespVO {\r\n\r\n @Schema(description = \"销售出库单号\", example = \"SO20250801001\")\r\n private String salesCode;\r\n\r\n @Schema(description = \"出库日期\")\r\n private LocalDateTime salesDate;\r\n\r\n @Schema(description = \"销售订单编号\", example = \"SO20250801001\")\r\n private String salesOrderCode;\r\n\r\n @Schema(description = \"客户 ID\", example = \"1\")\r\n private Long clientId;\r\n\r\n\r\n @Schema(description = \"客户名称\", example = \"客户A\")\r\n private String clientName;\r\n\r\n @Schema(description = \"出厂检验单号(OQC)\", example = \"OQC20250801001\")\r\n private String oqcCode;\r\n\r\n @Schema(description = \"OQC 检验结论(字典 mes_qc_check_result)\", example = \"1\")\r\n private Integer checkResult;\r\n\r\n @Schema(description = \"物料 ID\", example = \"1\")\r\n private Long itemId;\r\n\r\n @Schema(description = \"物料编码\", example = \"ITEM001\")\r\n private String itemCode;\r\n\r\n @Schema(description = \"物料名称\", example = \"产品A\")\r\n private String itemName;\r\n\r\n @Schema(description = \"批次号\", example = \"BATCH20250801001\")\r\n private String batchCode;\r\n\r\n @Schema(description = \"出库数量\", example = \"100\")\r\n private BigDecimal quantity;\r\n\r\n @Schema(description = \"质量状态(字典 mes_wm_quality_status)\", example = \"1\")\r\n private Integer qualityStatus;\r\n\r\n}\r\n" }, { "file": "yudao-module-mes\\src\\main\\java\\cn\\iocoder\\yudao\\module\\mes\\controller\\admin\\wm\\packages\\vo\\MesWmPackageRespVO.java", "removed": 1, "before": "package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo;\n\nimport cn.idev.excel.annotation.ExcelIgnoreUnannotated;\nimport cn.idev.excel.annotation.ExcelProperty;\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.Data;\nimport lombok.experimental.Accessors;\n\nimport java.math.BigDecimal;\nimport java.time.LocalDateTime;\n\n/**\n * MES 装箱单 Response VO\n *\n * @author 超级管理员\n */\n@Schema(description = \"管理后台 - MES 装箱单 Response VO\")\n@Data\n@Accessors(chain = true)\n@ExcelIgnoreUnannotated\npublic class MesWmPackageRespVO {\n\n @Schema(description = \"编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1024\")\n @ExcelProperty(\"编号\")\n private Long id;\n\n @Schema(description = \"装箱单编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"PKG20260307001\")\n @ExcelProperty(\"装箱单编号\")\n private String code;\n\n @Schema(description = \"父箱 ID\", example = \"0\")\n private Long parentId;\n\n @Schema(description = \"装箱日期\")\n @ExcelProperty(\"装箱日期\")\n private LocalDateTime packageDate;\n\n @Schema(description = \"销售订单编号\", example = \"SO20260301\")\n @ExcelProperty(\"销售订单编号\")\n private String salesOrderCode;\n\n @Schema(description = \"发票编号\", example = \"INV20260301\")\n @ExcelProperty(\"发票编号\")\n private String invoiceCode;\n\n @Schema(description = \"客户 ID\", example = \"1\")\n private Long clientId;\n\n @Schema(description = \"客户编码\", example = \"C001\")\n @ExcelProperty(\"客户编码\")\n private String clientCode;\n\n @Schema(description = \"客户名称\", example = \"某客户\")\n @ExcelProperty(\"客户名称\")\n private String clientName;\n\n @Schema(description = \"客户简称\", example = \"某客户简称\")\n private String clientNickname;\n\n @Schema(description = \"箱长度\", example = \"60.00\")\n @ExcelProperty(\"箱长度\")\n private BigDecimal length;\n\n @Schema(description = \"箱宽度\", example = \"40.00\")\n @ExcelProperty(\"箱宽度\")\n private BigDecimal width;\n\n @Schema(description = \"箱高度\", example = \"30.00\")\n @ExcelProperty(\"箱高度\")\n private BigDecimal height;\n\n @Schema(description = \"尺寸单位 ID\", example = \"1\")\n private Long sizeUnitId;\n\n @Schema(description = \"尺寸单位名称\", example = \"厘米\")\n @ExcelProperty(\"尺寸单位\")\n private String sizeUnitName;\n\n @Schema(description = \"净重\", example = \"10.00\")\n @ExcelProperty(\"净重\")\n private BigDecimal netWeight;\n\n @Schema(description = \"毛重\", example = \"12.00\")\n @ExcelProperty(\"毛重\")\n private BigDecimal grossWeight;\n\n @Schema(description = \"重量单位 ID\", example = \"2\")\n private Long weightUnitId;\n\n @Schema(description = \"重量单位名称\", example = \"千克\")\n @ExcelProperty(\"重量单位\")\n private String weightUnitName;\n\n @Schema(description = \"检查员用户 ID\", example = \"1\")\n private Long inspectorUserId;\n\n @Schema(description = \"检查员姓名\", example = \"张三\")\n @ExcelProperty(\"检查员\")\n private String inspectorName;\n\n @Schema(description = \"状态\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"0\")\n @ExcelProperty(\"状态\")\n private Integer status;\n\n @Schema(description = \"备注\", example = \"备注\")\n @ExcelProperty(\"备注\")\n private String remark;\n\n @Schema(description = \"创建时间\", requiredMode = Schema.RequiredMode.REQUIRED)\n @ExcelProperty(\"创建时间\")\n private LocalDateTime createTime;\n\n}\n", "after": "package cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo;\n\nimport cn.idev.excel.annotation.ExcelIgnoreUnannotated;\nimport cn.idev.excel.annotation.ExcelProperty;\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.Data;\nimport lombok.experimental.Accessors;\n\nimport java.math.BigDecimal;\nimport java.time.LocalDateTime;\n\n/**\n * MES 装箱单 Response VO\n *\n * @author 超级管理员\n */\n@Schema(description = \"管理后台 - MES 装箱单 Response VO\")\n@Data\n@Accessors(chain = true)\n@ExcelIgnoreUnannotated\npublic class MesWmPackageRespVO {\n\n @Schema(description = \"编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1024\")\n @ExcelProperty(\"编号\")\n private Long id;\n\n @Schema(description = \"装箱单编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"PKG20260307001\")\n @ExcelProperty(\"装箱单编号\")\n private String code;\n\n @Schema(description = \"父箱 ID\", example = \"0\")\n private Long parentId;\n\n @Schema(description = \"装箱日期\")\n @ExcelProperty(\"装箱日期\")\n private LocalDateTime packageDate;\n\n @Schema(description = \"销售订单编号\", example = \"SO20260301\")\n @ExcelProperty(\"销售订单编号\")\n private String salesOrderCode;\n\n @Schema(description = \"发票编号\", example = \"INV20260301\")\n @ExcelProperty(\"发票编号\")\n private String invoiceCode;\n\n @Schema(description = \"客户 ID\", example = \"1\")\n private Long clientId;\n\n\n @Schema(description = \"客户名称\", example = \"某客户\")\n @ExcelProperty(\"客户名称\")\n private String clientName;\n\n @Schema(description = \"客户简称\", example = \"某客户简称\")\n private String clientNickname;\n\n @Schema(description = \"箱长度\", example = \"60.00\")\n @ExcelProperty(\"箱长度\")\n private BigDecimal length;\n\n @Schema(description = \"箱宽度\", example = \"40.00\")\n @ExcelProperty(\"箱宽度\")\n private BigDecimal width;\n\n @Schema(description = \"箱高度\", example = \"30.00\")\n @ExcelProperty(\"箱高度\")\n private BigDecimal height;\n\n @Schema(description = \"尺寸单位 ID\", example = \"1\")\n private Long sizeUnitId;\n\n @Schema(description = \"尺寸单位名称\", example = \"厘米\")\n @ExcelProperty(\"尺寸单位\")\n private String sizeUnitName;\n\n @Schema(description = \"净重\", example = \"10.00\")\n @ExcelProperty(\"净重\")\n private BigDecimal netWeight;\n\n @Schema(description = \"毛重\", example = \"12.00\")\n @ExcelProperty(\"毛重\")\n private BigDecimal grossWeight;\n\n @Schema(description = \"重量单位 ID\", example = \"2\")\n private Long weightUnitId;\n\n @Schema(description = \"重量单位名称\", example = \"千克\")\n @ExcelProperty(\"重量单位\")\n private String weightUnitName;\n\n @Schema(description = \"检查员用户 ID\", example = \"1\")\n private Long inspectorUserId;\n\n @Schema(description = \"检查员姓名\", example = \"张三\")\n @ExcelProperty(\"检查员\")\n private String inspectorName;\n\n @Schema(description = \"状态\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"0\")\n @ExcelProperty(\"状态\")\n private Integer status;\n\n @Schema(description = \"备注\", example = \"备注\")\n @ExcelProperty(\"备注\")\n private String remark;\n\n @Schema(description = \"创建时间\", requiredMode = Schema.RequiredMode.REQUIRED)\n @ExcelProperty(\"创建时间\")\n private LocalDateTime createTime;\n\n}\n" }, { "file": "yudao-module-mes\\src\\main\\java\\cn\\iocoder\\yudao\\module\\mes\\controller\\admin\\wm\\productissue\\vo\\MesWmProductIssueRespVO.java", "removed": 1, "before": "package cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo;\r\n\r\nimport io.swagger.v3.oas.annotations.media.Schema;\r\nimport lombok.Data;\r\n\r\nimport java.time.LocalDateTime;\r\n\r\n@Schema(description = \"管理后台 - MES 领料出库单 Response VO\")\r\n@Data\r\npublic class MesWmProductIssueRespVO {\r\n\r\n @Schema(description = \"编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1\")\r\n private Long id;\r\n\r\n @Schema(description = \"领料单编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"ISSUE20250226001\")\r\n private String code;\r\n\r\n @Schema(description = \"领料单名称\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"生产领料\")\r\n private String name;\r\n\r\n @Schema(description = \"生产工单 ID\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1\")\r\n private Long workOrderId;\r\n\r\n @Schema(description = \"生产工单编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"WO20250226001\")\r\n private String workOrderCode;\r\n\r\n @Schema(description = \"工作站 ID\", example = \"1\")\r\n private Long workstationId;\r\n\r\n @Schema(description = \"工作站名称\", example = \"装配工作站\")\r\n private String workstationName;\r\n\r\n @Schema(description = \"客户编号\", example = \"C001\")\r\n private String clientCode;\r\n\r\n @Schema(description = \"客户名称\", example = \"某某客户\")\r\n private String clientName;\r\n\r\n @Schema(description = \"生产任务 ID\", example = \"1\")\r\n private Long taskId;\r\n\r\n @Schema(description = \"生产任务编码\", example = \"TASK001\")\r\n private String taskCode;\r\n\r\n @Schema(description = \"生产任务名称\", example = \"注塑任务\")\r\n private String taskName;\r\n\r\n @Schema(description = \"领料日期\")\r\n private LocalDateTime issueDate;\r\n\r\n @Schema(description = \"需求时间\", requiredMode = Schema.RequiredMode.REQUIRED)\r\n private LocalDateTime requiredTime;\r\n\r\n @Schema(description = \"状态\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"10\")\r\n private Integer status;\r\n\r\n @Schema(description = \"备注\", example = \"备注\")\r\n private String remark;\r\n\r\n @Schema(description = \"创建时间\", requiredMode = Schema.RequiredMode.REQUIRED)\r\n private LocalDateTime createTime;\r\n\r\n}\r\n", "after": "package cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo;\r\n\r\nimport io.swagger.v3.oas.annotations.media.Schema;\r\nimport lombok.Data;\r\n\r\nimport java.time.LocalDateTime;\r\n\r\n@Schema(description = \"管理后台 - MES 领料出库单 Response VO\")\r\n@Data\r\npublic class MesWmProductIssueRespVO {\r\n\r\n @Schema(description = \"编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1\")\r\n private Long id;\r\n\r\n @Schema(description = \"领料单编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"ISSUE20250226001\")\r\n private String code;\r\n\r\n @Schema(description = \"领料单名称\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"生产领料\")\r\n private String name;\r\n\r\n @Schema(description = \"生产工单 ID\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"1\")\r\n private Long workOrderId;\r\n\r\n @Schema(description = \"生产工单编号\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"WO20250226001\")\r\n private String workOrderCode;\r\n\r\n @Schema(description = \"工作站 ID\", example = \"1\")\r\n private Long workstationId;\r\n\r\n @Schema(description = \"工作站名称\", example = \"装配工作站\")\r\n private String workstationName;\r\n\r\n\r\n @Schema(description = \"客户名称\", example = \"某某客户\")\r\n private String clientName;\r\n\r\n @Schema(description = \"生产任务 ID\", example = \"1\")\r\n private Long taskId;\r\n\r\n @Schema(description = \"生产任务编码\", example = \"TASK001\")\r\n private String taskCode;\r\n\r\n @Schema(description = \"生产任务名称\", example = \"注塑任务\")\r\n private String taskName;\r\n\r\n @Schema(description = \"领料日期\")\r\n private LocalDateTime issueDate;\r\n\r\n @Schema(description = \"需求时间\", requiredMode = Schema.RequiredMode.REQUIRED)\r\n private LocalDateTime requiredTime;\r\n\r\n @Schema(description = \"状态\", requiredMode = Schema.RequiredMode.REQUIRED, example = \"10\")\r\n private Integer status;\r\n\r\n @Schema(description = \"备注\", example = \"备注\")\r\n private String remark;\r\n\r\n @Schema(description = \"创建时间\", requiredMode = Schema.RequiredMode.REQUIRED)\r\n private LocalDateTime createTime;\r\n\r\n}\r\n" }, { "file": "yudao-module-mes\\src\\main\\java\\cn\\iocoder\\yudao\\module\\mes\\enums\\ErrorCodeConstants.java", "removed": 1, "before": "package cn.iocoder.yudao.module.mes.enums;\r\n\r\nimport cn.iocoder.yudao.framework.common.exception.ErrorCode;\r\n\r\n/**\r\n * MES 错误码枚举类\r\n *

\r\n * mes 系统,使用 1-040-000-000 段\r\n */\r\npublic interface ErrorCodeConstants {\r\n\r\n // ========== MES 基础数据-物料分类(1-040-100-000) ==========\r\n ErrorCode MD_ITEM_TYPE_NOT_EXISTS = new ErrorCode(1_040_100_000, \"物料分类不存在\");\r\n ErrorCode MD_ITEM_TYPE_EXITS_CHILDREN = new ErrorCode(1_040_100_001, \"存在子分类,无法删除\");\r\n ErrorCode MD_ITEM_TYPE_PARENT_NOT_EXITS = new ErrorCode(1_040_100_002, \"父级分类不存在\");\r\n ErrorCode MD_ITEM_TYPE_PARENT_ERROR = new ErrorCode(1_040_100_003, \"不能设置自己为父分类\");\r\n ErrorCode MD_ITEM_TYPE_NAME_DUPLICATE = new ErrorCode(1_040_100_004, \"同一父分类下已存在该名称的分类\");\r\n ErrorCode MD_ITEM_TYPE_CODE_DUPLICATE = new ErrorCode(1_040_100_005, \"同一父分类下已存在该编码的分类\");\r\n ErrorCode MD_ITEM_TYPE_PARENT_IS_CHILD = new ErrorCode(1_040_100_006, \"不能设置自己的子分类为父分类\");\r\n ErrorCode MD_ITEM_TYPE_EXITS_ITEM = new ErrorCode(1_040_100_007, \"该分类下存在物料,无法删除\");\r\n ErrorCode MD_ITEM_TYPE_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_100_008, \"导入的物料分类数据不能为空\");\r\n\r\n // ========== MES 基础数据-计量单位(1-040-101-000) ==========\r\n ErrorCode MD_UNIT_MEASURE_NOT_EXISTS = new ErrorCode(1_040_101_000, \"计量单位不存在\");\r\n ErrorCode MD_UNIT_MEASURE_CODE_DUPLICATE = new ErrorCode(1_040_101_001, \"计量单位编码已存在\");\r\n ErrorCode MD_UNIT_MEASURE_HAS_ITEM = new ErrorCode(1_040_101_002, \"该计量单位下存在物料,无法删除\");\r\n ErrorCode MD_UNIT_MEASURE_HAS_SECONDARY = new ErrorCode(1_040_101_003, \"该主单位下存在辅单位,无法删除\");\r\n ErrorCode MD_UNIT_MEASURE_HAS_TASK_ISSUE = new ErrorCode(1_040_101_004, \"该计量单位已被生产投料引用,无法删除\");\r\n ErrorCode MD_UNIT_MEASURE_HAS_QC_TEMPLATE_INDICATOR = new ErrorCode(1_040_101_005, \"该计量单位已被质检方案指标项引用,无法删除\");\r\n ErrorCode MD_UNIT_MEASURE_HAS_QC_LINE = new ErrorCode(1_040_101_006, \"该计量单位已被质检单据行引用,无法删除\");\r\n\r\n // ========== MES 基础数据-物料(1-040-102-000) ==========\r\n ErrorCode MD_ITEM_NOT_EXISTS = new ErrorCode(1_040_102_000, \"物料不存在\");\r\n ErrorCode MD_ITEM_CODE_DUPLICATE = new ErrorCode(1_040_102_001, \"物料编码已存在\");\r\n // 1_040_102_002:物料名称唯一校验已取消(允许同名不同编码,与 MDM 物料对齐),此码仅保留占位,请勿再用于校验\r\n ErrorCode MD_ITEM_NAME_DUPLICATE = new ErrorCode(1_040_102_002, \"物料名称已存在\");\r\n ErrorCode MD_ITEM_BATCH_REQUIRED = new ErrorCode(1_040_102_004, \"当前物料启用了批次管理,请选择批次\");\r\n ErrorCode MD_ITEM_IS_DISABLE = new ErrorCode(1_040_102_005, \"物料已禁用\");\r\n\r\n // ========== MES 基础数据-物料批次属性配置(1-040-102-100) ==========\r\n ErrorCode MD_ITEM_BATCH_CONFIG_NOT_EXISTS = new ErrorCode(1_040_102_100, \"物料批次属性配置不存在\");\r\n ErrorCode MD_ITEM_BATCH_CONFIG_AT_LEAST_ONE_FLAG = new ErrorCode(1_040_102_101, \"批次管理已启用,至少需要配置一个批次属性\");\r\n ErrorCode MD_ITEM_PRODUCT_BOM_REQUIRED = new ErrorCode(1_040_102_102, \"产品类物料启用前,必须配置至少一个 BOM 组成\");\r\n ErrorCode MD_ITEM_BATCH_CONFIG_AT_LEAST_ONE_APPROVE_FLAG = new ErrorCode(1_040_102_103, \"需要配置一个批次属性,请在审批意见中填写\");\r\n\r\n // ========== MES 仓库管理-批次管理(1-040-717-000) ==========\r\n ErrorCode WM_BATCH_PRODUCE_DATE_REQUIRED = new ErrorCode(1_040_717_000, \"批次配置要求生产日期不能为空\");\r\n ErrorCode WM_BATCH_RECEIPT_DATE_REQUIRED = new ErrorCode(1_040_717_001, \"批次配置要求入库日期不能为空\");\r\n ErrorCode WM_BATCH_EXPIRE_DATE_REQUIRED = new ErrorCode(1_040_717_002, \"批次配置要求有效期不能为空\");\r\n ErrorCode WM_BATCH_VENDOR_REQUIRED = new ErrorCode(1_040_717_003, \"批次配置要求供应商不能为空\");\r\n ErrorCode WM_BATCH_CLIENT_REQUIRED = new ErrorCode(1_040_717_004, \"批次配置要求客户不能为空\");\r\n ErrorCode WM_BATCH_PURCHASE_ORDER_CODE_REQUIRED = new ErrorCode(1_040_717_005, \"批次配置要求采购订单编号不能为空\");\r\n ErrorCode WM_BATCH_CUSTOMER_ORDER_CODE_REQUIRED = new ErrorCode(1_040_717_006, \"批次配置要求销售订单编号不能为空\");\r\n ErrorCode WM_BATCH_WORK_ORDER_REQUIRED = new ErrorCode(1_040_717_007, \"批次配置要求生产工单不能为空\");\r\n ErrorCode WM_BATCH_TASK_REQUIRED = new ErrorCode(1_040_717_008, \"批次配置要求生产任务不能为空\");\r\n ErrorCode WM_BATCH_WORKSTATION_REQUIRED = new ErrorCode(1_040_717_009, \"批次配置要求工作站不能为空\");\r\n ErrorCode WM_BATCH_TOOL_REQUIRED = new ErrorCode(1_040_717_010, \"批次配置要求工具不能为空\");\r\n ErrorCode WM_BATCH_MOLD_REQUIRED = new ErrorCode(1_040_717_011, \"批次配置要求模具不能为空\");\r\n ErrorCode WM_BATCH_LOT_NUMBER_REQUIRED = new ErrorCode(1_040_717_012, \"批次配置要求生产批号不能为空\");\r\n ErrorCode WM_BATCH_QUALITY_STATUS_REQUIRED = new ErrorCode(1_040_717_013, \"批次配置要求质量状态不能为空\");\r\n ErrorCode WM_BATCH_NOT_EXISTS = new ErrorCode(1_040_717_014, \"批次不存在\");\r\n ErrorCode WM_BATCH_ITEM_MISMATCH = new ErrorCode(1_040_717_015, \"批次不属于当前物料\");\r\n ErrorCode WM_BATCH_CLIENT_MISMATCH = new ErrorCode(1_040_717_016, \"批次不属于当前客户\");\r\n ErrorCode WM_BATCH_VENDOR_MISMATCH = new ErrorCode(1_040_717_017, \"批次不属于当前供应商\");\r\n\r\n // ========== MES 基础数据-客户(1-040-103-000) ==========\r\n ErrorCode MD_CLIENT_NOT_EXISTS = new ErrorCode(1_040_103_000, \"客户不存在\");\r\n ErrorCode MD_CLIENT_CODE_DUPLICATE = new ErrorCode(1_040_103_001, \"客户编码已存在\");\r\n ErrorCode MD_CLIENT_NAME_DUPLICATE = new ErrorCode(1_040_103_002, \"客户名称已存在\");\r\n ErrorCode MD_CLIENT_NICKNAME_DUPLICATE = new ErrorCode(1_040_103_003, \"客户简称已存在\");\r\n ErrorCode MD_CLIENT_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_103_004, \"导入客户数据不能为空\");\r\n ErrorCode MD_CLIENT_IS_DISABLE = new ErrorCode(1_040_103_005, \"客户已禁用\");\r\n\r\n // ========== MES 基础数据-供应商(1-040-104-000) ==========\r\n ErrorCode MD_VENDOR_NOT_EXISTS = new ErrorCode(1_040_104_000, \"供应商不存在\");\r\n ErrorCode MD_VENDOR_CODE_DUPLICATE = new ErrorCode(1_040_104_001, \"供应商编码已存在\");\r\n ErrorCode MD_VENDOR_NAME_DUPLICATE = new ErrorCode(1_040_104_002, \"供应商名称已存在\");\r\n ErrorCode MD_VENDOR_NICKNAME_DUPLICATE = new ErrorCode(1_040_104_003, \"供应商简称已存在\");\r\n ErrorCode MD_VENDOR_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_104_004, \"导入供应商数据不能为空\");\r\n ErrorCode MD_VENDOR_HAS_REFERENCE = new ErrorCode(1_040_104_005, \"该供应商已被其他业务引用,无法删除\");\r\n ErrorCode MD_VENDOR_IS_DISABLE = new ErrorCode(1_040_104_006, \"供应商已禁用\");\r\n\r\n // ========== MES 基础数据-车间(1-040-105-000) ==========\r\n ErrorCode MD_WORKSHOP_NOT_EXISTS = new ErrorCode(1_040_105_000, \"车间不存在\");\r\n ErrorCode MD_WORKSHOP_CODE_DUPLICATE = new ErrorCode(1_040_105_001, \"车间编码已存在\");\r\n ErrorCode MD_WORKSHOP_NAME_DUPLICATE = new ErrorCode(1_040_105_002, \"车间名称已存在\");\r\n ErrorCode MD_WORKSHOP_HAS_WORKSTATION = new ErrorCode(1_040_105_003, \"车间下存在工作站,无法删除\");\r\n\r\n // ========== MES 基础数据-工作站(1-040-106-000) ==========\r\n ErrorCode MD_WORKSTATION_NOT_EXISTS = new ErrorCode(1_040_106_000, \"工作站不存在\");\r\n ErrorCode MD_WORKSTATION_CODE_DUPLICATE = new ErrorCode(1_040_106_001, \"工作站编码已存在\");\r\n ErrorCode MD_WORKSTATION_NAME_DUPLICATE = new ErrorCode(1_040_106_002, \"工作站名称已存在\");\r\n ErrorCode MD_WORKSTATION_IS_DISABLE = new ErrorCode(1_040_106_003, \"工作站已禁用\");\r\n // ========== MES 基础数据-设备资源(1-040-106-100) ==========\r\n ErrorCode MD_WORKSTATION_MACHINE_NOT_EXISTS = new ErrorCode(1_040_106_100, \"设备资源记录不存在\");\r\n ErrorCode MD_WORKSTATION_MACHINE_EXISTS = new ErrorCode(1_040_106_101, \"该设备已分配至工作站:{}\");\r\n // ========== MES 基础数据-工装夹具资源(1-040-106-200) ==========\r\n ErrorCode MD_WORKSTATION_TOOL_NOT_EXISTS = new ErrorCode(1_040_106_200, \"工装夹具资源记录不存在\");\r\n ErrorCode MD_WORKSTATION_TOOL_TYPE_EXISTS = new ErrorCode(1_040_106_201, \"该工具类型已在此工作站中存在\");\r\n // ========== MES 基础数据-人力资源(1-040-106-300) ==========\r\n ErrorCode MD_WORKSTATION_WORKER_NOT_EXISTS = new ErrorCode(1_040_106_300, \"人力资源记录不存在\");\r\n ErrorCode MD_WORKSTATION_WORKER_POST_EXISTS = new ErrorCode(1_040_106_301, \"该岗位已在此工作站中存在\");\r\n\r\n // ========== MES 基础数据-产品BOM(1-040-107-000) ==========\r\n ErrorCode MD_PRODUCT_BOM_NOT_EXISTS = new ErrorCode(1_040_107_000, \"产品BOM不存在\");\r\n ErrorCode MD_PRODUCT_BOM_SELF_REFERENCE = new ErrorCode(1_040_107_001, \"产品不能作为自身的BOM物料\");\r\n ErrorCode MD_PRODUCT_BOM_CIRCULAR = new ErrorCode(1_040_107_002, \"BOM物料存在闭环,无法新增\");\r\n ErrorCode MD_PRODUCT_BOM_ITEM_INVALID = new ErrorCode(1_040_107_003, \"选择的 BOM 物料不属于当前产品\");\r\n\r\n // ========== MES 基础数据-产品SOP(1-040-108-000) ==========\r\n ErrorCode MD_PRODUCT_SOP_NOT_EXISTS = new ErrorCode(1_040_108_000, \"产品SOP不存在\");\r\n ErrorCode MD_PRODUCT_SOP_SORT_DUPLICATE = new ErrorCode(1_040_108_001, \"该展示序号已存在\");\r\n\r\n // ========== MES 基础数据-产品SIP(1-040-109-000) ==========\r\n ErrorCode MD_PRODUCT_SIP_NOT_EXISTS = new ErrorCode(1_040_109_000, \"产品SIP不存在\");\r\n ErrorCode MD_PRODUCT_SIP_SORT_DUPLICATE = new ErrorCode(1_040_109_001, \"该展示序号已存在\");\r\n\r\n // ========== MES 基础数据-编码规则(1-040-110-000) ==========\r\n ErrorCode AUTO_CODE_RULE_NOT_EXISTS = new ErrorCode(1_040_110_000, \"编码规则不存在\");\r\n ErrorCode AUTO_CODE_RULE_CODE_DUPLICATE = new ErrorCode(1_040_110_001, \"规则编码已存在\");\r\n ErrorCode AUTO_CODE_PART_NOT_EXISTS = new ErrorCode(1_040_110_002, \"规则组成不存在\");\r\n ErrorCode AUTO_CODE_REDIS_ERROR = new ErrorCode(1_040_110_003, \"编码生成服务不可用,请稍后重试\");\r\n ErrorCode AUTO_CODE_GENERATE_FAILED = new ErrorCode(1_040_110_004, \"编码生成失败\");\r\n ErrorCode AUTO_CODE_PART_SERIAL_NUMBER_DUPLICATE = new ErrorCode(1_040_110_005, \"流水号分段只能存在一个\");\r\n\r\n // ========== MES 日历排班-计划班次(1-040-200-000) ==========\r\n ErrorCode CAL_PLAN_SHIFT_NOT_EXISTS = new ErrorCode(1_040_200_000, \"计划班次不存在\");\r\n ErrorCode CAL_PLAN_SHIFT_COUNT_EXCEED = new ErrorCode(1_040_200_001, \"班次数量已达到轮班方式的上限\");\r\n\r\n // ========== MES 日历排班-班组(1-040-201-000) ==========\r\n ErrorCode CAL_TEAM_NOT_EXISTS = new ErrorCode(1_040_201_000, \"班组不存在\");\r\n ErrorCode CAL_TEAM_CODE_DUPLICATE = new ErrorCode(1_040_201_001, \"班组编码已存在\");\r\n // ========== MES 日历排班-班组成员(1-040-201-100) ==========\r\n ErrorCode CAL_TEAM_MEMBER_NOT_EXISTS = new ErrorCode(1_040_201_100, \"班组成员不存在\");\r\n ErrorCode CAL_TEAM_MEMBER_USER_DUPLICATE = new ErrorCode(1_040_201_101, \"该用户已分配到其他班组\");\r\n ErrorCode CAL_TEAM_MEMBER_USER_NOT_EXISTS = new ErrorCode(1_040_201_102, \"用户不存在\");\r\n // ========== MES 日历排班-班组排班(1-040-201-200) ==========\r\n ErrorCode CAL_TEAM_SHIFT_NOT_EXISTS = new ErrorCode(1_040_201_200, \"班组排班记录不存在\");\r\n ErrorCode CAL_TEAM_SHIFT_GENERATE_TEAM_NOT_ENOUGH = new ErrorCode(1_040_201_201, \"班组数量不满足轮班方式要求\");\r\n ErrorCode CAL_TEAM_SHIFT_GENERATE_SHIFT_NOT_ENOUGH = new ErrorCode(1_040_201_202, \"班次数量不满足轮班方式要求\");\r\n\r\n // ========== MES 日历排班-排班计划(1-040-202-000) ==========\r\n ErrorCode CAL_PLAN_NOT_EXISTS = new ErrorCode(1_040_202_000, \"排班计划不存在\");\r\n ErrorCode CAL_PLAN_CODE_DUPLICATE = new ErrorCode(1_040_202_001, \"排班计划编码已存在\");\r\n ErrorCode CAL_PLAN_NOT_PREPARE = new ErrorCode(1_040_202_002, \"排班计划已确认,不允许修改或删除\");\r\n ErrorCode CAL_PLAN_TEAM_COUNT_NOT_MATCH = new ErrorCode(1_040_202_003, \"确认排班计划时,分配的班组数量与轮班方式不匹配\");\r\n // ========== MES 日历排班-计划班组关联(1-040-202-100) ==========\r\n ErrorCode CAL_PLAN_TEAM_NOT_EXISTS = new ErrorCode(1_040_202_100, \"计划班组关联不存在\");\r\n ErrorCode CAL_PLAN_TEAM_DUPLICATE = new ErrorCode(1_040_202_101, \"该班组已分配到此计划\");\r\n\r\n // ========== MES 日历排班-假期设置(1-040-203-000) ==========\r\n ErrorCode CAL_HOLIDAY_NOT_EXISTS = new ErrorCode(1_040_203_000, \"假期设置不存在\");\r\n\r\n // ========== MES 设备管理-设备类型(1-040-300-000) ==========\r\n ErrorCode DV_MACHINERY_TYPE_NOT_EXISTS = new ErrorCode(1_040_300_000, \"设备类型不存在\");\r\n ErrorCode DV_MACHINERY_TYPE_EXITS_CHILDREN = new ErrorCode(1_040_300_001, \"存在子类型,无法删除\");\r\n ErrorCode DV_MACHINERY_TYPE_PARENT_NOT_EXITS = new ErrorCode(1_040_300_002, \"父级类型不存在\");\r\n ErrorCode DV_MACHINERY_TYPE_PARENT_ERROR = new ErrorCode(1_040_300_003, \"不能设置自己为父类型\");\r\n ErrorCode DV_MACHINERY_TYPE_NAME_DUPLICATE = new ErrorCode(1_040_300_004, \"同一父类型下已存在该名称\");\r\n ErrorCode DV_MACHINERY_TYPE_CODE_DUPLICATE = new ErrorCode(1_040_300_005, \"设备类型编码已存在\");\r\n ErrorCode DV_MACHINERY_TYPE_PARENT_IS_CHILD = new ErrorCode(1_040_300_006, \"不能设置自己的子类型为父类型\");\r\n ErrorCode DV_MACHINERY_TYPE_HAS_MACHINERY = new ErrorCode(1_040_300_007, \"该类型下存在设备,无法删除\");\r\n\r\n // ========== MES 设备管理-设备台账(1-040-301-000) ==========\r\n ErrorCode DV_MACHINERY_NOT_EXISTS = new ErrorCode(1_040_301_000, \"设备不存在\");\r\n ErrorCode DV_MACHINERY_CODE_DUPLICATE = new ErrorCode(1_040_301_001, \"设备编码已存在\");\r\n ErrorCode DV_MACHINERY_IS_DISABLE = new ErrorCode(1_040_301_007, \"设备已禁用\");\r\n ErrorCode DV_MACHINERY_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_301_002, \"导入设备数据不能为空\");\r\n ErrorCode DV_MACHINERY_HAS_CHECK_PLAN = new ErrorCode(1_040_301_003, \"设备已关联点检计划,无法删除\");\r\n ErrorCode DV_MACHINERY_HAS_CHECK_RECORD = new ErrorCode(1_040_301_004, \"设备已关联点检记录,无法删除\");\r\n ErrorCode DV_MACHINERY_HAS_MAINTEN_RECORD = new ErrorCode(1_040_301_005, \"设备已关联保养记录,无法删除\");\r\n ErrorCode DV_MACHINERY_HAS_REPAIR = new ErrorCode(1_040_301_006, \"设备已关联维修工单,无法删除\");\r\n ErrorCode DV_MACHINERY_WORKSTATION_NOT_EXISTS = new ErrorCode(1_040_301_008, \"工作站编码不存在\");\r\n\r\n // ========== MES 设备管理-点检保养项目(1-040-304-000) ==========\r\n ErrorCode DV_SUBJECT_NOT_EXISTS = new ErrorCode(1_040_304_000, \"点检保养项目不存在\");\r\n ErrorCode DV_SUBJECT_CODE_DUPLICATE = new ErrorCode(1_040_304_001, \"项目编码已存在\");\r\n ErrorCode DV_SUBJECT_USED_BY_CHECK_PLAN = new ErrorCode(1_040_304_002, \"点检保养项目已被点检保养方案使用,无法删除\");\r\n ErrorCode DV_SUBJECT_IS_DISABLE = new ErrorCode(1_040_304_003, \"点检保养项目已禁用\");\r\n\r\n // ========== MES 设备管理-点检计划(1-040-302-000) ==========\r\n ErrorCode DV_CHECK_PLAN_NOT_EXISTS = new ErrorCode(1_040_302_000, \"点检计划不存在\");\r\n ErrorCode DV_CHECK_PLAN_CODE_DUPLICATE = new ErrorCode(1_040_302_001, \"点检保养方案编码已存在\");\r\n ErrorCode DV_CHECK_PLAN_NOT_PREPARE = new ErrorCode(1_040_302_002, \"点检保养方案已启用,不允许修改或删除\");\r\n ErrorCode DV_CHECK_PLAN_NO_MACHINERY = new ErrorCode(1_040_302_003, \"启用方案时,至少需要关联一台设备\");\r\n ErrorCode DV_CHECK_PLAN_NO_SUBJECT = new ErrorCode(1_040_302_004, \"启用方案时,至少需要关联一个点检保养项目\");\r\n ErrorCode DV_CHECK_PLAN_NOT_ENABLED = new ErrorCode(1_040_302_005, \"点检保养方案未启用,不允许停用\");\r\n ErrorCode DV_CHECK_PLAN_TYPE_MISMATCH = new ErrorCode(1_040_302_006, \"点检保养方案类型与当前业务不匹配\");\r\n ErrorCode DV_CHECK_PLAN_NOT_ENABLED_FOR_RECORD = new ErrorCode(1_040_302_007, \"点检保养方案未启用,不允许创建记录\");\r\n // ========== MES 设备管理-点检方案设备(1-040-302-100) ==========\r\n ErrorCode DV_CHECK_PLAN_MACHINERY_NOT_EXISTS = new ErrorCode(1_040_302_100, \"点检保养方案设备不存在\");\r\n ErrorCode DV_CHECK_PLAN_MACHINERY_DUPLICATE = new ErrorCode(1_040_302_101, \"该设备已关联到当前方案,请勿重复添加\");\r\n ErrorCode DV_CHECK_PLAN_MACHINERY_EXISTS_IN_SAME_TYPE = new ErrorCode(1_040_302_102, \"该设备已存在于同类型的其他启用的或草稿的方案中,不允许同一设备添加多个同类型的方案\");\r\n // ========== MES 设备管理-点检方案项目(1-040-302-200) ==========\r\n ErrorCode DV_CHECK_PLAN_SUBJECT_NOT_EXISTS = new ErrorCode(1_040_302_200, \"点检保养方案项目不存在\");\r\n ErrorCode DV_CHECK_PLAN_SUBJECT_DUPLICATE = new ErrorCode(1_040_302_201, \"该项目已关联到当前方案,请勿重复添加\");\r\n\r\n // ========== MES 设备管理-维修工单(1-040-303-000) ==========\r\n ErrorCode DV_REPAIR_NOT_EXISTS = new ErrorCode(1_040_303_000, \"维修工单不存在\");\r\n ErrorCode DV_REPAIR_NOT_PREPARE = new ErrorCode(1_040_303_001, \"维修工单不是草稿状态,不允许修改或删除\");\r\n ErrorCode DV_REPAIR_CODE_DUPLICATE = new ErrorCode(1_040_303_002, \"维修工单编码已存在\");\r\n ErrorCode DV_REPAIR_NOT_CONFIRMED = new ErrorCode(1_040_303_003, \"只有维修中状态的维修工单才能完成维修\");\r\n ErrorCode DV_REPAIR_NOT_APPROVING = new ErrorCode(1_040_303_004, \"只有待验收状态的维修工单才能验收\");\r\n // ========== MES 设备管理-维修工单行(1-040-303-100) ==========\r\n ErrorCode DV_REPAIR_LINE_NOT_EXISTS = new ErrorCode(1_040_303_100, \"维修工单行不存在\");\r\n\r\n // ========== MES 设备管理-保养记录(1-040-305-000) ==========\r\n ErrorCode MAINTEN_RECORD_NOT_EXISTS = new ErrorCode(1_040_305_000, \"设备保养记录不存在\");\r\n ErrorCode MAINTEN_RECORD_NOT_DRAFT = new ErrorCode(1_040_305_001, \"设备保养记录已提交,不允许修改或删除\");\r\n ErrorCode MAINTEN_RECORD_NO_LINE = new ErrorCode(1_040_305_002, \"提交保养记录时,至少需要一条保养项目\");\r\n // ========== MES 设备管理-保养记录明细(1-040-305-100) ==========\r\n ErrorCode MAINTEN_RECORD_LINE_NOT_EXISTS = new ErrorCode(1_040_305_100, \"设备保养记录明细不存在\");\r\n\r\n // ========== MES 设备管理-点检记录(1-040-306-000) ==========\r\n ErrorCode DV_CHECK_RECORD_NOT_EXISTS = new ErrorCode(1_040_306_000, \"设备点检记录不存在\");\r\n ErrorCode DV_CHECK_RECORD_NOT_DRAFT = new ErrorCode(1_040_306_001, \"设备点检记录已完成,不允许修改或删除\");\r\n ErrorCode DV_CHECK_RECORD_NO_LINE = new ErrorCode(1_040_306_002, \"提交点检记录时,至少需要一条点检项目\");\r\n // ========== MES 设备管理-点检记录明细(1-040-306-100) ==========\r\n ErrorCode DV_CHECK_RECORD_LINE_NOT_EXISTS = new ErrorCode(1_040_306_100, \"设备点检记录明细不存在\");\r\n\r\n // ========== MES 设备管理-计量器具(1-040-307-000) ==========\r\n ErrorCode DV_METERING_NOT_EXISTS = new ErrorCode(1_040_307_000, \"计量器具不存在\");\r\n ErrorCode DV_METERING_CODE_DUPLICATE = new ErrorCode(1_040_307_001, \"计量器具编码已存在\");\r\n ErrorCode DV_METERING_HAS_CHECK_RECORD = new ErrorCode(1_040_307_002, \"计量器具已关联检测记录,无法删除\");\r\n\r\n // ========== MES 设备管理-计量检测记录(1-040-307-100) ==========\r\n ErrorCode DV_METERING_CHECK_NOT_EXISTS = new ErrorCode(1_040_307_100, \"计量检测记录不存在\");\r\n ErrorCode DV_METERING_CHECK_CODE_DUPLICATE = new ErrorCode(1_040_307_101, \"计量检测编号已存在\");\r\n\r\n // ========== MES 工具管理-工具类型(1-040-400-000) ==========\r\n ErrorCode TM_TOOL_TYPE_NOT_EXISTS = new ErrorCode(1_040_400_000, \"工具类型不存在\");\r\n ErrorCode TM_TOOL_TYPE_CODE_DUPLICATE = new ErrorCode(1_040_400_001, \"工具类型编码已存在\");\r\n ErrorCode TM_TOOL_TYPE_NAME_DUPLICATE = new ErrorCode(1_040_400_002, \"工具类型名称已存在\");\r\n ErrorCode TM_TOOL_TYPE_HAS_TOOL = new ErrorCode(1_040_400_003, \"该工具类型下存在工具,无法删除\");\r\n ErrorCode TM_TOOL_TYPE_HAS_WORKSTATION_TOOL = new ErrorCode(1_040_400_004, \"该工具类型已被工作站工装资源引用,无法删除\");\r\n\r\n // ========== MES 工具管理-工具台账(1-040-401-000) ==========\r\n ErrorCode TM_TOOL_NOT_EXISTS = new ErrorCode(1_040_401_000, \"工具不存在\");\r\n ErrorCode TM_TOOL_CODE_DUPLICATE = new ErrorCode(1_040_401_001, \"工具编码已存在\");\r\n ErrorCode TM_TOOL_HAS_BATCH = new ErrorCode(1_040_401_002, \"该工具已被批次引用,无法删除\");\r\n\r\n // ========== MES 生产管理-工序(1-040-500-000) ==========\r\n ErrorCode PRO_PROCESS_NOT_EXISTS = new ErrorCode(1_040_500_000, \"工序不存在\");\r\n ErrorCode PRO_PROCESS_CODE_EXISTS = new ErrorCode(1_040_500_001, \"工序编码已存在\");\r\n ErrorCode PRO_PROCESS_NAME_EXISTS = new ErrorCode(1_040_500_002, \"工序名称已存在\");\r\n ErrorCode PRO_PROCESS_USED_BY_ROUTE = new ErrorCode(1_040_500_003, \"工序已被工艺路线引用,无法删除\");\r\n ErrorCode PRO_PROCESS_IS_DISABLE = new ErrorCode(1_040_500_004, \"工序已禁用\");\r\n // ========== MES 生产管理-工序内容(1-040-500-100) ==========\r\n ErrorCode PRO_PROCESS_CONTENT_NOT_EXISTS = new ErrorCode(1_040_500_100, \"工序内容不存在\");\r\n\r\n // ========== MES 生产管理-工艺路线(1-040-501-000) ==========\r\n ErrorCode PRO_ROUTE_NOT_EXISTS = new ErrorCode(1_040_501_000, \"工艺路线不存在\");\r\n ErrorCode PRO_ROUTE_CODE_DUPLICATE = new ErrorCode(1_040_501_001, \"工艺路线编码已存在\");\r\n ErrorCode PRO_ROUTE_ENABLE_NO_PROCESS = new ErrorCode(1_040_501_002, \"请先添加组成工序\");\r\n ErrorCode PRO_ROUTE_ENABLE_NO_KEY_PROCESS = new ErrorCode(1_040_501_003, \"工艺路线必须要有关键工序\");\r\n ErrorCode PRO_ROUTE_ENABLE_PRODUCT_NO_BOM = new ErrorCode(1_040_501_004, \"产品 {} 未配置工序的 BOM 消耗\");\r\n ErrorCode PRO_ROUTE_IS_ENABLE = new ErrorCode(1_040_501_005, \"工艺路线已启用,不允许操作\");\r\n // ========== MES 生产管理-工艺路线工序(1-040-501-100) ==========\r\n ErrorCode PRO_ROUTE_PROCESS_NOT_EXISTS = new ErrorCode(1_040_501_100, \"工艺路线工序不存在\");\r\n ErrorCode PRO_ROUTE_PROCESS_SORT_DUPLICATE = new ErrorCode(1_040_501_101, \"序号已存在\");\r\n ErrorCode PRO_ROUTE_PROCESS_DUPLICATE = new ErrorCode(1_040_501_102, \"不能重复添加工序\");\r\n ErrorCode PRO_ROUTE_PROCESS_KEY_DUPLICATE = new ErrorCode(1_040_501_103, \"当前工艺路线已经指定过关键工序\");\r\n // ========== MES 生产管理-工艺路线产品(1-040-501-200) ==========\r\n ErrorCode PRO_ROUTE_PRODUCT_NOT_EXISTS = new ErrorCode(1_040_501_200, \"工艺路线产品不存在\");\r\n ErrorCode PRO_ROUTE_PRODUCT_ITEM_DUPLICATE = new ErrorCode(1_040_501_201, \"此产品已配置了工艺路线\");\r\n // ========== MES 生产管理-工艺路线产品BOM(1-040-501-300) ==========\r\n ErrorCode PRO_ROUTE_PRODUCT_BOM_NOT_EXISTS = new ErrorCode(1_040_501_300, \"工艺路线产品 BOM 不存在\");\r\n ErrorCode PRO_ROUTE_PRODUCT_BOM_DUPLICATE = new ErrorCode(1_040_501_301, \"当前 BOM 物料在此工序已经配置过\");\r\n\r\n // ========== MES 生产管理-生产工单(1-040-502-000) ==========\r\n ErrorCode PRO_WORK_ORDER_NOT_EXISTS = new ErrorCode(1_040_502_000, \"生产工单不存在\");\r\n ErrorCode PRO_WORK_ORDER_CODE_DUPLICATE = new ErrorCode(1_040_502_001, \"生产工单编码已存在\");\r\n ErrorCode PRO_WORK_ORDER_NOT_PREPARE = new ErrorCode(1_040_502_002, \"只有草稿状态的工单才能执行此操作\");\r\n ErrorCode PRO_WORK_ORDER_NOT_CONFIRMED = new ErrorCode(1_040_502_003, \"只有已确认状态的工单才能执行此操作\");\r\n ErrorCode PRO_WORK_ORDER_HAS_CHILDREN = new ErrorCode(1_040_502_004, \"存在子工单,无法删除\");\r\n ErrorCode PRO_WORK_ORDER_PRODUCT_MISMATCH = new ErrorCode(1_040_502_005, \"当前产品物料与生产工单产品不一致\");\r\n ErrorCode PRO_WORK_ORDER_SCHEDULE_QUANTITY_EXCEED = new ErrorCode(1_040_502_006, \"排产数量超限:工单{}(计划{},已排产{},本次排产{})\");\r\n ErrorCode PRO_WORK_ORDER_BOM_NOT_EXISTS = new ErrorCode(1_040_502_100, \"生产工单BOM不存在\");\r\n\r\n // ========== MES 生产管理-生产工单工序(1-040-502-300) ==========\r\n ErrorCode PRO_WORK_ORDER_PROCESS_NOT_EXISTS = new ErrorCode(1_040_502_300, \"生产工单工序不存在\");\r\n ErrorCode PRO_WORK_ORDER_PROCESS_SORT_DUPLICATE = new ErrorCode(1_040_502_301, \"序号已存在\");\r\n ErrorCode PRO_WORK_ORDER_PROCESS_DUPLICATE = new ErrorCode(1_040_502_302, \"不能重复添加工序\");\r\n ErrorCode PRO_WORK_ORDER_PROCESS_KEY_DUPLICATE = new ErrorCode(1_040_502_303, \"当前工单已经指定过关键工序\");\r\n\r\n // ========== MES 生产管理-生产工单参数记录(1-040-502-200) ==========\r\n ErrorCode PRO_WORK_ORDER_PARAM_RECORD_NOT_EXISTS = new ErrorCode(1_040_502_200, \"工单参数记录不存在\");\r\n ErrorCode PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NO_DETAIL = new ErrorCode(1_040_502_201, \"参数模板没有明细,无法创建记录\");\r\n ErrorCode PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE = new ErrorCode(1_040_502_202, \"参数明细不属于所选模板\");\r\n ErrorCode PRO_WORK_ORDER_PARAM_RECORD_REQUIRED_PARAM_MISSING = new ErrorCode(1_040_502_203, \"必填参数【{}】未填写\");\r\n ErrorCode PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NOT_CHANGE = new ErrorCode(1_040_502_204, \"不允许更换参数模板,请删除后重新创建\");\r\n\r\n // ========== MES 生产管理-生产任务(1-040-503-000) ==========\r\n ErrorCode PRO_TASK_NOT_EXISTS = new ErrorCode(1_040_503_000, \"生产任务不存在\");\r\n ErrorCode PRO_TASK_SCHEDULE_INVALID = new ErrorCode(1_040_503_020, \"排产校验未通过:{}\");\r\n ErrorCode PRO_TASK_SCHEDULE_PREVIEW_CHANGED = new ErrorCode(1_040_503_021, \"排产数据已变化或预览已过期,请重新生成预览后确认\");\r\n ErrorCode PRO_TASK_ALREADY_FINISHED = new ErrorCode(1_040_503_001, \"生产任务已完成或已取消,不能继续操作\");\r\n ErrorCode PRO_TASK_WORK_ORDER_MISMATCH = new ErrorCode(1_040_503_002, \"生产任务不属于当前生产工单\");\r\n ErrorCode PRO_TASK_WORKSTATION_MISMATCH = new ErrorCode(1_040_503_003, \"生产任务不属于当前工作站\");\r\n ErrorCode PRO_TASK_ROUTE_PROCESS_MISMATCH = new ErrorCode(1_040_503_004, \"生产任务与当前工艺路线或工序不一致\");\r\n ErrorCode PRO_TASK_ITEM_MISMATCH = new ErrorCode(1_040_503_005, \"检验物料与生产任务物料不一致\");\r\n ErrorCode PRO_TASK_HAS_FEEDBACK = new ErrorCode(1_040_503_006, \"该任务下存在报工记录,无法删除(避免报工追溯断链)\");\r\n ErrorCode PRO_WORKSTATION_PROCESS_MISMATCH = new ErrorCode(1_040_503_009, \"工作站所属工序与当前工序不一致\"); // 修正编号冲突\r\n ErrorCode PRO_TASK_CANNOT_PAUSE = new ErrorCode(1_040_503_007, \"只有【生产中】或【部分完成】的任务可以停工\");\r\n ErrorCode PRO_TASK_NOT_PAUSED = new ErrorCode(1_040_503_008, \"任务不处于【已停工】状态,无法复工\");\r\n // ========== MES 生产管理-生产任务投料(1-040-503-100) ==========\r\n ErrorCode PRO_TASK_ISSUE_NOT_EXISTS = new ErrorCode(1_040_503_100, \"生产任务投料记录不存在\");\r\n\r\n // ========== MES 生产管理-安灯呼叫配置(1-040-504-000) ==========\r\n ErrorCode PRO_ANDON_CONFIG_NOT_EXISTS = new ErrorCode(1_040_504_000, \"安灯呼叫配置不存在\");\r\n\r\n // ========== MES 生产管理-安灯呼叫记录(1-040-505-000) ==========\r\n ErrorCode PRO_ANDON_RECORD_NOT_EXISTS = new ErrorCode(1_040_505_000, \"安灯呼叫记录不存在\");\r\n ErrorCode PRO_ANDON_RECORD_ALREADY_HANDLED = new ErrorCode(1_040_505_001, \"安灯记录已处置,不允许重复处置\");\r\n ErrorCode PRO_ANDON_RECORD_HANDLE_TIME_REQUIRED = new ErrorCode(1_040_505_002, \"标记已处置时,处置时间不能为空\");\r\n ErrorCode PRO_ANDON_RECORD_HANDLER_USER_REQUIRED = new ErrorCode(1_040_505_003, \"标记已处置时,处置人不能为空\");\r\n\r\n // ========== MES 生产管理-生产报工(1-040-506-000) ==========\r\n ErrorCode PRO_FEEDBACK_NOT_EXISTS = new ErrorCode(1_040_506_000, \"生产报工不存在\");\r\n ErrorCode PRO_FEEDBACK_NOT_PREPARE = new ErrorCode(1_040_506_001, \"只能修改或删除草稿状态的报工单\");\r\n ErrorCode PRO_FEEDBACK_NOT_APPROVING = new ErrorCode(1_040_506_002, \"只有审批中状态的报工单才能执行此操作\");\r\n ErrorCode PRO_FEEDBACK_NOT_UNCHECK = new ErrorCode(1_040_506_003, \"只有待检验状态的报工单才能完成检验\");\r\n ErrorCode PRO_FEEDBACK_QUANTITY_EXCEED = new ErrorCode(1_040_506_004, \"报工数量不能超过排产数量\");\r\n ErrorCode PRO_FEEDBACK_STATUS_ERROR = new ErrorCode(1_040_506_005, \"报工单状态不正确,无法执行此操作\");\r\n ErrorCode PRO_FEEDBACK_WORK_ORDER_NOT_CONFIRMED = new ErrorCode(1_040_506_006, \"关联的工单未确认,无法创建报工\");\r\n ErrorCode PRO_FEEDBACK_QUALIFIED_UNQUALIFIED_MISMATCH = new ErrorCode(1_040_506_007, \"合格品数量与不良品数量之和必须等于报工数量\");\r\n ErrorCode PRO_FEEDBACK_ROUTE_PROCESS_INVALID = new ErrorCode(1_040_506_008, \"未找到对应的工艺工序配置,请检查工艺路线与工序\");\r\n ErrorCode PRO_FEEDBACK_TASK_OR_ORDER_FINISHED = new ErrorCode(1_040_506_009, \"当前生产任务或工单已完成,不能继续报工\");\r\n ErrorCode PRO_FEEDBACK_QUANTITY_MUST_POSITIVE = new ErrorCode(1_040_506_010, \"报工数量必须大于 0\");\r\n ErrorCode PRO_FEEDBACK_QUALIFIED_UNQUALIFIED_REQUIRED = new ErrorCode(1_040_506_011, \"请输入合格品和不良品数量,且合计须大于 0\");\r\n ErrorCode PRO_FEEDBACK_UNCHECK_QUANTITY_EXISTS = new ErrorCode(1_040_506_012, \"当前报工单未完成检验(待检数量:{}),无法执行报工\");\r\n ErrorCode PRO_FEEDBACK_BACKFLUSH_BOM_REQUIRED = new ErrorCode(1_040_506_013, \"当前工序为倒冲工序,但未配置BOM消耗,无法报工\");\r\n ErrorCode PRO_FEEDBACK_CANNOT_CREATE_WHEN_PAUSED = new ErrorCode(1_040_506_014, \"生产任务处于停工状态,无法报工\");\r\n ErrorCode PRO_FEEDBACK_PENDING_PRODUCE_UNREPAIRABLE = new ErrorCode(1_040_506_015,\r\n \"报工对应的产出入库单已存在处理结果,无法自动补生成待检行,请运行质检报工数据修复脚本核对\");\r\n ErrorCode PRO_FEEDBACK_PREV_PROCESS_NOT_FINISHED = new ErrorCode(1_040_506_016,\r\n \"上一道工序「{}」尚未报工完成(剩余 {}),请先完成上一道工序的报工\");\r\n\r\n // ========== MES 生产管理-生产流转卡(1-040-507-000) ==========\r\n ErrorCode PRO_CARD_NOT_EXISTS = new ErrorCode(1_040_507_000, \"生产流转卡不存在\");\r\n ErrorCode PRO_CARD_CODE_DUPLICATE = new ErrorCode(1_040_507_001, \"流转卡编码已存在\");\r\n ErrorCode PRO_CARD_STATUS_ERROR = new ErrorCode(1_040_507_002, \"流转卡状态不正确\");\r\n ErrorCode PRO_CARD_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_507_003, \"已完成或已取消的流转卡不允许取消\");\r\n ErrorCode PRO_CARD_NOT_PREPARE = new ErrorCode(1_040_507_004, \"流转卡不是草稿状态,不允许修改或删除\");\r\n // ========== MES 生产管理-流转卡工序(1-040-507-100) ==========\r\n ErrorCode PRO_CARD_PROCESS_NOT_EXISTS = new ErrorCode(1_040_507_100, \"流转卡工序记录不存在\");\r\n\r\n // ========== MES 生产管理-工作记录(1-040-508-000) ==========\r\n ErrorCode WORK_RECORD_NOT_CLOCK_IN = new ErrorCode(1_040_508_001, \"当前用户未上工,无法下工\");\r\n ErrorCode WORK_RECORD_ALREADY_CLOCK_IN = new ErrorCode(1_040_508_002, \"当前用户已上工,请先下工再操作\");\r\n\r\n // ========== MES 生产管理-生产主计划 MPS(1-040-509-000) ==========\r\n ErrorCode PRO_MPS_NOT_EXISTS = new ErrorCode(1_040_509_000, \"MPS 不存在\");\r\n ErrorCode PRO_MPS_NOT_DRAFT = new ErrorCode(1_040_509_001, \"只有草稿状态的 MPS 才能执行此操作\");\r\n ErrorCode PRO_MPS_NOT_ISSUED = new ErrorCode(1_040_509_002, \"只有已下发状态的 MPS 才能执行此操作\");\r\n ErrorCode PRO_MPS_ALREADY_ISSUED = new ErrorCode(1_040_509_003, \"MPS 已下发,无法修改\");\r\n ErrorCode PRO_MPS_MERGE_AT_LEAST_TWO = new ErrorCode(1_040_509_004, \"合并下发至少需要选择两条 MPS\");\r\n ErrorCode PRO_MPS_MERGE_PRODUCT_MISMATCH = new ErrorCode(1_040_509_005, \"合并下发的 MPS 必须是相同产品\");\r\n ErrorCode PRO_MPS_CODE_DUPLICATE = new ErrorCode(1_040_509_006, \"MPS 编码已存在\");\r\n ErrorCode PRO_MPS_HAS_WORK_ORDER = new ErrorCode(1_040_509_007, \"MPS 已关联生产工单,无法删除\");\r\n ErrorCode PRO_MPS_MES_PRODUCT_NOT_EXISTS = new ErrorCode(1_040_509_008, \"MES 产品不存在,无法创建 MPS,产品:{}\");\r\n ErrorCode PRO_MPS_WORK_ORDER_HAS_FEEDBACK = new ErrorCode(1_040_509_009, \"该计划关联的生产订单已有报工记录,无法取消!\");\r\n\r\n // ========== MES 质量管理-质检方案(1-040-600-000) ==========\r\n ErrorCode QC_TEMPLATE_NOT_EXISTS = new ErrorCode(1_040_600_000, \"质检方案不存在\");\r\n ErrorCode QC_TEMPLATE_CODE_DUPLICATE = new ErrorCode(1_040_600_001, \"质检方案编号已存在\");\r\n // ========== MES 质量管理-质检方案检测指标项(1-040-600-100) ==========\r\n ErrorCode QC_TEMPLATE_INDICATOR_NOT_EXISTS = new ErrorCode(1_040_600_100, \"质检方案检测指标项不存在\");\r\n // ========== MES 质量管理-质检方案产品关联(1-040-600-200) ==========\r\n ErrorCode QC_TEMPLATE_ITEM_NOT_EXISTS = new ErrorCode(1_040_600_200, \"质检方案产品关联不存在\");\r\n ErrorCode QC_TEMPLATE_ITEM_DUPLICATE = new ErrorCode(1_040_600_201, \"该产品已关联此质检方案\");\r\n\r\n // ========== MES 质量管理-质检指标(1-040-601-000) ==========\r\n ErrorCode QC_INDICATOR_NOT_EXISTS = new ErrorCode(1_040_601_000, \"质检指标不存在\");\r\n ErrorCode QC_INDICATOR_CODE_DUPLICATE = new ErrorCode(1_040_601_001, \"质检指标编码已存在\");\r\n ErrorCode QC_INDICATOR_NAME_DUPLICATE = new ErrorCode(1_040_601_002, \"质检指标名称已存在\");\r\n ErrorCode QC_INDICATOR_RESULT_SPECIFICATION_REQUIRED = new ErrorCode(1_040_601_003, \"结果值属性不能为空\");\r\n ErrorCode QC_INDICATOR_PARENT_NOT_EXISTS = new ErrorCode(1_040_601_004, \"父指标不存在\");\r\n ErrorCode QC_INDICATOR_PARENT_NOT_GROUP = new ErrorCode(1_040_601_005, \"父指标不是分组项\");\r\n ErrorCode QC_INDICATOR_PARENT_SELF = new ErrorCode(1_040_601_006, \"父指标不能是自己\");\r\n ErrorCode QC_INDICATOR_GROUP_CANNOT_NEST = new ErrorCode(1_040_601_007, \"分组项不能挂在其它指标下\");\r\n ErrorCode QC_INDICATOR_HAS_CHILDREN = new ErrorCode(1_040_601_008, \"该指标下已有子项\");\r\n ErrorCode QC_INDICATOR_RESULT_TYPE_REQUIRED = new ErrorCode(1_040_601_009, \"录入项的结果值类型不能为空\");\r\n\r\n // ========== MES 质量管理-缺陷类型(1-040-602-000) ==========\r\n ErrorCode QC_DEFECT_NOT_EXISTS = new ErrorCode(1_040_602_000, \"缺陷类型不存在\");\r\n ErrorCode QC_DEFECT_CODE_DUPLICATE = new ErrorCode(1_040_602_001, \"缺陷类型编码已存在\");\r\n ErrorCode QC_DEFECT_NAME_DUPLICATE = new ErrorCode(1_040_602_002, \"缺陷类型名称已存在\");\r\n\r\n // ========== MES 质量管理-来料检验 IQC(1-040-603-000) ==========\r\n ErrorCode QC_IQC_NOT_EXISTS = new ErrorCode(1_040_603_000, \"来料检验单不存在\");\r\n ErrorCode QC_IQC_CODE_DUPLICATE = new ErrorCode(1_040_603_001, \"来料检验单编号已存在\");\r\n ErrorCode QC_IQC_NOT_PREPARE = new ErrorCode(1_040_603_002, \"只有草稿状态的检验单才可操作\");\r\n ErrorCode QC_IQC_QUANTITY_MISMATCH = new ErrorCode(1_040_603_004, \"合格品与不合格品数量之和须等于检测数量\");\r\n ErrorCode QC_NO_TEMPLATE = new ErrorCode(1_040_603_005, \"当前产品未配置检测模板\");\r\n ErrorCode QC_NO_TEMPLATE_FOR_ITEM = new ErrorCode(1_040_603_008, \"物料【{}】未配置 IQC 检测模板,请先在质量管理中配置\");\r\n ErrorCode QC_IQC_SOURCE_DOC_PARAMS_MISSING = new ErrorCode(1_040_603_006, \"来源单据类型非空时,来源单据 ID 和来源单据行 ID 不能为空\");\r\n ErrorCode QC_IQC_CHECK_RESULT_EMPTY = new ErrorCode(1_040_603_007, \"完成检验单前,检测结果必须填写\");\r\n // ========== MES 质量管理-来料检验行(1-040-603-100) ==========\r\n ErrorCode QC_IQC_LINE_NOT_EXISTS = new ErrorCode(1_040_603_100, \"来料检验行不存在\");\r\n\r\n // ========== MES 质量管理-过程检验 IPQC(1-040-604-000) ==========\r\n ErrorCode QC_IPQC_NOT_EXISTS = new ErrorCode(1_040_604_000, \"过程检验单不存在\");\r\n ErrorCode QC_IPQC_CODE_DUPLICATE = new ErrorCode(1_040_604_001, \"过程检验单编号已存在\");\r\n ErrorCode QC_IPQC_NOT_PREPARE = new ErrorCode(1_040_604_002, \"只有草稿状态的检验单才可操作\");\r\n ErrorCode QC_IPQC_QUANTITY_MISMATCH = new ErrorCode(1_040_604_004, \"合格品与不合格品数量之和须等于检测数量\");\r\n ErrorCode QC_IPQC_NO_TEMPLATE = new ErrorCode(1_040_604_005, \"当前产品未配置 IPQC 检测模板\");\r\n ErrorCode QC_IPQC_CHECK_RESULT_EMPTY = new ErrorCode(1_040_604_006, \"完成检验单前,检测结果必须填写\");\r\n ErrorCode QC_IPQC_SOURCE_DOC_TYPE_UNKNOWN = new ErrorCode(1_040_604_007, \"未知的 IPQC 来源单据类型\");\r\n ErrorCode QC_IPQC_SOURCE_DOC_NO_PENDING_LINE = new ErrorCode(1_040_604_008, \"来源报工单不存在待检产出行,无法创建 IPQC\");\r\n ErrorCode QC_IPQC_SOURCE_LINE_NOT_BELONG = new ErrorCode(1_040_604_009, \"来源单据行不属于该报工单\");\r\n ErrorCode QC_IPQC_SOURCE_LINE_REQUIRED = new ErrorCode(1_040_604_010, \"来源单据类型为报工时,来源产出行 ID 不能为空\");\r\n ErrorCode QC_IPQC_SOURCE_LINE_NOT_PENDING = new ErrorCode(1_040_604_011, \"来源产出行不是待检验状态\");\r\n // ========== MES 质量管理-过程检验行(1-040-604-100) ==========\r\n ErrorCode QC_IPQC_LINE_NOT_EXISTS = new ErrorCode(1_040_604_100, \"过程检验行不存在\");\r\n\r\n // ========== MES 质量管理-质检缺陷记录(通用)(1-040-605-000) ==========\r\n ErrorCode QC_DEFECT_RECORD_NOT_EXISTS = new ErrorCode(1_040_605_000, \"缺陷记录不存在\");\r\n ErrorCode QC_DEFECT_RECORD_LEVEL_UNKNOWN = new ErrorCode(1_040_605_001, \"未知的缺陷等级\");\r\n ErrorCode QC_DEFECT_RECORD_QC_TYPE_UNSUPPORTED = new ErrorCode(1_040_605_002, \"不支持的检验类型\");\r\n\r\n // ========== MES 质量管理-检验结果(1-040-606-000) ==========\r\n ErrorCode QC_RESULT_NOT_EXISTS = new ErrorCode(1_040_606_000, \"检验结果不存在\");\r\n ErrorCode QC_RESULT_VALUE_FORMAT_INVALID = new ErrorCode(1_040_606_001, \"检测值格式不正确:{}\");\r\n ErrorCode QC_FINISH_INDICATOR_RESULT_REQUIRED = new ErrorCode(1_040_606_002, \"完成检验单前,至少需要录入一条检测结果\");\r\n\r\n // ========== MES 质量管理-出货检验(1-040-607-000) ==========\r\n ErrorCode QC_OQC_NOT_EXISTS = new ErrorCode(1_040_607_000, \"出货检验单不存在\");\r\n ErrorCode QC_OQC_CODE_DUPLICATE = new ErrorCode(1_040_607_001, \"出货检验单编号已存在\");\r\n ErrorCode QC_OQC_NOT_PREPARE = new ErrorCode(1_040_607_002, \"只有草稿状态的检验单才可操作\");\r\n ErrorCode QC_OQC_QUANTITY_MISMATCH = new ErrorCode(1_040_607_004, \"合格品与不合格品数量之和须等于检测数量\");\r\n ErrorCode QC_OQC_NO_TEMPLATE = new ErrorCode(1_040_607_005, \"当前产品未配置 OQC 检测模板\");\r\n ErrorCode QC_OQC_CHECK_RESULT_EMPTY = new ErrorCode(1_040_607_006, \"完成检验单前,检测结果必须填写\");\r\n ErrorCode QC_OQC_SOURCE_DOC_TYPE_UNKNOWN = new ErrorCode(1_040_607_007, \"未知的 OQC 来源单据类型\");\r\n\r\n // ========== MES 质量管理-出货检验行(1-040-607-100) ==========\r\n ErrorCode QC_OQC_LINE_NOT_EXISTS = new ErrorCode(1_040_607_100, \"出货检验行不存在\");\r\n\r\n // ========== MES 质量管理-退货检验 RQC(1-040-608-000) ==========\r\n ErrorCode QC_RQC_NOT_EXISTS = new ErrorCode(1_040_608_000, \"退货检验单不存在\");\r\n ErrorCode QC_RQC_CODE_DUPLICATE = new ErrorCode(1_040_608_001, \"退货检验单编号已存在\");\r\n ErrorCode QC_RQC_NOT_PREPARE = new ErrorCode(1_040_608_002, \"只有草稿状态的检验单才可操作\");\r\n ErrorCode QC_RQC_QUANTITY_MISMATCH = new ErrorCode(1_040_608_004, \"合格品与不合格品数量之和须等于检测数量\");\r\n ErrorCode QC_RQC_NO_TEMPLATE = new ErrorCode(1_040_608_005, \"当前产品未配置 RQC 检测模板\");\r\n ErrorCode QC_RQC_CHECK_RESULT_EMPTY = new ErrorCode(1_040_608_006, \"完成检验单前,检测结果必须填写\");\r\n // ========== MES 质量管理-退货检验行(1-040-608-100) ==========\r\n ErrorCode QC_RQC_LINE_NOT_EXISTS = new ErrorCode(1_040_608_100, \"退货检验行不存在\");\r\n\r\n // ========== MES 质量管理-不合格品处理 NCR(1-040-609-000) ==========\r\n ErrorCode QC_NCR_NOT_EXISTS = new ErrorCode(1_040_609_000, \"不合格品处理单不存在\");\r\n ErrorCode QC_NCR_CODE_DUPLICATE = new ErrorCode(1_040_609_001, \"不合格品处理单编号已存在\");\r\n ErrorCode QC_NCR_NOT_PENDING_REVIEW = new ErrorCode(1_040_609_002, \"只有待评审状态的不合格品处理单才可操作\");\r\n ErrorCode QC_NCR_NOT_REVIEWED = new ErrorCode(1_040_609_003, \"只有已评审状态的不合格品处理单才可执行处置\");\r\n ErrorCode QC_NCR_NOT_DISPOSED = new ErrorCode(1_040_609_004, \"只有已处置状态的不合格品处理单才可关闭\");\r\n\r\n // ========== MES 仓库管理-仓库(1-040-700-000) ==========\r\n ErrorCode WM_WAREHOUSE_NOT_EXISTS = new ErrorCode(1_040_700_000, \"仓库不存在\");\r\n ErrorCode WM_WAREHOUSE_CODE_DUPLICATE = new ErrorCode(1_040_700_001, \"仓库编码已存在\");\r\n ErrorCode WM_WAREHOUSE_NAME_DUPLICATE = new ErrorCode(1_040_700_002, \"仓库名称已存在\");\r\n ErrorCode WM_WAREHOUSE_HAS_LOCATION = new ErrorCode(1_040_700_003, \"仓库下存在库区,无法删除\");\r\n ErrorCode WM_WAREHOUSE_HAS_WORKSTATION = new ErrorCode(1_040_700_004, \"仓库已被工作站引用,无法删除\");\r\n ErrorCode WM_WAREHOUSE_HAS_MATERIAL_STOCK = new ErrorCode(1_040_700_005, \"仓库下有库存记录,无法删除\");\r\n ErrorCode WM_WAREHOUSE_IS_VIRTUAL = new ErrorCode(1_040_700_006, \"虚拟仓库不允许操作\");\r\n\r\n // ========== MES 仓库管理-库区(1-040-701-000) ==========\r\n ErrorCode WM_WAREHOUSE_LOCATION_NOT_EXISTS = new ErrorCode(1_040_701_000, \"库区不存在\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_CODE_DUPLICATE = new ErrorCode(1_040_701_001, \"同一仓库下库区编码已存在\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_NAME_DUPLICATE = new ErrorCode(1_040_701_002, \"同一仓库下库区名称已存在\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_HAS_AREA = new ErrorCode(1_040_701_003, \"库区下存在库位,无法删除\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_HAS_WORKSTATION = new ErrorCode(1_040_701_004, \"库区已被工作站引用,无法删除\");\r\n ErrorCode WM_WAREHOUSE_REQUIRED = new ErrorCode(1_040_701_005, \"选择库区时,仓库不能为空\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_RELATION_INVALID = new ErrorCode(1_040_701_006, \"库区不属于所选仓库\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_HAS_MATERIAL_STOCK = new ErrorCode(1_040_701_007, \"库区下有库存记录,无法删除\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_IS_VIRTUAL = new ErrorCode(1_040_701_008, \"虚拟库区不允许操作\");\r\n\r\n // ========== MES 仓库管理-库位(1-040-702-000) ==========\r\n ErrorCode WM_WAREHOUSE_AREA_NOT_EXISTS = new ErrorCode(1_040_702_000, \"库位不存在\");\r\n ErrorCode WM_WAREHOUSE_AREA_CODE_DUPLICATE = new ErrorCode(1_040_702_001, \"同一库区下库位编码已存在\");\r\n ErrorCode WM_WAREHOUSE_AREA_NAME_DUPLICATE = new ErrorCode(1_040_702_002, \"同一库区下库位名称已存在\");\r\n ErrorCode WM_WAREHOUSE_AREA_HAS_WORKSTATION = new ErrorCode(1_040_702_003, \"库位已被工作站引用,无法删除\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_REQUIRED = new ErrorCode(1_040_702_004, \"选择库位时,库区不能为空\");\r\n ErrorCode WM_WAREHOUSE_AREA_RELATION_INVALID = new ErrorCode(1_040_702_005, \"库位不属于所选库区\");\r\n ErrorCode WM_WAREHOUSE_AREA_HAS_MATERIAL_STOCK = new ErrorCode(1_040_702_006, \"库位下有库存记录,无法删除\");\r\n ErrorCode WM_WAREHOUSE_AREA_WAREHOUSE_MISMATCH = new ErrorCode(1_040_702_007, \"库位不属于所选仓库\");\r\n ErrorCode WM_WAREHOUSE_AREA_IS_VIRTUAL = new ErrorCode(1_040_702_008, \"虚拟库位不允许操作\");\r\n\r\n // ========== MES 仓库管理-库存(1-040-703-000) ==========\r\n ErrorCode WM_MATERIAL_STOCK_NOT_EXISTS = new ErrorCode(1_040_703_000, \"库存记录不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_INSUFFICIENT = new ErrorCode(1_040_703_001, \"库存数量不足\");\r\n ErrorCode WM_TRANSACTION_TYPE_NOT_EXISTS = new ErrorCode(1_040_703_002, \"库存事务类型不存在\");\r\n ErrorCode WM_TRANSACTION_WAREHOUSE_FROZEN = new ErrorCode(1_040_703_003, \"仓库({})已被冻结\");\r\n ErrorCode WM_TRANSACTION_LOCATION_FROZEN = new ErrorCode(1_040_703_004, \"库区({})已被冻结\");\r\n ErrorCode WM_TRANSACTION_AREA_FROZEN = new ErrorCode(1_040_703_005, \"库位({})已被冻结\");\r\n ErrorCode WM_TRANSACTION_STOCK_FROZEN = new ErrorCode(1_040_703_006, \"存放于({}/{}/{})下的物料已被冻结\");\r\n ErrorCode WM_TRANSACTION_BATCH_REQUIRED = new ErrorCode(1_040_703_007, \"当前物料启用了批次管理,批次号不能为空\");\r\n ErrorCode WM_MATERIAL_STOCK_AREA_ITEM_MIXING_NOT_ALLOWED = new ErrorCode(1_040_703_008, \"库位({})不允许物料混放,请选择其他库位\");\r\n ErrorCode WM_MATERIAL_STOCK_AREA_BATCH_MIXING_NOT_ALLOWED = new ErrorCode(1_040_703_009, \"库位({})不允许批次混放,请选择其他库位\");\r\n ErrorCode WM_TRANSACTION_RELATED_NOT_EXISTS = new ErrorCode(1_040_703_010, \"关联的库存事务不存在\");\r\n ErrorCode WM_TRANSACTION_LIST_EMPTY = new ErrorCode(1_040_703_011, \"库存事务列表不能为空\");\r\n ErrorCode WM_TRANSACTION_BATCH_NOT_EXISTS = new ErrorCode(1_040_703_012, \"批次记录不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_REQUIRED = new ErrorCode(1_040_703_013, \"库存记录不能为空\");\r\n ErrorCode WM_MATERIAL_STOCK_SELECTION_MISMATCH = new ErrorCode(1_040_703_014, \"所选库存记录与单据信息不一致,请核对后重新操作\");\r\n ErrorCode WM_MATERIAL_STOCK_QUANTITY_INVALID = new ErrorCode(1_040_703_015, \"调整数量不能为空或零\");\r\n ErrorCode WM_MATERIAL_STOCK_FROZEN = new ErrorCode(1_040_703_016, \"库存记录已冻结,无法移库\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_703_017, \"导入的库存数据不能为空\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_FIELD_REQUIRED = new ErrorCode(1_040_703_018, \"{}不能为空\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_ITEM_NOT_EXISTS = new ErrorCode(1_040_703_019, \"物料编码({})不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_WAREHOUSE_NOT_EXISTS = new ErrorCode(1_040_703_020, \"仓库({})不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_LOCATION_NOT_EXISTS = new ErrorCode(1_040_703_021, \"库区({})不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_AREA_NOT_EXISTS = new ErrorCode(1_040_703_022, \"库位({})不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_BATCH_NOT_EXISTS = new ErrorCode(1_040_703_023, \"批次({})不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_VENDOR_NOT_EXISTS = new ErrorCode(1_040_703_024, \"供应商({})不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_QUANTITY_INVALID = new ErrorCode(1_040_703_025, \"在库数量({})无效\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_EXISTS = new ErrorCode(1_040_703_026, \"库存记录已存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_OPERATION_INVALID = new ErrorCode(1_040_703_027, \"操作类型({})不支持\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_STOCK_NOT_EXISTS = new ErrorCode(1_040_703_028, \"库存记录不存在,无法执行该操作\");\r\n\r\n // ========== MES 仓库管理-到货通知单(1-040-704-000) ==========\r\n ErrorCode WM_ARRIVAL_NOTICE_NOT_EXISTS = new ErrorCode(1_040_704_000, \"到货通知单不存在\");\r\n ErrorCode WM_ARRIVAL_NOTICE_CODE_DUPLICATE = new ErrorCode(1_040_704_001, \"到货通知单编码已存在\");\r\n ErrorCode WM_ARRIVAL_NOTICE_STATUS_NOT_PREPARE = new ErrorCode(1_040_704_002, \"只有草稿状态才允许此操作\");\r\n ErrorCode WM_ARRIVAL_NOTICE_STATUS_NOT_PENDING_QC = new ErrorCode(1_040_704_003, \"只有待质检状态才允许审批\");\r\n ErrorCode WM_ARRIVAL_NOTICE_STATUS_NOT_PENDING_RECEIPT = new ErrorCode(1_040_704_004, \"只有待入库状态才允许完成\");\r\n ErrorCode WM_ARRIVAL_NOTICE_IQC_PENDING = new ErrorCode(1_040_704_005, \"存在待检验行,无法审批通过\");\r\n ErrorCode WM_ARRIVAL_NOTICE_NO_LINE = new ErrorCode(1_040_704_006, \"至少需要一条行项目\");\r\n ErrorCode WM_ARRIVAL_NOTICE_VENDOR_MISMATCH = new ErrorCode(1_040_704_007, \"到货通知单的供应商与当前单据不一致\");\r\n ErrorCode WM_ARRIVAL_NOTICE_ALREADY_EXISTS = new ErrorCode(1_040_704_008, \"该采购订单已生成到货通知单,不能重复生成\");\r\n ErrorCode WM_ARRIVAL_NOTICE_LINE_NOT_EXISTS = new ErrorCode(1_040_704_100, \"到货通知单行不存在\");\r\n ErrorCode WM_ARRIVAL_NOTICE_LINE_NOT_MATCH = new ErrorCode(1_040_704_101, \"到货通知单行不属于指定的到货通知单\");\r\n\r\n // ========== MES 仓库管理-采购入库单(1-040-705-000) ==========\r\n ErrorCode WM_ITEM_RECEIPT_NOT_EXISTS = new ErrorCode(1_040_705_000, \"采购入库单不存在\");\r\n ErrorCode WM_ITEM_RECEIPT_CODE_DUPLICATE = new ErrorCode(1_040_705_001, \"采购入库单编码已存在\");\r\n ErrorCode WM_ITEM_RECEIPT_STATUS_NOT_PREPARE = new ErrorCode(1_040_705_002, \"只有草稿或待上架状态才允许此操作\");\r\n ErrorCode WM_ITEM_RECEIPT_NO_LINE = new ErrorCode(1_040_705_003, \"至少需要一条行项目\");\r\n ErrorCode WM_ITEM_RECEIPT_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_705_004, \"明细上架总数与行入库数量不匹配\");\r\n ErrorCode WM_ITEM_RECEIPT_STATUS_ERROR = new ErrorCode(1_040_705_005, \"入库单状态不正确\");\r\n ErrorCode WM_ITEM_RECEIPT_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_705_006, \"已完成或已取消的入库单不允许取消\");\r\n ErrorCode WM_ITEM_RECEIPT_ALREADY_EXISTS = new ErrorCode(1_040_705_007, \"该到货通知单已生成入库单,不能重复生成\");\r\n ErrorCode WM_PURCHASE_ORDER_NOT_EXISTS = new ErrorCode(1_040_705_008, \"采购订单不存在\");\r\n ErrorCode WM_PURCHASE_ORDER_NO_ITEM = new ErrorCode(1_040_705_008, \"采购订单无明细数据\");\r\n ErrorCode WM_ITEM_RECEIPT_LINE_NOT_EXISTS = new ErrorCode(1_040_705_100, \"采购入库单行不存在\");\r\n ErrorCode WM_ITEM_RECEIPT_LINE_ARRIVAL_NOTICE_LINE_REQUIRED = new ErrorCode(1_040_705_101,\r\n \"入库单关联了到货通知单,必须选择到货通知单行\");\r\n ErrorCode WM_ITEM_RECEIPT_LINE_ARRIVAL_NOTICE_LINE_NOT_ALLOWED = new ErrorCode(1_040_705_102,\r\n \"入库单未关联到货通知单,不能选择到货通知单行\");\r\n ErrorCode WM_ITEM_RECEIPT_DETAIL_NOT_EXISTS = new ErrorCode(1_040_705_200, \"采购入库明细不存在\");\r\n ErrorCode WM_ITEM_RECEIPT_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_705_202, \"上架明细总数量不能超过行入库数量\");\r\n ErrorCode WM_ITEM_RECEIPT_BATCH_REQUIRED = new ErrorCode(1_040_705_203, \"物料【{}-{}】已开启批次管理,上架明细的批次号不能为空\");\r\n\r\n // ========== MES 仓库管理-领料申请单(1-040-706-000) ==========\r\n ErrorCode WM_MATERIAL_REQUEST_NOT_EXISTS = new ErrorCode(1_040_706_000, \"领料申请单不存在\");\r\n ErrorCode WM_MATERIAL_REQUEST_STATUS_INVALID = new ErrorCode(1_040_706_001, \"领料申请单状态不正确,无法执行该操作\");\r\n ErrorCode WM_MATERIAL_REQUEST_LINE_NOT_EXISTS = new ErrorCode(1_040_706_100, \"领料申请单行不存在\");\r\n\r\n // ========== MES 仓库管理-外协发料单(1-040-707-000) ==========\r\n ErrorCode WM_OUTSOURCE_ISSUE_NOT_EXISTS = new ErrorCode(1_040_707_000, \"外协发料单不存在\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_CODE_DUPLICATE = new ErrorCode(1_040_707_001, \"外协发料单编码已存在\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_STATUS_NOT_PREPARE = new ErrorCode(1_040_707_002, \"只有草稿状态才允许此操作\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_NO_LINE = new ErrorCode(1_040_707_003, \"至少需要一条发料行\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_QUANTITY_MISMATCH = new ErrorCode(1_040_707_004, \"发料单行数量与明细数量不一致\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_STATUS_NOT_APPROVING = new ErrorCode(1_040_707_005, \"只有待拣货状态才允许此操作\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_STATUS_NOT_APPROVED = new ErrorCode(1_040_707_006, \"只有待执行出库状态才允许此操作\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_707_007, \"已完成或已取消的发料单不允许取消\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_707_100, \"外协发料单行不存在\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_LINE_ITEM_NOT_IN_BOM = new ErrorCode(1_040_707_101, \"发料单行对应的物料不在当前工单的 BOM 列表中\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_707_200, \"外协发料单明细不存在\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_707_201, \"拣货明细不属于指定的外协发料单\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_707_202, \"拣货明细的物料与外协发料单行的物料不一致\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_WORK_ORDER_TYPE_INVALID = new ErrorCode(1_040_707_008, \"工单类型不是外协(代工)类型\");\r\n\r\n // ========== MES 仓库管理-生产领料出库单(1-040-708-000) ==========\r\n ErrorCode WM_PRODUCT_ISSUE_NOT_EXISTS = new ErrorCode(1_040_708_000, \"生产领料出库单不存在\");\r\n ErrorCode WM_PRODUCT_ISSUE_STATUS_INVALID = new ErrorCode(1_040_708_001, \"生产领料出库单状态不正确,无法执行该操作\");\r\n ErrorCode WM_PRODUCT_ISSUE_NO_LINE = new ErrorCode(1_040_708_002, \"生产领料出库单至少需要一条行数据\");\r\n ErrorCode WM_PRODUCT_ISSUE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_708_003, \"领料出库单行数量与明细数量不一致\");\r\n ErrorCode WM_PRODUCT_ISSUE_WORKORDER_NOT_EXISTS = new ErrorCode(1_040_708_004, \"生产工单不存在\");\r\n ErrorCode WM_PRODUCT_ISSUE_WORKSTATION_NOT_EXISTS = new ErrorCode(1_040_708_005, \"工作站不存在\");\r\n ErrorCode WM_PRODUCT_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_708_006, \"生产领料出库单已完成或已取消,无法取消\");\r\n ErrorCode WM_PRODUCT_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_708_100, \"生产领料出库单行不存在\");\r\n ErrorCode WM_PRODUCT_ISSUE_LINE_ITEM_NOT_IN_BOM = new ErrorCode(1_040_708_101, \"当前物料不在生产工单的 BOM 物料清单中\");\r\n ErrorCode WM_PRODUCT_ISSUE_CODE_DUPLICATE = new ErrorCode(1_040_708_102, \"领料出库单编码已存在\");\r\n ErrorCode WM_PRODUCT_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_708_200, \"生产领料出库单明细不存在\");\r\n ErrorCode WM_PRODUCT_ISSUE_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_708_201, \"拣货明细的物料与领料单行的物料不一致\");\r\n ErrorCode WM_PRODUCT_ISSUE_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_708_202, \"拣货明细不属于指定的领料出库单\");\r\n ErrorCode WM_PRODUCT_ISSUE_NO_DETAIL = new ErrorCode(1_040_708_203, \"领料出库单没有拣货明细,无法执行领出\");\r\n ErrorCode WM_PRODUCT_ISSUE_TASK_NOT_EXISTS = new ErrorCode(1_040_708_204, \"生产任务不存在\");\r\n\r\n // ========== MES 仓库管理-生产入库单(1-040-709-000) ==========\r\n ErrorCode WM_PRODUCT_PRODUCE_NOT_EXISTS = new ErrorCode(1_040_709_000, \"生产入库单不存在\");\r\n ErrorCode WM_PRODUCT_PRODUCE_STATUS_INVALID = new ErrorCode(1_040_709_001, \"生产入库单状态不正确,无法执行该操作\");\r\n ErrorCode WM_PRODUCT_PRODUCE_NO_LINE = new ErrorCode(1_040_709_002, \"生产入库单至少需要一条行数据\");\r\n ErrorCode WM_PRODUCT_PRODUCE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_709_003, \"生产入库单行数量与明细数量不一致\");\r\n ErrorCode WM_PRODUCT_PRODUCE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_709_004, \"生产入库单已完成或已取消,无法取消\");\r\n ErrorCode WM_PRODUCT_PRODUCE_LINE_NOT_EXISTS = new ErrorCode(1_040_709_100, \"生产入库单行不存在\");\r\n ErrorCode WM_PRODUCT_PRODUCE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_709_200, \"生产入库单明细不存在\");\r\n\r\n // ========== MES 仓库管理-转移调拨(1-040-710-000) ==========\r\n ErrorCode WM_TRANSFER_NOT_EXISTS = new ErrorCode(1_040_710_000, \"转移单不存在\");\r\n ErrorCode WM_TRANSFER_NOT_EDITABLE = new ErrorCode(1_040_710_001, \"当前转移单状态不允许编辑\");\r\n ErrorCode WM_TRANSFER_CODE_DUPLICATE = new ErrorCode(1_040_710_002, \"转移单编号已存在\");\r\n ErrorCode WM_TRANSFER_NOT_DRAFT = new ErrorCode(1_040_710_003, \"只有草稿状态的转移单才可操作\");\r\n ErrorCode WM_TRANSFER_NOT_CONFIRMED = new ErrorCode(1_040_710_004, \"只有待确认状态的转移单才可执行确认\");\r\n ErrorCode WM_TRANSFER_NOT_APPROVING = new ErrorCode(1_040_710_005, \"只有待上架状态的转移单才可执行上架\");\r\n ErrorCode WM_TRANSFER_NOT_APPROVED = new ErrorCode(1_040_710_006, \"只有待执行状态的转移单才可完成\");\r\n ErrorCode WM_TRANSFER_ALREADY_FINISHED = new ErrorCode(1_040_710_007, \"转移单已完成或已取消,无法继续操作\");\r\n ErrorCode WM_TRANSFER_NO_LINE = new ErrorCode(1_040_710_008, \"转移单至少需要一条行数据\");\r\n ErrorCode WM_TRANSFER_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_710_009, \"转移单行数量与明细数量不一致\");\r\n ErrorCode WM_TRANSFER_LINE_NOT_EXISTS = new ErrorCode(1_040_710_100, \"转移单行不存在\");\r\n ErrorCode WM_TRANSFER_LINE_QUANTITY_EXCEED_STOCK = new ErrorCode(1_040_710_101, \"转移数量不能超过库存数量\");\r\n ErrorCode WM_TRANSFER_DETAIL_NOT_EXISTS = new ErrorCode(1_040_710_200, \"调拨明细不存在\");\r\n ErrorCode WM_TRANSFER_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_710_201, \"调拨明细总数量不能超过调拨单行数量\");\r\n ErrorCode WM_TRANSFER_DETAIL_MIXED_GOODS = new ErrorCode(1_040_710_202, \"同一目标仓位下已存在其他物料的明细,不允许混货\");\r\n\r\n // ========== MES 仓库管理-生产退料单(1-040-711-000) ==========\r\n ErrorCode WM_RETURN_ISSUE_NOT_EXISTS = new ErrorCode(1_040_710_000, \"生产退料单不存在\");\r\n ErrorCode WM_RETURN_ISSUE_STATUS_INVALID = new ErrorCode(1_040_710_001, \"生产退料单状态不正确,无法执行该操作\");\r\n ErrorCode WM_RETURN_ISSUE_NOT_PREPARE = new ErrorCode(1_040_710_002, \"只有草稿状态的退料单才可操作\");\r\n ErrorCode WM_RETURN_ISSUE_NOT_CONFIRMED = new ErrorCode(1_040_710_003, \"只有待检验状态的退料单才可提交\");\r\n ErrorCode WM_RETURN_ISSUE_NOT_APPROVING = new ErrorCode(1_040_710_004, \"只有待上架状态的退料单才可入库上架\");\r\n ErrorCode WM_RETURN_ISSUE_NOT_APPROVED = new ErrorCode(1_040_710_005, \"只有待执行退料状态的退料单才可完成\");\r\n ErrorCode WM_RETURN_ISSUE_NO_LINE = new ErrorCode(1_040_710_006, \"生产退料单至少需要一条行数据\");\r\n ErrorCode WM_RETURN_ISSUE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_710_007, \"退料单行数量与明细数量不一致\");\r\n ErrorCode WM_RETURN_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_710_008, \"生产退料单已完成或已取消,无法取消\");\r\n ErrorCode WM_RETURN_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_710_100, \"生产退料单行不存在\");\r\n ErrorCode WM_RETURN_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_710_200, \"生产退料单明细不存在\");\r\n ErrorCode WM_RETURN_ISSUE_DETAIL_QUANTITY_INVALID = new ErrorCode(1_040_710_201, \"退料明细数量必须大于0\");\r\n ErrorCode WM_RETURN_ISSUE_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_710_202, \"退料明细总数量不能超过退料单行数量\");\r\n ErrorCode WM_RETURN_ISSUE_CODE_DUPLICATE = new ErrorCode(1_040_710_203, \"退料单编码已存在\");\r\n ErrorCode WM_RETURN_ISSUE_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_710_204, \"退料明细不属于指定的退料单\");\r\n ErrorCode WM_RETURN_ISSUE_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_710_205, \"退料明细的物料与退料单行的物料不一致\");\r\n\r\n // ========== MES 仓库管理-供应商退货单(1-040-711-000) ==========\r\n ErrorCode WM_RETURN_VENDOR_NOT_EXISTS = new ErrorCode(1_040_711_000, \"供应商退货单不存在\");\r\n ErrorCode WM_RETURN_VENDOR_STATUS_INVALID = new ErrorCode(1_040_711_001, \"供应商退货单状态不正确,无法执行该操作\");\r\n ErrorCode WM_RETURN_VENDOR_NO_LINE = new ErrorCode(1_040_711_002, \"供应商退货单至少需要一条行数据\");\r\n ErrorCode WM_RETURN_VENDOR_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_711_003, \"供应商退货单行数量与明细数量不一致\");\r\n ErrorCode WM_RETURN_VENDOR_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_711_004, \"供应商退货单已完成或已取消,无法取消\");\r\n ErrorCode WM_RETURN_VENDOR_CODE_DUPLICATE = new ErrorCode(1_040_711_005, \"供应商退货单编号已存在\");\r\n ErrorCode WM_RETURN_VENDOR_NO_DETAIL = new ErrorCode(1_040_711_006, \"供应商退货单没有拣货明细,无法执行退货\");\r\n ErrorCode WM_RETURN_VENDOR_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_711_007, \"拣货明细的物料与退货单行的物料不一致\");\r\n ErrorCode WM_RETURN_VENDOR_LINE_NOT_EXISTS = new ErrorCode(1_040_711_100, \"供应商退货单行不存在\");\r\n ErrorCode WM_RETURN_VENDOR_DETAIL_NOT_EXISTS = new ErrorCode(1_040_711_200, \"供应商退货单明细不存在\");\r\n ErrorCode WM_RETURN_VENDOR_DETAIL_QUANTITY_INVALID = new ErrorCode(1_040_711_201, \"退货明细数量必须大于 0\");\r\n ErrorCode WM_RETURN_VENDOR_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_711_202, \"拣货明细不属于指定的供应商退货单\");\r\n ErrorCode WM_RETURN_VENDOR_PURCHASE_ORDER_REQUIRED = new ErrorCode(1_040_711_008, \"请先选择采购订单\");\r\n ErrorCode WM_RETURN_VENDOR_PURCHASE_ORDER_NO_ITEM = new ErrorCode(1_040_711_009, \"采购订单无明细数据,无法带入物料\");\r\n ErrorCode WM_RETURN_VENDOR_ITEM_NOT_IN_PURCHASE_ORDER = new ErrorCode(1_040_711_010, \"退货物料不在所关联采购订单内,无法添加\");\r\n\r\n // ========== MES 仓库管理-产品收货单(1-040-712-000) ==========\r\n ErrorCode WM_PRODUCT_RECPT_NOT_EXISTS = new ErrorCode(1_040_712_000, \"产品收货单不存在\");\r\n ErrorCode WM_PRODUCT_RECPT_CODE_DUPLICATE = new ErrorCode(1_040_712_001, \"产品收货单编码已存在\");\r\n ErrorCode WM_PRODUCT_RECPT_STATUS_NOT_PREPARE = new ErrorCode(1_040_712_002, \"只有草稿或待上架状态才允许此操作\");\r\n ErrorCode WM_PRODUCT_RECPT_NO_LINE = new ErrorCode(1_040_712_003, \"至少需要一条行项目\");\r\n ErrorCode WM_PRODUCT_RECPT_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_712_004, \"明细上架总数与行收货数量不匹配\");\r\n ErrorCode WM_PRODUCT_RECPT_STATUS_ERROR = new ErrorCode(1_040_712_005, \"收货单状态不正确\");\r\n ErrorCode WM_PRODUCT_RECPT_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_712_006, \"已完成或已取消的收货单不允许取消\");\r\n ErrorCode WM_PRODUCT_RECPT_NO_DETAIL = new ErrorCode(1_040_712_007, \"收货单没有上架明细,无法执行入库\");\r\n ErrorCode WM_PRODUCT_RECPT_LINE_NOT_EXISTS = new ErrorCode(1_040_712_100, \"产品收货单行不存在\");\r\n ErrorCode WM_PRODUCT_RECPT_DETAIL_NOT_EXISTS = new ErrorCode(1_040_712_200, \"产品收货明细不存在\");\r\n\r\n // ========== MES 仓库管理-外协入库单(1-040-713-000) ==========\r\n ErrorCode WM_OUTSOURCE_RECEIPT_NOT_EXISTS = new ErrorCode(1_040_713_000, \"外协入库单不存在\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_CODE_DUPLICATE = new ErrorCode(1_040_713_001, \"外协入库单编码已存在\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_STATUS_NOT_PREPARE = new ErrorCode(1_040_713_002, \"只有草稿状态才允许此操作\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_NO_LINE = new ErrorCode(1_040_713_003, \"至少需要一条行项目\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_713_004, \"明细上架总数与行入库数量不匹配\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_STATUS_ERROR = new ErrorCode(1_040_713_005, \"入库单状态不正确\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_713_006, \"已完成或已取消的入库单不允许取消\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_LINE_NOT_EXISTS = new ErrorCode(1_040_713_100, \"外协入库单行不存在\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_DETAIL_NOT_EXISTS = new ErrorCode(1_040_713_200, \"外协入库明细不存在\");\r\n\r\n // ========== MES 仓库管理-销售退货单(1-040-713-000) ==========\r\n ErrorCode WM_RETURN_SALES_NOT_EXISTS = new ErrorCode(1_040_713_000, \"销售退货单不存在\");\r\n ErrorCode WM_RETURN_SALES_CODE_DUPLICATE = new ErrorCode(1_040_713_001, \"销售退货单编码已存在\");\r\n ErrorCode WM_RETURN_SALES_STATUS_NOT_PREPARE = new ErrorCode(1_040_713_002, \"只有草稿状态才允许此操作\");\r\n ErrorCode WM_RETURN_SALES_STATUS_NOT_APPROVING = new ErrorCode(1_040_713_003, \"只有待执行状态才允许执行退货\");\r\n ErrorCode WM_RETURN_SALES_STATUS_NOT_APPROVED = new ErrorCode(1_040_713_004, \"只有待上架状态才允许执行上架\");\r\n ErrorCode WM_RETURN_SALES_NO_LINE = new ErrorCode(1_040_713_005, \"销售退货单至少需要一条行数据\");\r\n ErrorCode WM_RETURN_SALES_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_713_006, \"销售退货单行数量与明细数量不一致\");\r\n ErrorCode WM_RETURN_SALES_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_713_007, \"销售退货单已完成或已取消,无法取消\");\r\n ErrorCode WM_RETURN_SALES_LINE_NOT_EXISTS = new ErrorCode(1_040_713_100, \"销售退货单行不存在\");\r\n ErrorCode WM_RETURN_SALES_DETAIL_NOT_EXISTS = new ErrorCode(1_040_713_200, \"销售退货单明细不存在\");\r\n ErrorCode WM_RETURN_SALES_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_713_201, \"上架明细总数量不能超过退货行数量\");\r\n\r\n // ========== MES 仓库管理-盘点方案/任务/结果(1-040-714-100) ==========\r\n ErrorCode WM_STOCK_TAKING_PLAN_NOT_EXISTS = new ErrorCode(1_040_714_100, \"盘点方案不存在\");\r\n ErrorCode WM_STOCK_TAKING_PLAN_CODE_DUPLICATE = new ErrorCode(1_040_714_101, \"盘点方案编码已存在\");\r\n ErrorCode WM_STOCK_TAKING_PLAN_NOT_DISABLED = new ErrorCode(1_040_714_102, \"只有禁用状态的盘点方案才允许修改、删除或维护参数\");\r\n ErrorCode WM_STOCK_TAKING_PLAN_NOT_ENABLED = new ErrorCode(1_040_714_103, \"只有启用状态的盘点方案才允许生成任务\");\r\n ErrorCode WM_STOCK_TAKING_PLAN_PARAM_NOT_EXISTS = new ErrorCode(1_040_714_104, \"盘点方案参数不存在\");\r\n ErrorCode WM_STOCK_TAKING_PLAN_PARAM_EMPTY = new ErrorCode(1_040_714_105, \"盘点方案参数不能为空,请先配置盘点参数\");\r\n ErrorCode WM_STOCK_TAKING_PLAN_DYNAMIC_TIME_INVALID = new ErrorCode(1_040_714_106, \"动态盘点方案必须设置开始时间和结束时间,且结束时间必须晚于开始时间\");\r\n ErrorCode WM_STOCK_TAKING_TASK_NOT_EXISTS = new ErrorCode(1_040_714_110, \"盘点任务不存在\");\r\n ErrorCode WM_STOCK_TAKING_TASK_CODE_DUPLICATE = new ErrorCode(1_040_714_111, \"盘点任务编码已存在\");\r\n ErrorCode WM_STOCK_TAKING_TASK_NOT_PREPARE = new ErrorCode(1_040_714_112, \"只有草稿状态的盘点任务才允许此操作\");\r\n ErrorCode WM_STOCK_TAKING_TASK_NOT_APPROVING = new ErrorCode(1_040_714_113, \"只有盘点中状态的任务才允许此操作\");\r\n ErrorCode WM_STOCK_TAKING_TASK_CANNOT_CANCEL = new ErrorCode(1_040_714_114, \"已完成或已取消的盘点任务不允许取消\");\r\n ErrorCode WM_STOCK_TAKING_TASK_NO_STOCK = new ErrorCode(1_040_714_115, \"未找到符合条件的库存数据\");\r\n ErrorCode WM_STOCK_TAKING_TASK_NO_LINE = new ErrorCode(1_040_714_116, \"盘点任务至少需要一条任务行\");\r\n ErrorCode WM_STOCK_TAKING_TASK_LINE_NOT_EXISTS = new ErrorCode(1_040_714_117, \"盘点任务行不存在\");\r\n ErrorCode WM_STOCK_TAKING_TASK_DYNAMIC_TIME_REQUIRED = new ErrorCode(1_040_714_118, \"动态盘点必须选择开始时间和结束时间\");\r\n ErrorCode WM_STOCK_TAKING_TASK_RESULT_NOT_EXISTS = new ErrorCode(1_040_714_119, \"盘点结果不存在\");\r\n ErrorCode WM_STOCK_TAKING_TASK_LINE_ALREADY_TAKEN = new ErrorCode(1_040_714_120, \"该盘点清单行已有盘点记录,不能重复盘点\");\r\n ErrorCode WM_STOCK_TAKING_TASK_NOT_FINISHED = new ErrorCode(1_040_714_121, \"只有已完成状态的盘点任务才能处理差异\");\r\n\r\n // ========== MES 仓库管理-销售出库单(1-040-714-000) ==========\r\n ErrorCode WM_PRODUCT_SALES_NOT_EXISTS = new ErrorCode(1_040_714_000, \"销售出库单不存在\");\r\n ErrorCode WM_PRODUCT_SALES_CODE_DUPLICATE = new ErrorCode(1_040_714_001, \"销售出库单号已存在\");\r\n ErrorCode WM_PRODUCT_SALES_NOT_PREPARE = new ErrorCode(1_040_714_002, \"只有草稿状态才可操作\");\r\n ErrorCode WM_PRODUCT_SALES_LINES_EMPTY = new ErrorCode(1_040_714_003, \"销售出库单行不能为空\");\r\n ErrorCode WM_PRODUCT_SALES_CANNOT_SUBMIT = new ErrorCode(1_040_714_004, \"当前状态不允许提交\");\r\n ErrorCode WM_PRODUCT_SALES_CANNOT_PICK = new ErrorCode(1_040_714_005, \"当前状态不允许拣货\");\r\n ErrorCode WM_PRODUCT_SALES_CANNOT_SHIPPING = new ErrorCode(1_040_714_006, \"当前状态不允许填写运单\");\r\n ErrorCode WM_PRODUCT_SALES_CANNOT_FINISH = new ErrorCode(1_040_714_007, \"当前状态不允许执行出库\");\r\n ErrorCode WM_PRODUCT_SALES_CANNOT_CANCEL = new ErrorCode(1_040_714_008, \"当前状态不允许取消\");\r\n ErrorCode WM_PRODUCT_SALES_CANNOT_CONFIRM = new ErrorCode(1_040_714_009, \"当前状态不允许确认检验通过\");\r\n ErrorCode WM_PRODUCT_SALES_ALREADY_EXISTS = new ErrorCode(1_040_714_010, \"该发货通知单已生成销售出库单,不能重复生成\");\r\n ErrorCode WM_PRODUCT_SALES_DETAILS_EMPTY = new ErrorCode(1_040_714_020, \"拣货明细不能为空\");\r\n ErrorCode WM_PRODUCT_SALES_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_714_011, \"拣货数量与出库数量不匹配\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_NOT_EXISTS = new ErrorCode(1_040_714_011, \"销售出库单行不存在\");\r\n ErrorCode WM_PRODUCT_SALES_DETAIL_NOT_EXISTS = new ErrorCode(1_040_714_012, \"销售出库明细不存在\");\r\n ErrorCode WM_PRODUCT_SALES_STOCK_INSUFFICIENT = new ErrorCode(1_040_714_013, \"库存不足,无法拣货\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_QUANTITY_INVALID = new ErrorCode(1_040_714_014, \"出库数量必须大于 0\");\r\n ErrorCode WM_PRODUCT_SALES_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_714_015, \"拣货明细不属于指定的销售出库单\");\r\n ErrorCode WM_PRODUCT_SALES_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_714_016, \"拣货明细的物料与销售出库单行的物料不一致\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_SALES_NOTICE_LINE_REQUIRED = new ErrorCode(1_040_714_017,\r\n \"出库单关联了发货通知单,必须选择发货通知单行\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_SALES_NOTICE_LINE_NOT_ALLOWED = new ErrorCode(1_040_714_018,\r\n \"出库单未关联发货通知单,不能选择发货通知单行\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_NOTICE_LINE_ITEM_MISMATCH = new ErrorCode(1_040_714_030,\r\n \"出库行物料与发货通知单行物料不一致\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_NOTICE_LINE_QUANTITY_MISMATCH = new ErrorCode(1_040_714_031,\r\n \"出库行数量与发货通知单行数量不一致\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_NOTICE_LINE_BATCH_MISMATCH = new ErrorCode(1_040_714_032,\r\n \"出库行批次号与发货通知单行批次号不一致\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_NOTICE_LINE_OQC_MISMATCH = new ErrorCode(1_040_714_033,\r\n \"出库行 OQC 检验标识与发货通知单行不一致\");\r\n\r\n // ========== MES 仓库管理-杂项出库单(1-040-715-000) ==========\r\n ErrorCode WM_MISC_ISSUE_NOT_EXISTS = new ErrorCode(1_040_715_000, \"杂项出库单不存在\");\r\n ErrorCode WM_MISC_ISSUE_CODE_DUPLICATE = new ErrorCode(1_040_715_001, \"杂项出库单编码已存在\");\r\n ErrorCode WM_MISC_ISSUE_STATUS_INVALID = new ErrorCode(1_040_715_002, \"杂项出库单状态不正确,无法执行该操作\");\r\n ErrorCode WM_MISC_ISSUE_NO_LINE = new ErrorCode(1_040_715_003, \"杂项出库单至少需要一条行数据\");\r\n ErrorCode WM_MISC_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_715_004, \"杂项出库单已完成或已取消,无法取消\");\r\n ErrorCode WM_MISC_ISSUE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_715_005, \"杂项出库单行数量与明细数量不一致\");\r\n ErrorCode WM_MISC_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_715_100, \"杂项出库单行不存在\");\r\n ErrorCode WM_MISC_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_715_200, \"杂项出库单明细不存在\");\r\n\r\n // ========== MES 仓库管理-杂项入库单(1-040-716-000) ==========\r\n ErrorCode WM_MISC_RECEIPT_NOT_EXISTS = new ErrorCode(1_040_716_000, \"杂项入库单不存在\");\r\n ErrorCode WM_MISC_RECEIPT_CODE_DUPLICATE = new ErrorCode(1_040_716_001, \"杂项入库单编码已存在\");\r\n ErrorCode WM_MISC_RECEIPT_STATUS_NOT_PREPARE = new ErrorCode(1_040_716_002, \"只有草稿状态才允许此操作\");\r\n ErrorCode WM_MISC_RECEIPT_STATUS_NOT_APPROVED = new ErrorCode(1_040_716_003, \"只有已审批状态才允许执行入库\");\r\n ErrorCode WM_MISC_RECEIPT_NO_LINE = new ErrorCode(1_040_716_004, \"至少需要一条行项目\");\r\n ErrorCode WM_MISC_RECEIPT_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_716_005, \"已完成或已取消的入库单不允许取消\");\r\n ErrorCode WM_MISC_RECEIPT_LINE_NOT_EXISTS = new ErrorCode(1_040_716_100, \"杂项入库单行不存在\");\r\n ErrorCode WM_MISC_RECEIPT_WAREHOUSE_REQUIRED = new ErrorCode(1_040_716_101, \"仓库不能为空\");\r\n ErrorCode WM_MISC_RECEIPT_QUANTITY_INVALID = new ErrorCode(1_040_716_102, \"入库数量必须大于 0\");\r\n ErrorCode WM_MISC_RECEIPT_DETAIL_NOT_EXISTS = new ErrorCode(1_040_716_200, \"杂项入库单明细不存在\");\r\n\r\n // ========== MES 仓库管理-发货通知单(1-040-720-000) ==========\r\n ErrorCode WM_SALES_NOTICE_NOT_EXISTS = new ErrorCode(1_040_720_000, \"发货通知单不存在\");\r\n ErrorCode WM_SALES_NOTICE_CODE_DUPLICATE = new ErrorCode(1_040_720_001, \"通知单编号重复\");\r\n ErrorCode WM_SALES_NOTICE_STATUS_NOT_ALLOW_DELETE = new ErrorCode(1_040_720_002, \"单据状态不允许删除\");\r\n ErrorCode WM_SALES_NOTICE_STATUS_NOT_ALLOW_UPDATE = new ErrorCode(1_040_720_003, \"单据状态不允许修改\");\r\n ErrorCode WM_SALES_NOTICE_STATUS_NOT_APPROVED = new ErrorCode(1_040_720_004, \"发货通知单不是待出库状态\");\r\n ErrorCode WM_SALES_NOTICE_CLIENT_MISMATCH = new ErrorCode(1_040_720_005, \"发货通知单的客户与当前单据不一致\");\r\n ErrorCode WM_SALES_NOTICE_LINE_NOT_EXISTS = new ErrorCode(1_040_720_010, \"发货通知单行不存在\");\r\n ErrorCode WM_SALES_NOTICE_LINE_EMPTY = new ErrorCode(1_040_720_011, \"发货通知单行为空,不能提交\");\r\n ErrorCode WM_SALES_NOTICE_LINE_NOT_MATCH = new ErrorCode(1_040_720_012, \"发货通知单行不属于指定的发货通知单\");\r\n ErrorCode WM_SALES_NOTICE_SALE_ORDER_NOT_EXISTS = new ErrorCode(1_040_720_013, \"销售订单不存在\");\r\n ErrorCode WM_SALES_NOTICE_SALE_ORDER_ITEM_EMPTY = new ErrorCode(1_040_720_014, \"销售订单明细为空\");\r\n ErrorCode WM_SALES_NOTICE_ALREADY_EXISTS = new ErrorCode(1_040_720_015, \"该销售订单已生成发货通知单,不能重复生成\");\r\n\r\n // ========== MES 仓库管理-条码配置(1-040-730-000) ==========\r\n ErrorCode WM_BARCODE_CONFIG_NOT_EXISTS = new ErrorCode(1_040_730_000, \"条码配置不存在\");\r\n ErrorCode WM_BARCODE_CONFIG_BIZ_TYPE_DUPLICATE = new ErrorCode(1_040_730_001, \"该业务类型的条码配置已存在\");\r\n ErrorCode WM_BARCODE_CONFIG_HAS_BARCODE = new ErrorCode(1_040_730_002, \"该条码配置已被条码记录关联,无法删除\");\r\n\r\n // ========== MES 仓库管理-条码清单(1-040-731-000) ==========\r\n ErrorCode WM_BARCODE_NOT_EXISTS = new ErrorCode(1_040_731_000, \"条码不存在\");\r\n ErrorCode WM_BARCODE_ALREADY_EXISTS = new ErrorCode(1_040_731_001, \"该业务对象的条码已存在\");\r\n ErrorCode WM_BARCODE_CONTENT_DUPLICATE = new ErrorCode(1_040_731_002, \"条码内容已存在\");\r\n ErrorCode BARCODE_BIZ_TYPE_NOT_EXISTS = new ErrorCode(1_040_731_003, \"业务类型不能为空\");\r\n ErrorCode BARCODE_BIZ_CODE_NOT_EXISTS = new ErrorCode(1_040_731_004, \"业务编码不能为空\");\r\n ErrorCode BARCODE_CONFIG_NOT_EXISTS = new ErrorCode(1_040_731_005, \"条码配置不存在\");\r\n\r\n // ========== MES 仓库管理-装箱单(1-040-740-000) ==========\r\n ErrorCode WM_PACKAGE_NOT_EXISTS = new ErrorCode(1_040_740_000, \"装箱单不存在\");\r\n ErrorCode WM_PACKAGE_CODE_DUPLICATE = new ErrorCode(1_040_740_001, \"装箱单编码已存在\");\r\n ErrorCode WM_PACKAGE_STATUS_NOT_PREPARE = new ErrorCode(1_040_740_002, \"只有草稿状态才允许此操作\");\r\n ErrorCode WM_PACKAGE_PARENT_NOT_EXISTS = new ErrorCode(1_040_740_003, \"父箱不存在\");\r\n ErrorCode WM_PACKAGE_PARENT_SELF = new ErrorCode(1_040_740_004, \"不能选择自己作为父箱\");\r\n ErrorCode WM_PACKAGE_CHILD_HAS_PARENT = new ErrorCode(1_040_740_005, \"该装箱单已有父箱,不能重复添加\");\r\n ErrorCode WM_PACKAGE_PARENT_IS_CHILD = new ErrorCode(1_040_740_006, \"不能选择子箱的后代作为父箱,会形成环路\");\r\n ErrorCode WM_PACKAGE_CHILD_NOT_FINISHED = new ErrorCode(1_040_740_007, \"子箱必须是已完成状态才能添加\");\r\n ErrorCode WM_PACKAGE_HAS_CHILDREN = new ErrorCode(1_040_740_008, \"存在子箱,不允许删除\");\r\n ErrorCode WM_PACKAGE_LINE_NOT_EXISTS = new ErrorCode(1_040_740_100, \"装箱明细不存在\");\r\n\r\n // ========== MES 产品设计-设计项目(1-040-800-000) ==========\r\n ErrorCode PD_PROJECT_NOT_EXISTS = new ErrorCode(1_040_800_000, \"设计项目不存在\");\r\n ErrorCode PD_PROJECT_NOT_INITIATE = new ErrorCode(1_040_800_001, \"设计项目不是待发布状态,不允许修改或删除\");\r\n ErrorCode PD_PROJECT_CODE_DUPLICATE = new ErrorCode(1_040_800_002, \"设计项目任务编码已存在\");\r\n ErrorCode PD_PROJECT_NOT_INITIATE_FOR_PUBLISH = new ErrorCode(1_040_800_003, \"只有待发布状态的设计项目才能发布\");\r\n ErrorCode PD_PROJECT_NOT_PUBLISH_FOR_UPLOAD = new ErrorCode(1_040_800_004, \"只有待上传状态的设计项目才能上传资料\");\r\n ErrorCode PD_PROJECT_NOT_UPLOAD_FOR_AUDIT = new ErrorCode(1_040_800_005, \"只有待审核状态的设计项目才能审核\");\r\n ErrorCode PD_PROJECT_NOT_AUDIT_FOR_ARCHIVE = new ErrorCode(1_040_800_006, \"只有待归档状态的设计项目才能归档\");\r\n ErrorCode PD_PROJECT_AUDIT_NOT_FINISHED = new ErrorCode(1_040_800_007, \"该项目下存在未审核的资料,请先完成所有资料审核\");\r\n ErrorCode PD_PROJECT_NOT_UPLOAD_FOR_APPROVAL = new ErrorCode(1_040_800_008, \"只有待审核状态的设计项目才能提交审批\");\r\n ErrorCode PD_PROJECT_NOT_APPROVING = new ErrorCode(1_040_800_009, \"设计项目不处于审批中状态\");\r\n ErrorCode PD_PROJECT_BPM_CATEGORY_NOT_EXISTS = new ErrorCode(1_040_800_010, \"设计项目审批分类不存在,请先配置 BPM 审批流程\");\r\n\r\n // ========== MES 产品设计-资料子表(1-040-801-000) ==========\r\n ErrorCode PD_DOCUMENT_NOT_EXISTS = new ErrorCode(1_040_801_000, \"设计资料不存在\");\r\n\r\n // ========== MES 产品设计-资料审核(1-040-802-000) ==========\r\n ErrorCode PD_DOCUMENT_AUDIT_NOT_EXISTS = new ErrorCode(1_040_802_000, \"资料审核记录不存在\");\r\n\r\n // ========== MES 产品设计-归档台账(1-040-803-000) ==========\r\n ErrorCode PD_ARCHIVE_NOT_EXISTS = new ErrorCode(1_040_803_000, \"归档台账不存在\");\r\n ErrorCode PD_ARCHIVE_CODE_DUPLICATE = new ErrorCode(1_040_803_001, \"归档编号已存在\");\r\n\r\n // ========== MES 产品设计-工艺参数(1-040-804-000) ==========\r\n ErrorCode PD_PROCESS_PARAM_NOT_EXISTS = new ErrorCode(1_040_804_000, \"工艺参数不存在\");\r\n ErrorCode PD_PROCESS_PARAM_CODE_DUPLICATE = new ErrorCode(1_040_804_001, \"工艺参数编码已存在\");\r\n\r\n // ========== MES 产品设计-工艺参数模板(1-040-805-000) ==========\r\n ErrorCode PD_PROCESS_PARAM_TEMPLATE_NOT_EXISTS = new ErrorCode(1_040_805_000, \"工艺参数模板不存在\");\r\n ErrorCode PD_PROCESS_PARAM_TEMPLATE_CODE_DUPLICATE = new ErrorCode(1_040_805_001, \"工艺参数模板编码已存在\");\r\n\r\n // ========== MES 仓储物流-审批配置(1-040-900-000) ==========\r\n ErrorCode WMS_APPROVAL_CONFIG_NOT_EXISTS = new ErrorCode(1_040_900_000, \"仓库审批配置不存在\");\r\n ErrorCode WMS_APPROVAL_ORDER_NOT_EXISTS = new ErrorCode(1_040_900_001, \"审批单据不存在\");\r\n ErrorCode WMS_APPROVAL_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_040_900_002, \"审批流程定义不存在\");\r\n ErrorCode WMS_APPROVAL_ORDER_TYPE_NOT_SUPPORTED = new ErrorCode(1_040_900_003, \"不支持的单据类型\");\r\n ErrorCode WMS_APPROVAL_STATUS_INVALID = new ErrorCode(1_040_900_004, \"单据状态不正确,无法提交审批\");\r\n ErrorCode WMS_APPROVAL_ALREADY_SUBMITTED = new ErrorCode(1_040_900_005, \"单据已提交审批,请勿重复提交\");\r\n\r\n}\r\n", "after": "package cn.iocoder.yudao.module.mes.enums;\r\n\r\nimport cn.iocoder.yudao.framework.common.exception.ErrorCode;\r\n\r\n/**\r\n * MES 错误码枚举类\r\n *

\r\n * mes 系统,使用 1-040-000-000 段\r\n */\r\npublic interface ErrorCodeConstants {\r\n\r\n // ========== MES 基础数据-物料分类(1-040-100-000) ==========\r\n ErrorCode MD_ITEM_TYPE_NOT_EXISTS = new ErrorCode(1_040_100_000, \"物料分类不存在\");\r\n ErrorCode MD_ITEM_TYPE_EXITS_CHILDREN = new ErrorCode(1_040_100_001, \"存在子分类,无法删除\");\r\n ErrorCode MD_ITEM_TYPE_PARENT_NOT_EXITS = new ErrorCode(1_040_100_002, \"父级分类不存在\");\r\n ErrorCode MD_ITEM_TYPE_PARENT_ERROR = new ErrorCode(1_040_100_003, \"不能设置自己为父分类\");\r\n ErrorCode MD_ITEM_TYPE_NAME_DUPLICATE = new ErrorCode(1_040_100_004, \"同一父分类下已存在该名称的分类\");\r\n ErrorCode MD_ITEM_TYPE_CODE_DUPLICATE = new ErrorCode(1_040_100_005, \"同一父分类下已存在该编码的分类\");\r\n ErrorCode MD_ITEM_TYPE_PARENT_IS_CHILD = new ErrorCode(1_040_100_006, \"不能设置自己的子分类为父分类\");\r\n ErrorCode MD_ITEM_TYPE_EXITS_ITEM = new ErrorCode(1_040_100_007, \"该分类下存在物料,无法删除\");\r\n ErrorCode MD_ITEM_TYPE_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_100_008, \"导入的物料分类数据不能为空\");\r\n\r\n // ========== MES 基础数据-计量单位(1-040-101-000) ==========\r\n ErrorCode MD_UNIT_MEASURE_NOT_EXISTS = new ErrorCode(1_040_101_000, \"计量单位不存在\");\r\n ErrorCode MD_UNIT_MEASURE_CODE_DUPLICATE = new ErrorCode(1_040_101_001, \"计量单位编码已存在\");\r\n ErrorCode MD_UNIT_MEASURE_HAS_ITEM = new ErrorCode(1_040_101_002, \"该计量单位下存在物料,无法删除\");\r\n ErrorCode MD_UNIT_MEASURE_HAS_SECONDARY = new ErrorCode(1_040_101_003, \"该主单位下存在辅单位,无法删除\");\r\n ErrorCode MD_UNIT_MEASURE_HAS_TASK_ISSUE = new ErrorCode(1_040_101_004, \"该计量单位已被生产投料引用,无法删除\");\r\n ErrorCode MD_UNIT_MEASURE_HAS_QC_TEMPLATE_INDICATOR = new ErrorCode(1_040_101_005, \"该计量单位已被质检方案指标项引用,无法删除\");\r\n ErrorCode MD_UNIT_MEASURE_HAS_QC_LINE = new ErrorCode(1_040_101_006, \"该计量单位已被质检单据行引用,无法删除\");\r\n\r\n // ========== MES 基础数据-物料(1-040-102-000) ==========\r\n ErrorCode MD_ITEM_NOT_EXISTS = new ErrorCode(1_040_102_000, \"物料不存在\");\r\n ErrorCode MD_ITEM_CODE_DUPLICATE = new ErrorCode(1_040_102_001, \"物料编码已存在\");\r\n // 1_040_102_002:物料名称唯一校验已取消(允许同名不同编码,与 MDM 物料对齐),此码仅保留占位,请勿再用于校验\r\n ErrorCode MD_ITEM_NAME_DUPLICATE = new ErrorCode(1_040_102_002, \"物料名称已存在\");\r\n ErrorCode MD_ITEM_BATCH_REQUIRED = new ErrorCode(1_040_102_004, \"当前物料启用了批次管理,请选择批次\");\r\n ErrorCode MD_ITEM_IS_DISABLE = new ErrorCode(1_040_102_005, \"物料已禁用\");\r\n\r\n // ========== MES 基础数据-物料批次属性配置(1-040-102-100) ==========\r\n ErrorCode MD_ITEM_BATCH_CONFIG_NOT_EXISTS = new ErrorCode(1_040_102_100, \"物料批次属性配置不存在\");\r\n ErrorCode MD_ITEM_BATCH_CONFIG_AT_LEAST_ONE_FLAG = new ErrorCode(1_040_102_101, \"批次管理已启用,至少需要配置一个批次属性\");\r\n ErrorCode MD_ITEM_PRODUCT_BOM_REQUIRED = new ErrorCode(1_040_102_102, \"产品类物料启用前,必须配置至少一个 BOM 组成\");\r\n ErrorCode MD_ITEM_BATCH_CONFIG_AT_LEAST_ONE_APPROVE_FLAG = new ErrorCode(1_040_102_103, \"需要配置一个批次属性,请在审批意见中填写\");\r\n\r\n // ========== MES 仓库管理-批次管理(1-040-717-000) ==========\r\n ErrorCode WM_BATCH_PRODUCE_DATE_REQUIRED = new ErrorCode(1_040_717_000, \"批次配置要求生产日期不能为空\");\r\n ErrorCode WM_BATCH_RECEIPT_DATE_REQUIRED = new ErrorCode(1_040_717_001, \"批次配置要求入库日期不能为空\");\r\n ErrorCode WM_BATCH_EXPIRE_DATE_REQUIRED = new ErrorCode(1_040_717_002, \"批次配置要求有效期不能为空\");\r\n ErrorCode WM_BATCH_VENDOR_REQUIRED = new ErrorCode(1_040_717_003, \"批次配置要求供应商不能为空\");\r\n ErrorCode WM_BATCH_CLIENT_REQUIRED = new ErrorCode(1_040_717_004, \"批次配置要求客户不能为空\");\r\n ErrorCode WM_BATCH_PURCHASE_ORDER_CODE_REQUIRED = new ErrorCode(1_040_717_005, \"批次配置要求采购订单编号不能为空\");\r\n ErrorCode WM_BATCH_CUSTOMER_ORDER_CODE_REQUIRED = new ErrorCode(1_040_717_006, \"批次配置要求销售订单编号不能为空\");\r\n ErrorCode WM_BATCH_WORK_ORDER_REQUIRED = new ErrorCode(1_040_717_007, \"批次配置要求生产工单不能为空\");\r\n ErrorCode WM_BATCH_TASK_REQUIRED = new ErrorCode(1_040_717_008, \"批次配置要求生产任务不能为空\");\r\n ErrorCode WM_BATCH_WORKSTATION_REQUIRED = new ErrorCode(1_040_717_009, \"批次配置要求工作站不能为空\");\r\n ErrorCode WM_BATCH_TOOL_REQUIRED = new ErrorCode(1_040_717_010, \"批次配置要求工具不能为空\");\r\n ErrorCode WM_BATCH_MOLD_REQUIRED = new ErrorCode(1_040_717_011, \"批次配置要求模具不能为空\");\r\n ErrorCode WM_BATCH_LOT_NUMBER_REQUIRED = new ErrorCode(1_040_717_012, \"批次配置要求生产批号不能为空\");\r\n ErrorCode WM_BATCH_QUALITY_STATUS_REQUIRED = new ErrorCode(1_040_717_013, \"批次配置要求质量状态不能为空\");\r\n ErrorCode WM_BATCH_NOT_EXISTS = new ErrorCode(1_040_717_014, \"批次不存在\");\r\n ErrorCode WM_BATCH_ITEM_MISMATCH = new ErrorCode(1_040_717_015, \"批次不属于当前物料\");\r\n ErrorCode WM_BATCH_CLIENT_MISMATCH = new ErrorCode(1_040_717_016, \"批次不属于当前客户\");\r\n ErrorCode WM_BATCH_VENDOR_MISMATCH = new ErrorCode(1_040_717_017, \"批次不属于当前供应商\");\r\n\r\n // ========== MES 基础数据-客户(1-040-103-000) ==========\r\n ErrorCode MD_CLIENT_NOT_EXISTS = new ErrorCode(1_040_103_000, \"客户不存在\");\r\n ErrorCode MD_CLIENT_NAME_DUPLICATE = new ErrorCode(1_040_103_002, \"客户名称已存在\");\r\n ErrorCode MD_CLIENT_NICKNAME_DUPLICATE = new ErrorCode(1_040_103_003, \"客户简称已存在\");\r\n ErrorCode MD_CLIENT_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_103_004, \"导入客户数据不能为空\");\r\n ErrorCode MD_CLIENT_IS_DISABLE = new ErrorCode(1_040_103_005, \"客户已禁用\");\r\n\r\n // ========== MES 基础数据-供应商(1-040-104-000) ==========\r\n ErrorCode MD_VENDOR_NOT_EXISTS = new ErrorCode(1_040_104_000, \"供应商不存在\");\r\n ErrorCode MD_VENDOR_CODE_DUPLICATE = new ErrorCode(1_040_104_001, \"供应商编码已存在\");\r\n ErrorCode MD_VENDOR_NAME_DUPLICATE = new ErrorCode(1_040_104_002, \"供应商名称已存在\");\r\n ErrorCode MD_VENDOR_NICKNAME_DUPLICATE = new ErrorCode(1_040_104_003, \"供应商简称已存在\");\r\n ErrorCode MD_VENDOR_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_104_004, \"导入供应商数据不能为空\");\r\n ErrorCode MD_VENDOR_HAS_REFERENCE = new ErrorCode(1_040_104_005, \"该供应商已被其他业务引用,无法删除\");\r\n ErrorCode MD_VENDOR_IS_DISABLE = new ErrorCode(1_040_104_006, \"供应商已禁用\");\r\n\r\n // ========== MES 基础数据-车间(1-040-105-000) ==========\r\n ErrorCode MD_WORKSHOP_NOT_EXISTS = new ErrorCode(1_040_105_000, \"车间不存在\");\r\n ErrorCode MD_WORKSHOP_CODE_DUPLICATE = new ErrorCode(1_040_105_001, \"车间编码已存在\");\r\n ErrorCode MD_WORKSHOP_NAME_DUPLICATE = new ErrorCode(1_040_105_002, \"车间名称已存在\");\r\n ErrorCode MD_WORKSHOP_HAS_WORKSTATION = new ErrorCode(1_040_105_003, \"车间下存在工作站,无法删除\");\r\n\r\n // ========== MES 基础数据-工作站(1-040-106-000) ==========\r\n ErrorCode MD_WORKSTATION_NOT_EXISTS = new ErrorCode(1_040_106_000, \"工作站不存在\");\r\n ErrorCode MD_WORKSTATION_CODE_DUPLICATE = new ErrorCode(1_040_106_001, \"工作站编码已存在\");\r\n ErrorCode MD_WORKSTATION_NAME_DUPLICATE = new ErrorCode(1_040_106_002, \"工作站名称已存在\");\r\n ErrorCode MD_WORKSTATION_IS_DISABLE = new ErrorCode(1_040_106_003, \"工作站已禁用\");\r\n // ========== MES 基础数据-设备资源(1-040-106-100) ==========\r\n ErrorCode MD_WORKSTATION_MACHINE_NOT_EXISTS = new ErrorCode(1_040_106_100, \"设备资源记录不存在\");\r\n ErrorCode MD_WORKSTATION_MACHINE_EXISTS = new ErrorCode(1_040_106_101, \"该设备已分配至工作站:{}\");\r\n // ========== MES 基础数据-工装夹具资源(1-040-106-200) ==========\r\n ErrorCode MD_WORKSTATION_TOOL_NOT_EXISTS = new ErrorCode(1_040_106_200, \"工装夹具资源记录不存在\");\r\n ErrorCode MD_WORKSTATION_TOOL_TYPE_EXISTS = new ErrorCode(1_040_106_201, \"该工具类型已在此工作站中存在\");\r\n // ========== MES 基础数据-人力资源(1-040-106-300) ==========\r\n ErrorCode MD_WORKSTATION_WORKER_NOT_EXISTS = new ErrorCode(1_040_106_300, \"人力资源记录不存在\");\r\n ErrorCode MD_WORKSTATION_WORKER_POST_EXISTS = new ErrorCode(1_040_106_301, \"该岗位已在此工作站中存在\");\r\n\r\n // ========== MES 基础数据-产品BOM(1-040-107-000) ==========\r\n ErrorCode MD_PRODUCT_BOM_NOT_EXISTS = new ErrorCode(1_040_107_000, \"产品BOM不存在\");\r\n ErrorCode MD_PRODUCT_BOM_SELF_REFERENCE = new ErrorCode(1_040_107_001, \"产品不能作为自身的BOM物料\");\r\n ErrorCode MD_PRODUCT_BOM_CIRCULAR = new ErrorCode(1_040_107_002, \"BOM物料存在闭环,无法新增\");\r\n ErrorCode MD_PRODUCT_BOM_ITEM_INVALID = new ErrorCode(1_040_107_003, \"选择的 BOM 物料不属于当前产品\");\r\n\r\n // ========== MES 基础数据-产品SOP(1-040-108-000) ==========\r\n ErrorCode MD_PRODUCT_SOP_NOT_EXISTS = new ErrorCode(1_040_108_000, \"产品SOP不存在\");\r\n ErrorCode MD_PRODUCT_SOP_SORT_DUPLICATE = new ErrorCode(1_040_108_001, \"该展示序号已存在\");\r\n\r\n // ========== MES 基础数据-产品SIP(1-040-109-000) ==========\r\n ErrorCode MD_PRODUCT_SIP_NOT_EXISTS = new ErrorCode(1_040_109_000, \"产品SIP不存在\");\r\n ErrorCode MD_PRODUCT_SIP_SORT_DUPLICATE = new ErrorCode(1_040_109_001, \"该展示序号已存在\");\r\n\r\n // ========== MES 基础数据-编码规则(1-040-110-000) ==========\r\n ErrorCode AUTO_CODE_RULE_NOT_EXISTS = new ErrorCode(1_040_110_000, \"编码规则不存在\");\r\n ErrorCode AUTO_CODE_RULE_CODE_DUPLICATE = new ErrorCode(1_040_110_001, \"规则编码已存在\");\r\n ErrorCode AUTO_CODE_PART_NOT_EXISTS = new ErrorCode(1_040_110_002, \"规则组成不存在\");\r\n ErrorCode AUTO_CODE_REDIS_ERROR = new ErrorCode(1_040_110_003, \"编码生成服务不可用,请稍后重试\");\r\n ErrorCode AUTO_CODE_GENERATE_FAILED = new ErrorCode(1_040_110_004, \"编码生成失败\");\r\n ErrorCode AUTO_CODE_PART_SERIAL_NUMBER_DUPLICATE = new ErrorCode(1_040_110_005, \"流水号分段只能存在一个\");\r\n\r\n // ========== MES 日历排班-计划班次(1-040-200-000) ==========\r\n ErrorCode CAL_PLAN_SHIFT_NOT_EXISTS = new ErrorCode(1_040_200_000, \"计划班次不存在\");\r\n ErrorCode CAL_PLAN_SHIFT_COUNT_EXCEED = new ErrorCode(1_040_200_001, \"班次数量已达到轮班方式的上限\");\r\n\r\n // ========== MES 日历排班-班组(1-040-201-000) ==========\r\n ErrorCode CAL_TEAM_NOT_EXISTS = new ErrorCode(1_040_201_000, \"班组不存在\");\r\n ErrorCode CAL_TEAM_CODE_DUPLICATE = new ErrorCode(1_040_201_001, \"班组编码已存在\");\r\n // ========== MES 日历排班-班组成员(1-040-201-100) ==========\r\n ErrorCode CAL_TEAM_MEMBER_NOT_EXISTS = new ErrorCode(1_040_201_100, \"班组成员不存在\");\r\n ErrorCode CAL_TEAM_MEMBER_USER_DUPLICATE = new ErrorCode(1_040_201_101, \"该用户已分配到其他班组\");\r\n ErrorCode CAL_TEAM_MEMBER_USER_NOT_EXISTS = new ErrorCode(1_040_201_102, \"用户不存在\");\r\n // ========== MES 日历排班-班组排班(1-040-201-200) ==========\r\n ErrorCode CAL_TEAM_SHIFT_NOT_EXISTS = new ErrorCode(1_040_201_200, \"班组排班记录不存在\");\r\n ErrorCode CAL_TEAM_SHIFT_GENERATE_TEAM_NOT_ENOUGH = new ErrorCode(1_040_201_201, \"班组数量不满足轮班方式要求\");\r\n ErrorCode CAL_TEAM_SHIFT_GENERATE_SHIFT_NOT_ENOUGH = new ErrorCode(1_040_201_202, \"班次数量不满足轮班方式要求\");\r\n\r\n // ========== MES 日历排班-排班计划(1-040-202-000) ==========\r\n ErrorCode CAL_PLAN_NOT_EXISTS = new ErrorCode(1_040_202_000, \"排班计划不存在\");\r\n ErrorCode CAL_PLAN_CODE_DUPLICATE = new ErrorCode(1_040_202_001, \"排班计划编码已存在\");\r\n ErrorCode CAL_PLAN_NOT_PREPARE = new ErrorCode(1_040_202_002, \"排班计划已确认,不允许修改或删除\");\r\n ErrorCode CAL_PLAN_TEAM_COUNT_NOT_MATCH = new ErrorCode(1_040_202_003, \"确认排班计划时,分配的班组数量与轮班方式不匹配\");\r\n // ========== MES 日历排班-计划班组关联(1-040-202-100) ==========\r\n ErrorCode CAL_PLAN_TEAM_NOT_EXISTS = new ErrorCode(1_040_202_100, \"计划班组关联不存在\");\r\n ErrorCode CAL_PLAN_TEAM_DUPLICATE = new ErrorCode(1_040_202_101, \"该班组已分配到此计划\");\r\n\r\n // ========== MES 日历排班-假期设置(1-040-203-000) ==========\r\n ErrorCode CAL_HOLIDAY_NOT_EXISTS = new ErrorCode(1_040_203_000, \"假期设置不存在\");\r\n\r\n // ========== MES 设备管理-设备类型(1-040-300-000) ==========\r\n ErrorCode DV_MACHINERY_TYPE_NOT_EXISTS = new ErrorCode(1_040_300_000, \"设备类型不存在\");\r\n ErrorCode DV_MACHINERY_TYPE_EXITS_CHILDREN = new ErrorCode(1_040_300_001, \"存在子类型,无法删除\");\r\n ErrorCode DV_MACHINERY_TYPE_PARENT_NOT_EXITS = new ErrorCode(1_040_300_002, \"父级类型不存在\");\r\n ErrorCode DV_MACHINERY_TYPE_PARENT_ERROR = new ErrorCode(1_040_300_003, \"不能设置自己为父类型\");\r\n ErrorCode DV_MACHINERY_TYPE_NAME_DUPLICATE = new ErrorCode(1_040_300_004, \"同一父类型下已存在该名称\");\r\n ErrorCode DV_MACHINERY_TYPE_CODE_DUPLICATE = new ErrorCode(1_040_300_005, \"设备类型编码已存在\");\r\n ErrorCode DV_MACHINERY_TYPE_PARENT_IS_CHILD = new ErrorCode(1_040_300_006, \"不能设置自己的子类型为父类型\");\r\n ErrorCode DV_MACHINERY_TYPE_HAS_MACHINERY = new ErrorCode(1_040_300_007, \"该类型下存在设备,无法删除\");\r\n\r\n // ========== MES 设备管理-设备台账(1-040-301-000) ==========\r\n ErrorCode DV_MACHINERY_NOT_EXISTS = new ErrorCode(1_040_301_000, \"设备不存在\");\r\n ErrorCode DV_MACHINERY_CODE_DUPLICATE = new ErrorCode(1_040_301_001, \"设备编码已存在\");\r\n ErrorCode DV_MACHINERY_IS_DISABLE = new ErrorCode(1_040_301_007, \"设备已禁用\");\r\n ErrorCode DV_MACHINERY_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_301_002, \"导入设备数据不能为空\");\r\n ErrorCode DV_MACHINERY_HAS_CHECK_PLAN = new ErrorCode(1_040_301_003, \"设备已关联点检计划,无法删除\");\r\n ErrorCode DV_MACHINERY_HAS_CHECK_RECORD = new ErrorCode(1_040_301_004, \"设备已关联点检记录,无法删除\");\r\n ErrorCode DV_MACHINERY_HAS_MAINTEN_RECORD = new ErrorCode(1_040_301_005, \"设备已关联保养记录,无法删除\");\r\n ErrorCode DV_MACHINERY_HAS_REPAIR = new ErrorCode(1_040_301_006, \"设备已关联维修工单,无法删除\");\r\n ErrorCode DV_MACHINERY_WORKSTATION_NOT_EXISTS = new ErrorCode(1_040_301_008, \"工作站编码不存在\");\r\n\r\n // ========== MES 设备管理-点检保养项目(1-040-304-000) ==========\r\n ErrorCode DV_SUBJECT_NOT_EXISTS = new ErrorCode(1_040_304_000, \"点检保养项目不存在\");\r\n ErrorCode DV_SUBJECT_CODE_DUPLICATE = new ErrorCode(1_040_304_001, \"项目编码已存在\");\r\n ErrorCode DV_SUBJECT_USED_BY_CHECK_PLAN = new ErrorCode(1_040_304_002, \"点检保养项目已被点检保养方案使用,无法删除\");\r\n ErrorCode DV_SUBJECT_IS_DISABLE = new ErrorCode(1_040_304_003, \"点检保养项目已禁用\");\r\n\r\n // ========== MES 设备管理-点检计划(1-040-302-000) ==========\r\n ErrorCode DV_CHECK_PLAN_NOT_EXISTS = new ErrorCode(1_040_302_000, \"点检计划不存在\");\r\n ErrorCode DV_CHECK_PLAN_CODE_DUPLICATE = new ErrorCode(1_040_302_001, \"点检保养方案编码已存在\");\r\n ErrorCode DV_CHECK_PLAN_NOT_PREPARE = new ErrorCode(1_040_302_002, \"点检保养方案已启用,不允许修改或删除\");\r\n ErrorCode DV_CHECK_PLAN_NO_MACHINERY = new ErrorCode(1_040_302_003, \"启用方案时,至少需要关联一台设备\");\r\n ErrorCode DV_CHECK_PLAN_NO_SUBJECT = new ErrorCode(1_040_302_004, \"启用方案时,至少需要关联一个点检保养项目\");\r\n ErrorCode DV_CHECK_PLAN_NOT_ENABLED = new ErrorCode(1_040_302_005, \"点检保养方案未启用,不允许停用\");\r\n ErrorCode DV_CHECK_PLAN_TYPE_MISMATCH = new ErrorCode(1_040_302_006, \"点检保养方案类型与当前业务不匹配\");\r\n ErrorCode DV_CHECK_PLAN_NOT_ENABLED_FOR_RECORD = new ErrorCode(1_040_302_007, \"点检保养方案未启用,不允许创建记录\");\r\n // ========== MES 设备管理-点检方案设备(1-040-302-100) ==========\r\n ErrorCode DV_CHECK_PLAN_MACHINERY_NOT_EXISTS = new ErrorCode(1_040_302_100, \"点检保养方案设备不存在\");\r\n ErrorCode DV_CHECK_PLAN_MACHINERY_DUPLICATE = new ErrorCode(1_040_302_101, \"该设备已关联到当前方案,请勿重复添加\");\r\n ErrorCode DV_CHECK_PLAN_MACHINERY_EXISTS_IN_SAME_TYPE = new ErrorCode(1_040_302_102, \"该设备已存在于同类型的其他启用的或草稿的方案中,不允许同一设备添加多个同类型的方案\");\r\n // ========== MES 设备管理-点检方案项目(1-040-302-200) ==========\r\n ErrorCode DV_CHECK_PLAN_SUBJECT_NOT_EXISTS = new ErrorCode(1_040_302_200, \"点检保养方案项目不存在\");\r\n ErrorCode DV_CHECK_PLAN_SUBJECT_DUPLICATE = new ErrorCode(1_040_302_201, \"该项目已关联到当前方案,请勿重复添加\");\r\n\r\n // ========== MES 设备管理-维修工单(1-040-303-000) ==========\r\n ErrorCode DV_REPAIR_NOT_EXISTS = new ErrorCode(1_040_303_000, \"维修工单不存在\");\r\n ErrorCode DV_REPAIR_NOT_PREPARE = new ErrorCode(1_040_303_001, \"维修工单不是草稿状态,不允许修改或删除\");\r\n ErrorCode DV_REPAIR_CODE_DUPLICATE = new ErrorCode(1_040_303_002, \"维修工单编码已存在\");\r\n ErrorCode DV_REPAIR_NOT_CONFIRMED = new ErrorCode(1_040_303_003, \"只有维修中状态的维修工单才能完成维修\");\r\n ErrorCode DV_REPAIR_NOT_APPROVING = new ErrorCode(1_040_303_004, \"只有待验收状态的维修工单才能验收\");\r\n // ========== MES 设备管理-维修工单行(1-040-303-100) ==========\r\n ErrorCode DV_REPAIR_LINE_NOT_EXISTS = new ErrorCode(1_040_303_100, \"维修工单行不存在\");\r\n\r\n // ========== MES 设备管理-保养记录(1-040-305-000) ==========\r\n ErrorCode MAINTEN_RECORD_NOT_EXISTS = new ErrorCode(1_040_305_000, \"设备保养记录不存在\");\r\n ErrorCode MAINTEN_RECORD_NOT_DRAFT = new ErrorCode(1_040_305_001, \"设备保养记录已提交,不允许修改或删除\");\r\n ErrorCode MAINTEN_RECORD_NO_LINE = new ErrorCode(1_040_305_002, \"提交保养记录时,至少需要一条保养项目\");\r\n // ========== MES 设备管理-保养记录明细(1-040-305-100) ==========\r\n ErrorCode MAINTEN_RECORD_LINE_NOT_EXISTS = new ErrorCode(1_040_305_100, \"设备保养记录明细不存在\");\r\n\r\n // ========== MES 设备管理-点检记录(1-040-306-000) ==========\r\n ErrorCode DV_CHECK_RECORD_NOT_EXISTS = new ErrorCode(1_040_306_000, \"设备点检记录不存在\");\r\n ErrorCode DV_CHECK_RECORD_NOT_DRAFT = new ErrorCode(1_040_306_001, \"设备点检记录已完成,不允许修改或删除\");\r\n ErrorCode DV_CHECK_RECORD_NO_LINE = new ErrorCode(1_040_306_002, \"提交点检记录时,至少需要一条点检项目\");\r\n // ========== MES 设备管理-点检记录明细(1-040-306-100) ==========\r\n ErrorCode DV_CHECK_RECORD_LINE_NOT_EXISTS = new ErrorCode(1_040_306_100, \"设备点检记录明细不存在\");\r\n\r\n // ========== MES 设备管理-计量器具(1-040-307-000) ==========\r\n ErrorCode DV_METERING_NOT_EXISTS = new ErrorCode(1_040_307_000, \"计量器具不存在\");\r\n ErrorCode DV_METERING_CODE_DUPLICATE = new ErrorCode(1_040_307_001, \"计量器具编码已存在\");\r\n ErrorCode DV_METERING_HAS_CHECK_RECORD = new ErrorCode(1_040_307_002, \"计量器具已关联检测记录,无法删除\");\r\n\r\n // ========== MES 设备管理-计量检测记录(1-040-307-100) ==========\r\n ErrorCode DV_METERING_CHECK_NOT_EXISTS = new ErrorCode(1_040_307_100, \"计量检测记录不存在\");\r\n ErrorCode DV_METERING_CHECK_CODE_DUPLICATE = new ErrorCode(1_040_307_101, \"计量检测编号已存在\");\r\n\r\n // ========== MES 工具管理-工具类型(1-040-400-000) ==========\r\n ErrorCode TM_TOOL_TYPE_NOT_EXISTS = new ErrorCode(1_040_400_000, \"工具类型不存在\");\r\n ErrorCode TM_TOOL_TYPE_CODE_DUPLICATE = new ErrorCode(1_040_400_001, \"工具类型编码已存在\");\r\n ErrorCode TM_TOOL_TYPE_NAME_DUPLICATE = new ErrorCode(1_040_400_002, \"工具类型名称已存在\");\r\n ErrorCode TM_TOOL_TYPE_HAS_TOOL = new ErrorCode(1_040_400_003, \"该工具类型下存在工具,无法删除\");\r\n ErrorCode TM_TOOL_TYPE_HAS_WORKSTATION_TOOL = new ErrorCode(1_040_400_004, \"该工具类型已被工作站工装资源引用,无法删除\");\r\n\r\n // ========== MES 工具管理-工具台账(1-040-401-000) ==========\r\n ErrorCode TM_TOOL_NOT_EXISTS = new ErrorCode(1_040_401_000, \"工具不存在\");\r\n ErrorCode TM_TOOL_CODE_DUPLICATE = new ErrorCode(1_040_401_001, \"工具编码已存在\");\r\n ErrorCode TM_TOOL_HAS_BATCH = new ErrorCode(1_040_401_002, \"该工具已被批次引用,无法删除\");\r\n\r\n // ========== MES 生产管理-工序(1-040-500-000) ==========\r\n ErrorCode PRO_PROCESS_NOT_EXISTS = new ErrorCode(1_040_500_000, \"工序不存在\");\r\n ErrorCode PRO_PROCESS_CODE_EXISTS = new ErrorCode(1_040_500_001, \"工序编码已存在\");\r\n ErrorCode PRO_PROCESS_NAME_EXISTS = new ErrorCode(1_040_500_002, \"工序名称已存在\");\r\n ErrorCode PRO_PROCESS_USED_BY_ROUTE = new ErrorCode(1_040_500_003, \"工序已被工艺路线引用,无法删除\");\r\n ErrorCode PRO_PROCESS_IS_DISABLE = new ErrorCode(1_040_500_004, \"工序已禁用\");\r\n // ========== MES 生产管理-工序内容(1-040-500-100) ==========\r\n ErrorCode PRO_PROCESS_CONTENT_NOT_EXISTS = new ErrorCode(1_040_500_100, \"工序内容不存在\");\r\n\r\n // ========== MES 生产管理-工艺路线(1-040-501-000) ==========\r\n ErrorCode PRO_ROUTE_NOT_EXISTS = new ErrorCode(1_040_501_000, \"工艺路线不存在\");\r\n ErrorCode PRO_ROUTE_CODE_DUPLICATE = new ErrorCode(1_040_501_001, \"工艺路线编码已存在\");\r\n ErrorCode PRO_ROUTE_ENABLE_NO_PROCESS = new ErrorCode(1_040_501_002, \"请先添加组成工序\");\r\n ErrorCode PRO_ROUTE_ENABLE_NO_KEY_PROCESS = new ErrorCode(1_040_501_003, \"工艺路线必须要有关键工序\");\r\n ErrorCode PRO_ROUTE_ENABLE_PRODUCT_NO_BOM = new ErrorCode(1_040_501_004, \"产品 {} 未配置工序的 BOM 消耗\");\r\n ErrorCode PRO_ROUTE_IS_ENABLE = new ErrorCode(1_040_501_005, \"工艺路线已启用,不允许操作\");\r\n // ========== MES 生产管理-工艺路线工序(1-040-501-100) ==========\r\n ErrorCode PRO_ROUTE_PROCESS_NOT_EXISTS = new ErrorCode(1_040_501_100, \"工艺路线工序不存在\");\r\n ErrorCode PRO_ROUTE_PROCESS_SORT_DUPLICATE = new ErrorCode(1_040_501_101, \"序号已存在\");\r\n ErrorCode PRO_ROUTE_PROCESS_DUPLICATE = new ErrorCode(1_040_501_102, \"不能重复添加工序\");\r\n ErrorCode PRO_ROUTE_PROCESS_KEY_DUPLICATE = new ErrorCode(1_040_501_103, \"当前工艺路线已经指定过关键工序\");\r\n // ========== MES 生产管理-工艺路线产品(1-040-501-200) ==========\r\n ErrorCode PRO_ROUTE_PRODUCT_NOT_EXISTS = new ErrorCode(1_040_501_200, \"工艺路线产品不存在\");\r\n ErrorCode PRO_ROUTE_PRODUCT_ITEM_DUPLICATE = new ErrorCode(1_040_501_201, \"此产品已配置了工艺路线\");\r\n // ========== MES 生产管理-工艺路线产品BOM(1-040-501-300) ==========\r\n ErrorCode PRO_ROUTE_PRODUCT_BOM_NOT_EXISTS = new ErrorCode(1_040_501_300, \"工艺路线产品 BOM 不存在\");\r\n ErrorCode PRO_ROUTE_PRODUCT_BOM_DUPLICATE = new ErrorCode(1_040_501_301, \"当前 BOM 物料在此工序已经配置过\");\r\n\r\n // ========== MES 生产管理-生产工单(1-040-502-000) ==========\r\n ErrorCode PRO_WORK_ORDER_NOT_EXISTS = new ErrorCode(1_040_502_000, \"生产工单不存在\");\r\n ErrorCode PRO_WORK_ORDER_CODE_DUPLICATE = new ErrorCode(1_040_502_001, \"生产工单编码已存在\");\r\n ErrorCode PRO_WORK_ORDER_NOT_PREPARE = new ErrorCode(1_040_502_002, \"只有草稿状态的工单才能执行此操作\");\r\n ErrorCode PRO_WORK_ORDER_NOT_CONFIRMED = new ErrorCode(1_040_502_003, \"只有已确认状态的工单才能执行此操作\");\r\n ErrorCode PRO_WORK_ORDER_HAS_CHILDREN = new ErrorCode(1_040_502_004, \"存在子工单,无法删除\");\r\n ErrorCode PRO_WORK_ORDER_PRODUCT_MISMATCH = new ErrorCode(1_040_502_005, \"当前产品物料与生产工单产品不一致\");\r\n ErrorCode PRO_WORK_ORDER_SCHEDULE_QUANTITY_EXCEED = new ErrorCode(1_040_502_006, \"排产数量超限:工单{}(计划{},已排产{},本次排产{})\");\r\n ErrorCode PRO_WORK_ORDER_BOM_NOT_EXISTS = new ErrorCode(1_040_502_100, \"生产工单BOM不存在\");\r\n\r\n // ========== MES 生产管理-生产工单工序(1-040-502-300) ==========\r\n ErrorCode PRO_WORK_ORDER_PROCESS_NOT_EXISTS = new ErrorCode(1_040_502_300, \"生产工单工序不存在\");\r\n ErrorCode PRO_WORK_ORDER_PROCESS_SORT_DUPLICATE = new ErrorCode(1_040_502_301, \"序号已存在\");\r\n ErrorCode PRO_WORK_ORDER_PROCESS_DUPLICATE = new ErrorCode(1_040_502_302, \"不能重复添加工序\");\r\n ErrorCode PRO_WORK_ORDER_PROCESS_KEY_DUPLICATE = new ErrorCode(1_040_502_303, \"当前工单已经指定过关键工序\");\r\n\r\n // ========== MES 生产管理-生产工单参数记录(1-040-502-200) ==========\r\n ErrorCode PRO_WORK_ORDER_PARAM_RECORD_NOT_EXISTS = new ErrorCode(1_040_502_200, \"工单参数记录不存在\");\r\n ErrorCode PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NO_DETAIL = new ErrorCode(1_040_502_201, \"参数模板没有明细,无法创建记录\");\r\n ErrorCode PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE = new ErrorCode(1_040_502_202, \"参数明细不属于所选模板\");\r\n ErrorCode PRO_WORK_ORDER_PARAM_RECORD_REQUIRED_PARAM_MISSING = new ErrorCode(1_040_502_203, \"必填参数【{}】未填写\");\r\n ErrorCode PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NOT_CHANGE = new ErrorCode(1_040_502_204, \"不允许更换参数模板,请删除后重新创建\");\r\n\r\n // ========== MES 生产管理-生产任务(1-040-503-000) ==========\r\n ErrorCode PRO_TASK_NOT_EXISTS = new ErrorCode(1_040_503_000, \"生产任务不存在\");\r\n ErrorCode PRO_TASK_SCHEDULE_INVALID = new ErrorCode(1_040_503_020, \"排产校验未通过:{}\");\r\n ErrorCode PRO_TASK_SCHEDULE_PREVIEW_CHANGED = new ErrorCode(1_040_503_021, \"排产数据已变化或预览已过期,请重新生成预览后确认\");\r\n ErrorCode PRO_TASK_ALREADY_FINISHED = new ErrorCode(1_040_503_001, \"生产任务已完成或已取消,不能继续操作\");\r\n ErrorCode PRO_TASK_WORK_ORDER_MISMATCH = new ErrorCode(1_040_503_002, \"生产任务不属于当前生产工单\");\r\n ErrorCode PRO_TASK_WORKSTATION_MISMATCH = new ErrorCode(1_040_503_003, \"生产任务不属于当前工作站\");\r\n ErrorCode PRO_TASK_ROUTE_PROCESS_MISMATCH = new ErrorCode(1_040_503_004, \"生产任务与当前工艺路线或工序不一致\");\r\n ErrorCode PRO_TASK_ITEM_MISMATCH = new ErrorCode(1_040_503_005, \"检验物料与生产任务物料不一致\");\r\n ErrorCode PRO_TASK_HAS_FEEDBACK = new ErrorCode(1_040_503_006, \"该任务下存在报工记录,无法删除(避免报工追溯断链)\");\r\n ErrorCode PRO_WORKSTATION_PROCESS_MISMATCH = new ErrorCode(1_040_503_009, \"工作站所属工序与当前工序不一致\"); // 修正编号冲突\r\n ErrorCode PRO_TASK_CANNOT_PAUSE = new ErrorCode(1_040_503_007, \"只有【生产中】或【部分完成】的任务可以停工\");\r\n ErrorCode PRO_TASK_NOT_PAUSED = new ErrorCode(1_040_503_008, \"任务不处于【已停工】状态,无法复工\");\r\n // ========== MES 生产管理-生产任务投料(1-040-503-100) ==========\r\n ErrorCode PRO_TASK_ISSUE_NOT_EXISTS = new ErrorCode(1_040_503_100, \"生产任务投料记录不存在\");\r\n\r\n // ========== MES 生产管理-安灯呼叫配置(1-040-504-000) ==========\r\n ErrorCode PRO_ANDON_CONFIG_NOT_EXISTS = new ErrorCode(1_040_504_000, \"安灯呼叫配置不存在\");\r\n\r\n // ========== MES 生产管理-安灯呼叫记录(1-040-505-000) ==========\r\n ErrorCode PRO_ANDON_RECORD_NOT_EXISTS = new ErrorCode(1_040_505_000, \"安灯呼叫记录不存在\");\r\n ErrorCode PRO_ANDON_RECORD_ALREADY_HANDLED = new ErrorCode(1_040_505_001, \"安灯记录已处置,不允许重复处置\");\r\n ErrorCode PRO_ANDON_RECORD_HANDLE_TIME_REQUIRED = new ErrorCode(1_040_505_002, \"标记已处置时,处置时间不能为空\");\r\n ErrorCode PRO_ANDON_RECORD_HANDLER_USER_REQUIRED = new ErrorCode(1_040_505_003, \"标记已处置时,处置人不能为空\");\r\n\r\n // ========== MES 生产管理-生产报工(1-040-506-000) ==========\r\n ErrorCode PRO_FEEDBACK_NOT_EXISTS = new ErrorCode(1_040_506_000, \"生产报工不存在\");\r\n ErrorCode PRO_FEEDBACK_NOT_PREPARE = new ErrorCode(1_040_506_001, \"只能修改或删除草稿状态的报工单\");\r\n ErrorCode PRO_FEEDBACK_NOT_APPROVING = new ErrorCode(1_040_506_002, \"只有审批中状态的报工单才能执行此操作\");\r\n ErrorCode PRO_FEEDBACK_NOT_UNCHECK = new ErrorCode(1_040_506_003, \"只有待检验状态的报工单才能完成检验\");\r\n ErrorCode PRO_FEEDBACK_QUANTITY_EXCEED = new ErrorCode(1_040_506_004, \"报工数量不能超过排产数量\");\r\n ErrorCode PRO_FEEDBACK_STATUS_ERROR = new ErrorCode(1_040_506_005, \"报工单状态不正确,无法执行此操作\");\r\n ErrorCode PRO_FEEDBACK_WORK_ORDER_NOT_CONFIRMED = new ErrorCode(1_040_506_006, \"关联的工单未确认,无法创建报工\");\r\n ErrorCode PRO_FEEDBACK_QUALIFIED_UNQUALIFIED_MISMATCH = new ErrorCode(1_040_506_007, \"合格品数量与不良品数量之和必须等于报工数量\");\r\n ErrorCode PRO_FEEDBACK_ROUTE_PROCESS_INVALID = new ErrorCode(1_040_506_008, \"未找到对应的工艺工序配置,请检查工艺路线与工序\");\r\n ErrorCode PRO_FEEDBACK_TASK_OR_ORDER_FINISHED = new ErrorCode(1_040_506_009, \"当前生产任务或工单已完成,不能继续报工\");\r\n ErrorCode PRO_FEEDBACK_QUANTITY_MUST_POSITIVE = new ErrorCode(1_040_506_010, \"报工数量必须大于 0\");\r\n ErrorCode PRO_FEEDBACK_QUALIFIED_UNQUALIFIED_REQUIRED = new ErrorCode(1_040_506_011, \"请输入合格品和不良品数量,且合计须大于 0\");\r\n ErrorCode PRO_FEEDBACK_UNCHECK_QUANTITY_EXISTS = new ErrorCode(1_040_506_012, \"当前报工单未完成检验(待检数量:{}),无法执行报工\");\r\n ErrorCode PRO_FEEDBACK_BACKFLUSH_BOM_REQUIRED = new ErrorCode(1_040_506_013, \"当前工序为倒冲工序,但未配置BOM消耗,无法报工\");\r\n ErrorCode PRO_FEEDBACK_CANNOT_CREATE_WHEN_PAUSED = new ErrorCode(1_040_506_014, \"生产任务处于停工状态,无法报工\");\r\n ErrorCode PRO_FEEDBACK_PENDING_PRODUCE_UNREPAIRABLE = new ErrorCode(1_040_506_015,\r\n \"报工对应的产出入库单已存在处理结果,无法自动补生成待检行,请运行质检报工数据修复脚本核对\");\r\n ErrorCode PRO_FEEDBACK_PREV_PROCESS_NOT_FINISHED = new ErrorCode(1_040_506_016,\r\n \"上一道工序「{}」尚未报工完成(剩余 {}),请先完成上一道工序的报工\");\r\n\r\n // ========== MES 生产管理-生产流转卡(1-040-507-000) ==========\r\n ErrorCode PRO_CARD_NOT_EXISTS = new ErrorCode(1_040_507_000, \"生产流转卡不存在\");\r\n ErrorCode PRO_CARD_CODE_DUPLICATE = new ErrorCode(1_040_507_001, \"流转卡编码已存在\");\r\n ErrorCode PRO_CARD_STATUS_ERROR = new ErrorCode(1_040_507_002, \"流转卡状态不正确\");\r\n ErrorCode PRO_CARD_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_507_003, \"已完成或已取消的流转卡不允许取消\");\r\n ErrorCode PRO_CARD_NOT_PREPARE = new ErrorCode(1_040_507_004, \"流转卡不是草稿状态,不允许修改或删除\");\r\n // ========== MES 生产管理-流转卡工序(1-040-507-100) ==========\r\n ErrorCode PRO_CARD_PROCESS_NOT_EXISTS = new ErrorCode(1_040_507_100, \"流转卡工序记录不存在\");\r\n\r\n // ========== MES 生产管理-工作记录(1-040-508-000) ==========\r\n ErrorCode WORK_RECORD_NOT_CLOCK_IN = new ErrorCode(1_040_508_001, \"当前用户未上工,无法下工\");\r\n ErrorCode WORK_RECORD_ALREADY_CLOCK_IN = new ErrorCode(1_040_508_002, \"当前用户已上工,请先下工再操作\");\r\n\r\n // ========== MES 生产管理-生产主计划 MPS(1-040-509-000) ==========\r\n ErrorCode PRO_MPS_NOT_EXISTS = new ErrorCode(1_040_509_000, \"MPS 不存在\");\r\n ErrorCode PRO_MPS_NOT_DRAFT = new ErrorCode(1_040_509_001, \"只有草稿状态的 MPS 才能执行此操作\");\r\n ErrorCode PRO_MPS_NOT_ISSUED = new ErrorCode(1_040_509_002, \"只有已下发状态的 MPS 才能执行此操作\");\r\n ErrorCode PRO_MPS_ALREADY_ISSUED = new ErrorCode(1_040_509_003, \"MPS 已下发,无法修改\");\r\n ErrorCode PRO_MPS_MERGE_AT_LEAST_TWO = new ErrorCode(1_040_509_004, \"合并下发至少需要选择两条 MPS\");\r\n ErrorCode PRO_MPS_MERGE_PRODUCT_MISMATCH = new ErrorCode(1_040_509_005, \"合并下发的 MPS 必须是相同产品\");\r\n ErrorCode PRO_MPS_CODE_DUPLICATE = new ErrorCode(1_040_509_006, \"MPS 编码已存在\");\r\n ErrorCode PRO_MPS_HAS_WORK_ORDER = new ErrorCode(1_040_509_007, \"MPS 已关联生产工单,无法删除\");\r\n ErrorCode PRO_MPS_MES_PRODUCT_NOT_EXISTS = new ErrorCode(1_040_509_008, \"MES 产品不存在,无法创建 MPS,产品:{}\");\r\n ErrorCode PRO_MPS_WORK_ORDER_HAS_FEEDBACK = new ErrorCode(1_040_509_009, \"该计划关联的生产订单已有报工记录,无法取消!\");\r\n\r\n // ========== MES 质量管理-质检方案(1-040-600-000) ==========\r\n ErrorCode QC_TEMPLATE_NOT_EXISTS = new ErrorCode(1_040_600_000, \"质检方案不存在\");\r\n ErrorCode QC_TEMPLATE_CODE_DUPLICATE = new ErrorCode(1_040_600_001, \"质检方案编号已存在\");\r\n // ========== MES 质量管理-质检方案检测指标项(1-040-600-100) ==========\r\n ErrorCode QC_TEMPLATE_INDICATOR_NOT_EXISTS = new ErrorCode(1_040_600_100, \"质检方案检测指标项不存在\");\r\n // ========== MES 质量管理-质检方案产品关联(1-040-600-200) ==========\r\n ErrorCode QC_TEMPLATE_ITEM_NOT_EXISTS = new ErrorCode(1_040_600_200, \"质检方案产品关联不存在\");\r\n ErrorCode QC_TEMPLATE_ITEM_DUPLICATE = new ErrorCode(1_040_600_201, \"该产品已关联此质检方案\");\r\n\r\n // ========== MES 质量管理-质检指标(1-040-601-000) ==========\r\n ErrorCode QC_INDICATOR_NOT_EXISTS = new ErrorCode(1_040_601_000, \"质检指标不存在\");\r\n ErrorCode QC_INDICATOR_CODE_DUPLICATE = new ErrorCode(1_040_601_001, \"质检指标编码已存在\");\r\n ErrorCode QC_INDICATOR_NAME_DUPLICATE = new ErrorCode(1_040_601_002, \"质检指标名称已存在\");\r\n ErrorCode QC_INDICATOR_RESULT_SPECIFICATION_REQUIRED = new ErrorCode(1_040_601_003, \"结果值属性不能为空\");\r\n ErrorCode QC_INDICATOR_PARENT_NOT_EXISTS = new ErrorCode(1_040_601_004, \"父指标不存在\");\r\n ErrorCode QC_INDICATOR_PARENT_NOT_GROUP = new ErrorCode(1_040_601_005, \"父指标不是分组项\");\r\n ErrorCode QC_INDICATOR_PARENT_SELF = new ErrorCode(1_040_601_006, \"父指标不能是自己\");\r\n ErrorCode QC_INDICATOR_GROUP_CANNOT_NEST = new ErrorCode(1_040_601_007, \"分组项不能挂在其它指标下\");\r\n ErrorCode QC_INDICATOR_HAS_CHILDREN = new ErrorCode(1_040_601_008, \"该指标下已有子项\");\r\n ErrorCode QC_INDICATOR_RESULT_TYPE_REQUIRED = new ErrorCode(1_040_601_009, \"录入项的结果值类型不能为空\");\r\n\r\n // ========== MES 质量管理-缺陷类型(1-040-602-000) ==========\r\n ErrorCode QC_DEFECT_NOT_EXISTS = new ErrorCode(1_040_602_000, \"缺陷类型不存在\");\r\n ErrorCode QC_DEFECT_CODE_DUPLICATE = new ErrorCode(1_040_602_001, \"缺陷类型编码已存在\");\r\n ErrorCode QC_DEFECT_NAME_DUPLICATE = new ErrorCode(1_040_602_002, \"缺陷类型名称已存在\");\r\n\r\n // ========== MES 质量管理-来料检验 IQC(1-040-603-000) ==========\r\n ErrorCode QC_IQC_NOT_EXISTS = new ErrorCode(1_040_603_000, \"来料检验单不存在\");\r\n ErrorCode QC_IQC_CODE_DUPLICATE = new ErrorCode(1_040_603_001, \"来料检验单编号已存在\");\r\n ErrorCode QC_IQC_NOT_PREPARE = new ErrorCode(1_040_603_002, \"只有草稿状态的检验单才可操作\");\r\n ErrorCode QC_IQC_QUANTITY_MISMATCH = new ErrorCode(1_040_603_004, \"合格品与不合格品数量之和须等于检测数量\");\r\n ErrorCode QC_NO_TEMPLATE = new ErrorCode(1_040_603_005, \"当前产品未配置检测模板\");\r\n ErrorCode QC_NO_TEMPLATE_FOR_ITEM = new ErrorCode(1_040_603_008, \"物料【{}】未配置 IQC 检测模板,请先在质量管理中配置\");\r\n ErrorCode QC_IQC_SOURCE_DOC_PARAMS_MISSING = new ErrorCode(1_040_603_006, \"来源单据类型非空时,来源单据 ID 和来源单据行 ID 不能为空\");\r\n ErrorCode QC_IQC_CHECK_RESULT_EMPTY = new ErrorCode(1_040_603_007, \"完成检验单前,检测结果必须填写\");\r\n // ========== MES 质量管理-来料检验行(1-040-603-100) ==========\r\n ErrorCode QC_IQC_LINE_NOT_EXISTS = new ErrorCode(1_040_603_100, \"来料检验行不存在\");\r\n\r\n // ========== MES 质量管理-过程检验 IPQC(1-040-604-000) ==========\r\n ErrorCode QC_IPQC_NOT_EXISTS = new ErrorCode(1_040_604_000, \"过程检验单不存在\");\r\n ErrorCode QC_IPQC_CODE_DUPLICATE = new ErrorCode(1_040_604_001, \"过程检验单编号已存在\");\r\n ErrorCode QC_IPQC_NOT_PREPARE = new ErrorCode(1_040_604_002, \"只有草稿状态的检验单才可操作\");\r\n ErrorCode QC_IPQC_QUANTITY_MISMATCH = new ErrorCode(1_040_604_004, \"合格品与不合格品数量之和须等于检测数量\");\r\n ErrorCode QC_IPQC_NO_TEMPLATE = new ErrorCode(1_040_604_005, \"当前产品未配置 IPQC 检测模板\");\r\n ErrorCode QC_IPQC_CHECK_RESULT_EMPTY = new ErrorCode(1_040_604_006, \"完成检验单前,检测结果必须填写\");\r\n ErrorCode QC_IPQC_SOURCE_DOC_TYPE_UNKNOWN = new ErrorCode(1_040_604_007, \"未知的 IPQC 来源单据类型\");\r\n ErrorCode QC_IPQC_SOURCE_DOC_NO_PENDING_LINE = new ErrorCode(1_040_604_008, \"来源报工单不存在待检产出行,无法创建 IPQC\");\r\n ErrorCode QC_IPQC_SOURCE_LINE_NOT_BELONG = new ErrorCode(1_040_604_009, \"来源单据行不属于该报工单\");\r\n ErrorCode QC_IPQC_SOURCE_LINE_REQUIRED = new ErrorCode(1_040_604_010, \"来源单据类型为报工时,来源产出行 ID 不能为空\");\r\n ErrorCode QC_IPQC_SOURCE_LINE_NOT_PENDING = new ErrorCode(1_040_604_011, \"来源产出行不是待检验状态\");\r\n // ========== MES 质量管理-过程检验行(1-040-604-100) ==========\r\n ErrorCode QC_IPQC_LINE_NOT_EXISTS = new ErrorCode(1_040_604_100, \"过程检验行不存在\");\r\n\r\n // ========== MES 质量管理-质检缺陷记录(通用)(1-040-605-000) ==========\r\n ErrorCode QC_DEFECT_RECORD_NOT_EXISTS = new ErrorCode(1_040_605_000, \"缺陷记录不存在\");\r\n ErrorCode QC_DEFECT_RECORD_LEVEL_UNKNOWN = new ErrorCode(1_040_605_001, \"未知的缺陷等级\");\r\n ErrorCode QC_DEFECT_RECORD_QC_TYPE_UNSUPPORTED = new ErrorCode(1_040_605_002, \"不支持的检验类型\");\r\n\r\n // ========== MES 质量管理-检验结果(1-040-606-000) ==========\r\n ErrorCode QC_RESULT_NOT_EXISTS = new ErrorCode(1_040_606_000, \"检验结果不存在\");\r\n ErrorCode QC_RESULT_VALUE_FORMAT_INVALID = new ErrorCode(1_040_606_001, \"检测值格式不正确:{}\");\r\n ErrorCode QC_FINISH_INDICATOR_RESULT_REQUIRED = new ErrorCode(1_040_606_002, \"完成检验单前,至少需要录入一条检测结果\");\r\n\r\n // ========== MES 质量管理-出货检验(1-040-607-000) ==========\r\n ErrorCode QC_OQC_NOT_EXISTS = new ErrorCode(1_040_607_000, \"出货检验单不存在\");\r\n ErrorCode QC_OQC_CODE_DUPLICATE = new ErrorCode(1_040_607_001, \"出货检验单编号已存在\");\r\n ErrorCode QC_OQC_NOT_PREPARE = new ErrorCode(1_040_607_002, \"只有草稿状态的检验单才可操作\");\r\n ErrorCode QC_OQC_QUANTITY_MISMATCH = new ErrorCode(1_040_607_004, \"合格品与不合格品数量之和须等于检测数量\");\r\n ErrorCode QC_OQC_NO_TEMPLATE = new ErrorCode(1_040_607_005, \"当前产品未配置 OQC 检测模板\");\r\n ErrorCode QC_OQC_CHECK_RESULT_EMPTY = new ErrorCode(1_040_607_006, \"完成检验单前,检测结果必须填写\");\r\n ErrorCode QC_OQC_SOURCE_DOC_TYPE_UNKNOWN = new ErrorCode(1_040_607_007, \"未知的 OQC 来源单据类型\");\r\n\r\n // ========== MES 质量管理-出货检验行(1-040-607-100) ==========\r\n ErrorCode QC_OQC_LINE_NOT_EXISTS = new ErrorCode(1_040_607_100, \"出货检验行不存在\");\r\n\r\n // ========== MES 质量管理-退货检验 RQC(1-040-608-000) ==========\r\n ErrorCode QC_RQC_NOT_EXISTS = new ErrorCode(1_040_608_000, \"退货检验单不存在\");\r\n ErrorCode QC_RQC_CODE_DUPLICATE = new ErrorCode(1_040_608_001, \"退货检验单编号已存在\");\r\n ErrorCode QC_RQC_NOT_PREPARE = new ErrorCode(1_040_608_002, \"只有草稿状态的检验单才可操作\");\r\n ErrorCode QC_RQC_QUANTITY_MISMATCH = new ErrorCode(1_040_608_004, \"合格品与不合格品数量之和须等于检测数量\");\r\n ErrorCode QC_RQC_NO_TEMPLATE = new ErrorCode(1_040_608_005, \"当前产品未配置 RQC 检测模板\");\r\n ErrorCode QC_RQC_CHECK_RESULT_EMPTY = new ErrorCode(1_040_608_006, \"完成检验单前,检测结果必须填写\");\r\n // ========== MES 质量管理-退货检验行(1-040-608-100) ==========\r\n ErrorCode QC_RQC_LINE_NOT_EXISTS = new ErrorCode(1_040_608_100, \"退货检验行不存在\");\r\n\r\n // ========== MES 质量管理-不合格品处理 NCR(1-040-609-000) ==========\r\n ErrorCode QC_NCR_NOT_EXISTS = new ErrorCode(1_040_609_000, \"不合格品处理单不存在\");\r\n ErrorCode QC_NCR_CODE_DUPLICATE = new ErrorCode(1_040_609_001, \"不合格品处理单编号已存在\");\r\n ErrorCode QC_NCR_NOT_PENDING_REVIEW = new ErrorCode(1_040_609_002, \"只有待评审状态的不合格品处理单才可操作\");\r\n ErrorCode QC_NCR_NOT_REVIEWED = new ErrorCode(1_040_609_003, \"只有已评审状态的不合格品处理单才可执行处置\");\r\n ErrorCode QC_NCR_NOT_DISPOSED = new ErrorCode(1_040_609_004, \"只有已处置状态的不合格品处理单才可关闭\");\r\n\r\n // ========== MES 仓库管理-仓库(1-040-700-000) ==========\r\n ErrorCode WM_WAREHOUSE_NOT_EXISTS = new ErrorCode(1_040_700_000, \"仓库不存在\");\r\n ErrorCode WM_WAREHOUSE_CODE_DUPLICATE = new ErrorCode(1_040_700_001, \"仓库编码已存在\");\r\n ErrorCode WM_WAREHOUSE_NAME_DUPLICATE = new ErrorCode(1_040_700_002, \"仓库名称已存在\");\r\n ErrorCode WM_WAREHOUSE_HAS_LOCATION = new ErrorCode(1_040_700_003, \"仓库下存在库区,无法删除\");\r\n ErrorCode WM_WAREHOUSE_HAS_WORKSTATION = new ErrorCode(1_040_700_004, \"仓库已被工作站引用,无法删除\");\r\n ErrorCode WM_WAREHOUSE_HAS_MATERIAL_STOCK = new ErrorCode(1_040_700_005, \"仓库下有库存记录,无法删除\");\r\n ErrorCode WM_WAREHOUSE_IS_VIRTUAL = new ErrorCode(1_040_700_006, \"虚拟仓库不允许操作\");\r\n\r\n // ========== MES 仓库管理-库区(1-040-701-000) ==========\r\n ErrorCode WM_WAREHOUSE_LOCATION_NOT_EXISTS = new ErrorCode(1_040_701_000, \"库区不存在\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_CODE_DUPLICATE = new ErrorCode(1_040_701_001, \"同一仓库下库区编码已存在\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_NAME_DUPLICATE = new ErrorCode(1_040_701_002, \"同一仓库下库区名称已存在\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_HAS_AREA = new ErrorCode(1_040_701_003, \"库区下存在库位,无法删除\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_HAS_WORKSTATION = new ErrorCode(1_040_701_004, \"库区已被工作站引用,无法删除\");\r\n ErrorCode WM_WAREHOUSE_REQUIRED = new ErrorCode(1_040_701_005, \"选择库区时,仓库不能为空\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_RELATION_INVALID = new ErrorCode(1_040_701_006, \"库区不属于所选仓库\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_HAS_MATERIAL_STOCK = new ErrorCode(1_040_701_007, \"库区下有库存记录,无法删除\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_IS_VIRTUAL = new ErrorCode(1_040_701_008, \"虚拟库区不允许操作\");\r\n\r\n // ========== MES 仓库管理-库位(1-040-702-000) ==========\r\n ErrorCode WM_WAREHOUSE_AREA_NOT_EXISTS = new ErrorCode(1_040_702_000, \"库位不存在\");\r\n ErrorCode WM_WAREHOUSE_AREA_CODE_DUPLICATE = new ErrorCode(1_040_702_001, \"同一库区下库位编码已存在\");\r\n ErrorCode WM_WAREHOUSE_AREA_NAME_DUPLICATE = new ErrorCode(1_040_702_002, \"同一库区下库位名称已存在\");\r\n ErrorCode WM_WAREHOUSE_AREA_HAS_WORKSTATION = new ErrorCode(1_040_702_003, \"库位已被工作站引用,无法删除\");\r\n ErrorCode WM_WAREHOUSE_LOCATION_REQUIRED = new ErrorCode(1_040_702_004, \"选择库位时,库区不能为空\");\r\n ErrorCode WM_WAREHOUSE_AREA_RELATION_INVALID = new ErrorCode(1_040_702_005, \"库位不属于所选库区\");\r\n ErrorCode WM_WAREHOUSE_AREA_HAS_MATERIAL_STOCK = new ErrorCode(1_040_702_006, \"库位下有库存记录,无法删除\");\r\n ErrorCode WM_WAREHOUSE_AREA_WAREHOUSE_MISMATCH = new ErrorCode(1_040_702_007, \"库位不属于所选仓库\");\r\n ErrorCode WM_WAREHOUSE_AREA_IS_VIRTUAL = new ErrorCode(1_040_702_008, \"虚拟库位不允许操作\");\r\n\r\n // ========== MES 仓库管理-库存(1-040-703-000) ==========\r\n ErrorCode WM_MATERIAL_STOCK_NOT_EXISTS = new ErrorCode(1_040_703_000, \"库存记录不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_INSUFFICIENT = new ErrorCode(1_040_703_001, \"库存数量不足\");\r\n ErrorCode WM_TRANSACTION_TYPE_NOT_EXISTS = new ErrorCode(1_040_703_002, \"库存事务类型不存在\");\r\n ErrorCode WM_TRANSACTION_WAREHOUSE_FROZEN = new ErrorCode(1_040_703_003, \"仓库({})已被冻结\");\r\n ErrorCode WM_TRANSACTION_LOCATION_FROZEN = new ErrorCode(1_040_703_004, \"库区({})已被冻结\");\r\n ErrorCode WM_TRANSACTION_AREA_FROZEN = new ErrorCode(1_040_703_005, \"库位({})已被冻结\");\r\n ErrorCode WM_TRANSACTION_STOCK_FROZEN = new ErrorCode(1_040_703_006, \"存放于({}/{}/{})下的物料已被冻结\");\r\n ErrorCode WM_TRANSACTION_BATCH_REQUIRED = new ErrorCode(1_040_703_007, \"当前物料启用了批次管理,批次号不能为空\");\r\n ErrorCode WM_MATERIAL_STOCK_AREA_ITEM_MIXING_NOT_ALLOWED = new ErrorCode(1_040_703_008, \"库位({})不允许物料混放,请选择其他库位\");\r\n ErrorCode WM_MATERIAL_STOCK_AREA_BATCH_MIXING_NOT_ALLOWED = new ErrorCode(1_040_703_009, \"库位({})不允许批次混放,请选择其他库位\");\r\n ErrorCode WM_TRANSACTION_RELATED_NOT_EXISTS = new ErrorCode(1_040_703_010, \"关联的库存事务不存在\");\r\n ErrorCode WM_TRANSACTION_LIST_EMPTY = new ErrorCode(1_040_703_011, \"库存事务列表不能为空\");\r\n ErrorCode WM_TRANSACTION_BATCH_NOT_EXISTS = new ErrorCode(1_040_703_012, \"批次记录不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_REQUIRED = new ErrorCode(1_040_703_013, \"库存记录不能为空\");\r\n ErrorCode WM_MATERIAL_STOCK_SELECTION_MISMATCH = new ErrorCode(1_040_703_014, \"所选库存记录与单据信息不一致,请核对后重新操作\");\r\n ErrorCode WM_MATERIAL_STOCK_QUANTITY_INVALID = new ErrorCode(1_040_703_015, \"调整数量不能为空或零\");\r\n ErrorCode WM_MATERIAL_STOCK_FROZEN = new ErrorCode(1_040_703_016, \"库存记录已冻结,无法移库\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_703_017, \"导入的库存数据不能为空\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_FIELD_REQUIRED = new ErrorCode(1_040_703_018, \"{}不能为空\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_ITEM_NOT_EXISTS = new ErrorCode(1_040_703_019, \"物料编码({})不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_WAREHOUSE_NOT_EXISTS = new ErrorCode(1_040_703_020, \"仓库({})不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_LOCATION_NOT_EXISTS = new ErrorCode(1_040_703_021, \"库区({})不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_AREA_NOT_EXISTS = new ErrorCode(1_040_703_022, \"库位({})不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_BATCH_NOT_EXISTS = new ErrorCode(1_040_703_023, \"批次({})不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_VENDOR_NOT_EXISTS = new ErrorCode(1_040_703_024, \"供应商({})不存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_QUANTITY_INVALID = new ErrorCode(1_040_703_025, \"在库数量({})无效\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_EXISTS = new ErrorCode(1_040_703_026, \"库存记录已存在\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_OPERATION_INVALID = new ErrorCode(1_040_703_027, \"操作类型({})不支持\");\r\n ErrorCode WM_MATERIAL_STOCK_IMPORT_STOCK_NOT_EXISTS = new ErrorCode(1_040_703_028, \"库存记录不存在,无法执行该操作\");\r\n\r\n // ========== MES 仓库管理-到货通知单(1-040-704-000) ==========\r\n ErrorCode WM_ARRIVAL_NOTICE_NOT_EXISTS = new ErrorCode(1_040_704_000, \"到货通知单不存在\");\r\n ErrorCode WM_ARRIVAL_NOTICE_CODE_DUPLICATE = new ErrorCode(1_040_704_001, \"到货通知单编码已存在\");\r\n ErrorCode WM_ARRIVAL_NOTICE_STATUS_NOT_PREPARE = new ErrorCode(1_040_704_002, \"只有草稿状态才允许此操作\");\r\n ErrorCode WM_ARRIVAL_NOTICE_STATUS_NOT_PENDING_QC = new ErrorCode(1_040_704_003, \"只有待质检状态才允许审批\");\r\n ErrorCode WM_ARRIVAL_NOTICE_STATUS_NOT_PENDING_RECEIPT = new ErrorCode(1_040_704_004, \"只有待入库状态才允许完成\");\r\n ErrorCode WM_ARRIVAL_NOTICE_IQC_PENDING = new ErrorCode(1_040_704_005, \"存在待检验行,无法审批通过\");\r\n ErrorCode WM_ARRIVAL_NOTICE_NO_LINE = new ErrorCode(1_040_704_006, \"至少需要一条行项目\");\r\n ErrorCode WM_ARRIVAL_NOTICE_VENDOR_MISMATCH = new ErrorCode(1_040_704_007, \"到货通知单的供应商与当前单据不一致\");\r\n ErrorCode WM_ARRIVAL_NOTICE_ALREADY_EXISTS = new ErrorCode(1_040_704_008, \"该采购订单已生成到货通知单,不能重复生成\");\r\n ErrorCode WM_ARRIVAL_NOTICE_LINE_NOT_EXISTS = new ErrorCode(1_040_704_100, \"到货通知单行不存在\");\r\n ErrorCode WM_ARRIVAL_NOTICE_LINE_NOT_MATCH = new ErrorCode(1_040_704_101, \"到货通知单行不属于指定的到货通知单\");\r\n\r\n // ========== MES 仓库管理-采购入库单(1-040-705-000) ==========\r\n ErrorCode WM_ITEM_RECEIPT_NOT_EXISTS = new ErrorCode(1_040_705_000, \"采购入库单不存在\");\r\n ErrorCode WM_ITEM_RECEIPT_CODE_DUPLICATE = new ErrorCode(1_040_705_001, \"采购入库单编码已存在\");\r\n ErrorCode WM_ITEM_RECEIPT_STATUS_NOT_PREPARE = new ErrorCode(1_040_705_002, \"只有草稿或待上架状态才允许此操作\");\r\n ErrorCode WM_ITEM_RECEIPT_NO_LINE = new ErrorCode(1_040_705_003, \"至少需要一条行项目\");\r\n ErrorCode WM_ITEM_RECEIPT_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_705_004, \"明细上架总数与行入库数量不匹配\");\r\n ErrorCode WM_ITEM_RECEIPT_STATUS_ERROR = new ErrorCode(1_040_705_005, \"入库单状态不正确\");\r\n ErrorCode WM_ITEM_RECEIPT_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_705_006, \"已完成或已取消的入库单不允许取消\");\r\n ErrorCode WM_ITEM_RECEIPT_ALREADY_EXISTS = new ErrorCode(1_040_705_007, \"该到货通知单已生成入库单,不能重复生成\");\r\n ErrorCode WM_PURCHASE_ORDER_NOT_EXISTS = new ErrorCode(1_040_705_008, \"采购订单不存在\");\r\n ErrorCode WM_PURCHASE_ORDER_NO_ITEM = new ErrorCode(1_040_705_008, \"采购订单无明细数据\");\r\n ErrorCode WM_ITEM_RECEIPT_LINE_NOT_EXISTS = new ErrorCode(1_040_705_100, \"采购入库单行不存在\");\r\n ErrorCode WM_ITEM_RECEIPT_LINE_ARRIVAL_NOTICE_LINE_REQUIRED = new ErrorCode(1_040_705_101,\r\n \"入库单关联了到货通知单,必须选择到货通知单行\");\r\n ErrorCode WM_ITEM_RECEIPT_LINE_ARRIVAL_NOTICE_LINE_NOT_ALLOWED = new ErrorCode(1_040_705_102,\r\n \"入库单未关联到货通知单,不能选择到货通知单行\");\r\n ErrorCode WM_ITEM_RECEIPT_DETAIL_NOT_EXISTS = new ErrorCode(1_040_705_200, \"采购入库明细不存在\");\r\n ErrorCode WM_ITEM_RECEIPT_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_705_202, \"上架明细总数量不能超过行入库数量\");\r\n ErrorCode WM_ITEM_RECEIPT_BATCH_REQUIRED = new ErrorCode(1_040_705_203, \"物料【{}-{}】已开启批次管理,上架明细的批次号不能为空\");\r\n\r\n // ========== MES 仓库管理-领料申请单(1-040-706-000) ==========\r\n ErrorCode WM_MATERIAL_REQUEST_NOT_EXISTS = new ErrorCode(1_040_706_000, \"领料申请单不存在\");\r\n ErrorCode WM_MATERIAL_REQUEST_STATUS_INVALID = new ErrorCode(1_040_706_001, \"领料申请单状态不正确,无法执行该操作\");\r\n ErrorCode WM_MATERIAL_REQUEST_LINE_NOT_EXISTS = new ErrorCode(1_040_706_100, \"领料申请单行不存在\");\r\n\r\n // ========== MES 仓库管理-外协发料单(1-040-707-000) ==========\r\n ErrorCode WM_OUTSOURCE_ISSUE_NOT_EXISTS = new ErrorCode(1_040_707_000, \"外协发料单不存在\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_CODE_DUPLICATE = new ErrorCode(1_040_707_001, \"外协发料单编码已存在\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_STATUS_NOT_PREPARE = new ErrorCode(1_040_707_002, \"只有草稿状态才允许此操作\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_NO_LINE = new ErrorCode(1_040_707_003, \"至少需要一条发料行\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_QUANTITY_MISMATCH = new ErrorCode(1_040_707_004, \"发料单行数量与明细数量不一致\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_STATUS_NOT_APPROVING = new ErrorCode(1_040_707_005, \"只有待拣货状态才允许此操作\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_STATUS_NOT_APPROVED = new ErrorCode(1_040_707_006, \"只有待执行出库状态才允许此操作\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_707_007, \"已完成或已取消的发料单不允许取消\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_707_100, \"外协发料单行不存在\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_LINE_ITEM_NOT_IN_BOM = new ErrorCode(1_040_707_101, \"发料单行对应的物料不在当前工单的 BOM 列表中\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_707_200, \"外协发料单明细不存在\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_707_201, \"拣货明细不属于指定的外协发料单\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_707_202, \"拣货明细的物料与外协发料单行的物料不一致\");\r\n ErrorCode WM_OUTSOURCE_ISSUE_WORK_ORDER_TYPE_INVALID = new ErrorCode(1_040_707_008, \"工单类型不是外协(代工)类型\");\r\n\r\n // ========== MES 仓库管理-生产领料出库单(1-040-708-000) ==========\r\n ErrorCode WM_PRODUCT_ISSUE_NOT_EXISTS = new ErrorCode(1_040_708_000, \"生产领料出库单不存在\");\r\n ErrorCode WM_PRODUCT_ISSUE_STATUS_INVALID = new ErrorCode(1_040_708_001, \"生产领料出库单状态不正确,无法执行该操作\");\r\n ErrorCode WM_PRODUCT_ISSUE_NO_LINE = new ErrorCode(1_040_708_002, \"生产领料出库单至少需要一条行数据\");\r\n ErrorCode WM_PRODUCT_ISSUE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_708_003, \"领料出库单行数量与明细数量不一致\");\r\n ErrorCode WM_PRODUCT_ISSUE_WORKORDER_NOT_EXISTS = new ErrorCode(1_040_708_004, \"生产工单不存在\");\r\n ErrorCode WM_PRODUCT_ISSUE_WORKSTATION_NOT_EXISTS = new ErrorCode(1_040_708_005, \"工作站不存在\");\r\n ErrorCode WM_PRODUCT_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_708_006, \"生产领料出库单已完成或已取消,无法取消\");\r\n ErrorCode WM_PRODUCT_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_708_100, \"生产领料出库单行不存在\");\r\n ErrorCode WM_PRODUCT_ISSUE_LINE_ITEM_NOT_IN_BOM = new ErrorCode(1_040_708_101, \"当前物料不在生产工单的 BOM 物料清单中\");\r\n ErrorCode WM_PRODUCT_ISSUE_CODE_DUPLICATE = new ErrorCode(1_040_708_102, \"领料出库单编码已存在\");\r\n ErrorCode WM_PRODUCT_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_708_200, \"生产领料出库单明细不存在\");\r\n ErrorCode WM_PRODUCT_ISSUE_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_708_201, \"拣货明细的物料与领料单行的物料不一致\");\r\n ErrorCode WM_PRODUCT_ISSUE_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_708_202, \"拣货明细不属于指定的领料出库单\");\r\n ErrorCode WM_PRODUCT_ISSUE_NO_DETAIL = new ErrorCode(1_040_708_203, \"领料出库单没有拣货明细,无法执行领出\");\r\n ErrorCode WM_PRODUCT_ISSUE_TASK_NOT_EXISTS = new ErrorCode(1_040_708_204, \"生产任务不存在\");\r\n\r\n // ========== MES 仓库管理-生产入库单(1-040-709-000) ==========\r\n ErrorCode WM_PRODUCT_PRODUCE_NOT_EXISTS = new ErrorCode(1_040_709_000, \"生产入库单不存在\");\r\n ErrorCode WM_PRODUCT_PRODUCE_STATUS_INVALID = new ErrorCode(1_040_709_001, \"生产入库单状态不正确,无法执行该操作\");\r\n ErrorCode WM_PRODUCT_PRODUCE_NO_LINE = new ErrorCode(1_040_709_002, \"生产入库单至少需要一条行数据\");\r\n ErrorCode WM_PRODUCT_PRODUCE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_709_003, \"生产入库单行数量与明细数量不一致\");\r\n ErrorCode WM_PRODUCT_PRODUCE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_709_004, \"生产入库单已完成或已取消,无法取消\");\r\n ErrorCode WM_PRODUCT_PRODUCE_LINE_NOT_EXISTS = new ErrorCode(1_040_709_100, \"生产入库单行不存在\");\r\n ErrorCode WM_PRODUCT_PRODUCE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_709_200, \"生产入库单明细不存在\");\r\n\r\n // ========== MES 仓库管理-转移调拨(1-040-710-000) ==========\r\n ErrorCode WM_TRANSFER_NOT_EXISTS = new ErrorCode(1_040_710_000, \"转移单不存在\");\r\n ErrorCode WM_TRANSFER_NOT_EDITABLE = new ErrorCode(1_040_710_001, \"当前转移单状态不允许编辑\");\r\n ErrorCode WM_TRANSFER_CODE_DUPLICATE = new ErrorCode(1_040_710_002, \"转移单编号已存在\");\r\n ErrorCode WM_TRANSFER_NOT_DRAFT = new ErrorCode(1_040_710_003, \"只有草稿状态的转移单才可操作\");\r\n ErrorCode WM_TRANSFER_NOT_CONFIRMED = new ErrorCode(1_040_710_004, \"只有待确认状态的转移单才可执行确认\");\r\n ErrorCode WM_TRANSFER_NOT_APPROVING = new ErrorCode(1_040_710_005, \"只有待上架状态的转移单才可执行上架\");\r\n ErrorCode WM_TRANSFER_NOT_APPROVED = new ErrorCode(1_040_710_006, \"只有待执行状态的转移单才可完成\");\r\n ErrorCode WM_TRANSFER_ALREADY_FINISHED = new ErrorCode(1_040_710_007, \"转移单已完成或已取消,无法继续操作\");\r\n ErrorCode WM_TRANSFER_NO_LINE = new ErrorCode(1_040_710_008, \"转移单至少需要一条行数据\");\r\n ErrorCode WM_TRANSFER_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_710_009, \"转移单行数量与明细数量不一致\");\r\n ErrorCode WM_TRANSFER_LINE_NOT_EXISTS = new ErrorCode(1_040_710_100, \"转移单行不存在\");\r\n ErrorCode WM_TRANSFER_LINE_QUANTITY_EXCEED_STOCK = new ErrorCode(1_040_710_101, \"转移数量不能超过库存数量\");\r\n ErrorCode WM_TRANSFER_DETAIL_NOT_EXISTS = new ErrorCode(1_040_710_200, \"调拨明细不存在\");\r\n ErrorCode WM_TRANSFER_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_710_201, \"调拨明细总数量不能超过调拨单行数量\");\r\n ErrorCode WM_TRANSFER_DETAIL_MIXED_GOODS = new ErrorCode(1_040_710_202, \"同一目标仓位下已存在其他物料的明细,不允许混货\");\r\n\r\n // ========== MES 仓库管理-生产退料单(1-040-711-000) ==========\r\n ErrorCode WM_RETURN_ISSUE_NOT_EXISTS = new ErrorCode(1_040_710_000, \"生产退料单不存在\");\r\n ErrorCode WM_RETURN_ISSUE_STATUS_INVALID = new ErrorCode(1_040_710_001, \"生产退料单状态不正确,无法执行该操作\");\r\n ErrorCode WM_RETURN_ISSUE_NOT_PREPARE = new ErrorCode(1_040_710_002, \"只有草稿状态的退料单才可操作\");\r\n ErrorCode WM_RETURN_ISSUE_NOT_CONFIRMED = new ErrorCode(1_040_710_003, \"只有待检验状态的退料单才可提交\");\r\n ErrorCode WM_RETURN_ISSUE_NOT_APPROVING = new ErrorCode(1_040_710_004, \"只有待上架状态的退料单才可入库上架\");\r\n ErrorCode WM_RETURN_ISSUE_NOT_APPROVED = new ErrorCode(1_040_710_005, \"只有待执行退料状态的退料单才可完成\");\r\n ErrorCode WM_RETURN_ISSUE_NO_LINE = new ErrorCode(1_040_710_006, \"生产退料单至少需要一条行数据\");\r\n ErrorCode WM_RETURN_ISSUE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_710_007, \"退料单行数量与明细数量不一致\");\r\n ErrorCode WM_RETURN_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_710_008, \"生产退料单已完成或已取消,无法取消\");\r\n ErrorCode WM_RETURN_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_710_100, \"生产退料单行不存在\");\r\n ErrorCode WM_RETURN_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_710_200, \"生产退料单明细不存在\");\r\n ErrorCode WM_RETURN_ISSUE_DETAIL_QUANTITY_INVALID = new ErrorCode(1_040_710_201, \"退料明细数量必须大于0\");\r\n ErrorCode WM_RETURN_ISSUE_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_710_202, \"退料明细总数量不能超过退料单行数量\");\r\n ErrorCode WM_RETURN_ISSUE_CODE_DUPLICATE = new ErrorCode(1_040_710_203, \"退料单编码已存在\");\r\n ErrorCode WM_RETURN_ISSUE_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_710_204, \"退料明细不属于指定的退料单\");\r\n ErrorCode WM_RETURN_ISSUE_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_710_205, \"退料明细的物料与退料单行的物料不一致\");\r\n\r\n // ========== MES 仓库管理-供应商退货单(1-040-711-000) ==========\r\n ErrorCode WM_RETURN_VENDOR_NOT_EXISTS = new ErrorCode(1_040_711_000, \"供应商退货单不存在\");\r\n ErrorCode WM_RETURN_VENDOR_STATUS_INVALID = new ErrorCode(1_040_711_001, \"供应商退货单状态不正确,无法执行该操作\");\r\n ErrorCode WM_RETURN_VENDOR_NO_LINE = new ErrorCode(1_040_711_002, \"供应商退货单至少需要一条行数据\");\r\n ErrorCode WM_RETURN_VENDOR_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_711_003, \"供应商退货单行数量与明细数量不一致\");\r\n ErrorCode WM_RETURN_VENDOR_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_711_004, \"供应商退货单已完成或已取消,无法取消\");\r\n ErrorCode WM_RETURN_VENDOR_CODE_DUPLICATE = new ErrorCode(1_040_711_005, \"供应商退货单编号已存在\");\r\n ErrorCode WM_RETURN_VENDOR_NO_DETAIL = new ErrorCode(1_040_711_006, \"供应商退货单没有拣货明细,无法执行退货\");\r\n ErrorCode WM_RETURN_VENDOR_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_711_007, \"拣货明细的物料与退货单行的物料不一致\");\r\n ErrorCode WM_RETURN_VENDOR_LINE_NOT_EXISTS = new ErrorCode(1_040_711_100, \"供应商退货单行不存在\");\r\n ErrorCode WM_RETURN_VENDOR_DETAIL_NOT_EXISTS = new ErrorCode(1_040_711_200, \"供应商退货单明细不存在\");\r\n ErrorCode WM_RETURN_VENDOR_DETAIL_QUANTITY_INVALID = new ErrorCode(1_040_711_201, \"退货明细数量必须大于 0\");\r\n ErrorCode WM_RETURN_VENDOR_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_711_202, \"拣货明细不属于指定的供应商退货单\");\r\n ErrorCode WM_RETURN_VENDOR_PURCHASE_ORDER_REQUIRED = new ErrorCode(1_040_711_008, \"请先选择采购订单\");\r\n ErrorCode WM_RETURN_VENDOR_PURCHASE_ORDER_NO_ITEM = new ErrorCode(1_040_711_009, \"采购订单无明细数据,无法带入物料\");\r\n ErrorCode WM_RETURN_VENDOR_ITEM_NOT_IN_PURCHASE_ORDER = new ErrorCode(1_040_711_010, \"退货物料不在所关联采购订单内,无法添加\");\r\n\r\n // ========== MES 仓库管理-产品收货单(1-040-712-000) ==========\r\n ErrorCode WM_PRODUCT_RECPT_NOT_EXISTS = new ErrorCode(1_040_712_000, \"产品收货单不存在\");\r\n ErrorCode WM_PRODUCT_RECPT_CODE_DUPLICATE = new ErrorCode(1_040_712_001, \"产品收货单编码已存在\");\r\n ErrorCode WM_PRODUCT_RECPT_STATUS_NOT_PREPARE = new ErrorCode(1_040_712_002, \"只有草稿或待上架状态才允许此操作\");\r\n ErrorCode WM_PRODUCT_RECPT_NO_LINE = new ErrorCode(1_040_712_003, \"至少需要一条行项目\");\r\n ErrorCode WM_PRODUCT_RECPT_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_712_004, \"明细上架总数与行收货数量不匹配\");\r\n ErrorCode WM_PRODUCT_RECPT_STATUS_ERROR = new ErrorCode(1_040_712_005, \"收货单状态不正确\");\r\n ErrorCode WM_PRODUCT_RECPT_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_712_006, \"已完成或已取消的收货单不允许取消\");\r\n ErrorCode WM_PRODUCT_RECPT_NO_DETAIL = new ErrorCode(1_040_712_007, \"收货单没有上架明细,无法执行入库\");\r\n ErrorCode WM_PRODUCT_RECPT_LINE_NOT_EXISTS = new ErrorCode(1_040_712_100, \"产品收货单行不存在\");\r\n ErrorCode WM_PRODUCT_RECPT_DETAIL_NOT_EXISTS = new ErrorCode(1_040_712_200, \"产品收货明细不存在\");\r\n\r\n // ========== MES 仓库管理-外协入库单(1-040-713-000) ==========\r\n ErrorCode WM_OUTSOURCE_RECEIPT_NOT_EXISTS = new ErrorCode(1_040_713_000, \"外协入库单不存在\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_CODE_DUPLICATE = new ErrorCode(1_040_713_001, \"外协入库单编码已存在\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_STATUS_NOT_PREPARE = new ErrorCode(1_040_713_002, \"只有草稿状态才允许此操作\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_NO_LINE = new ErrorCode(1_040_713_003, \"至少需要一条行项目\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_713_004, \"明细上架总数与行入库数量不匹配\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_STATUS_ERROR = new ErrorCode(1_040_713_005, \"入库单状态不正确\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_713_006, \"已完成或已取消的入库单不允许取消\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_LINE_NOT_EXISTS = new ErrorCode(1_040_713_100, \"外协入库单行不存在\");\r\n ErrorCode WM_OUTSOURCE_RECEIPT_DETAIL_NOT_EXISTS = new ErrorCode(1_040_713_200, \"外协入库明细不存在\");\r\n\r\n // ========== MES 仓库管理-销售退货单(1-040-713-000) ==========\r\n ErrorCode WM_RETURN_SALES_NOT_EXISTS = new ErrorCode(1_040_713_000, \"销售退货单不存在\");\r\n ErrorCode WM_RETURN_SALES_CODE_DUPLICATE = new ErrorCode(1_040_713_001, \"销售退货单编码已存在\");\r\n ErrorCode WM_RETURN_SALES_STATUS_NOT_PREPARE = new ErrorCode(1_040_713_002, \"只有草稿状态才允许此操作\");\r\n ErrorCode WM_RETURN_SALES_STATUS_NOT_APPROVING = new ErrorCode(1_040_713_003, \"只有待执行状态才允许执行退货\");\r\n ErrorCode WM_RETURN_SALES_STATUS_NOT_APPROVED = new ErrorCode(1_040_713_004, \"只有待上架状态才允许执行上架\");\r\n ErrorCode WM_RETURN_SALES_NO_LINE = new ErrorCode(1_040_713_005, \"销售退货单至少需要一条行数据\");\r\n ErrorCode WM_RETURN_SALES_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_713_006, \"销售退货单行数量与明细数量不一致\");\r\n ErrorCode WM_RETURN_SALES_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_713_007, \"销售退货单已完成或已取消,无法取消\");\r\n ErrorCode WM_RETURN_SALES_LINE_NOT_EXISTS = new ErrorCode(1_040_713_100, \"销售退货单行不存在\");\r\n ErrorCode WM_RETURN_SALES_DETAIL_NOT_EXISTS = new ErrorCode(1_040_713_200, \"销售退货单明细不存在\");\r\n ErrorCode WM_RETURN_SALES_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_713_201, \"上架明细总数量不能超过退货行数量\");\r\n\r\n // ========== MES 仓库管理-盘点方案/任务/结果(1-040-714-100) ==========\r\n ErrorCode WM_STOCK_TAKING_PLAN_NOT_EXISTS = new ErrorCode(1_040_714_100, \"盘点方案不存在\");\r\n ErrorCode WM_STOCK_TAKING_PLAN_CODE_DUPLICATE = new ErrorCode(1_040_714_101, \"盘点方案编码已存在\");\r\n ErrorCode WM_STOCK_TAKING_PLAN_NOT_DISABLED = new ErrorCode(1_040_714_102, \"只有禁用状态的盘点方案才允许修改、删除或维护参数\");\r\n ErrorCode WM_STOCK_TAKING_PLAN_NOT_ENABLED = new ErrorCode(1_040_714_103, \"只有启用状态的盘点方案才允许生成任务\");\r\n ErrorCode WM_STOCK_TAKING_PLAN_PARAM_NOT_EXISTS = new ErrorCode(1_040_714_104, \"盘点方案参数不存在\");\r\n ErrorCode WM_STOCK_TAKING_PLAN_PARAM_EMPTY = new ErrorCode(1_040_714_105, \"盘点方案参数不能为空,请先配置盘点参数\");\r\n ErrorCode WM_STOCK_TAKING_PLAN_DYNAMIC_TIME_INVALID = new ErrorCode(1_040_714_106, \"动态盘点方案必须设置开始时间和结束时间,且结束时间必须晚于开始时间\");\r\n ErrorCode WM_STOCK_TAKING_TASK_NOT_EXISTS = new ErrorCode(1_040_714_110, \"盘点任务不存在\");\r\n ErrorCode WM_STOCK_TAKING_TASK_CODE_DUPLICATE = new ErrorCode(1_040_714_111, \"盘点任务编码已存在\");\r\n ErrorCode WM_STOCK_TAKING_TASK_NOT_PREPARE = new ErrorCode(1_040_714_112, \"只有草稿状态的盘点任务才允许此操作\");\r\n ErrorCode WM_STOCK_TAKING_TASK_NOT_APPROVING = new ErrorCode(1_040_714_113, \"只有盘点中状态的任务才允许此操作\");\r\n ErrorCode WM_STOCK_TAKING_TASK_CANNOT_CANCEL = new ErrorCode(1_040_714_114, \"已完成或已取消的盘点任务不允许取消\");\r\n ErrorCode WM_STOCK_TAKING_TASK_NO_STOCK = new ErrorCode(1_040_714_115, \"未找到符合条件的库存数据\");\r\n ErrorCode WM_STOCK_TAKING_TASK_NO_LINE = new ErrorCode(1_040_714_116, \"盘点任务至少需要一条任务行\");\r\n ErrorCode WM_STOCK_TAKING_TASK_LINE_NOT_EXISTS = new ErrorCode(1_040_714_117, \"盘点任务行不存在\");\r\n ErrorCode WM_STOCK_TAKING_TASK_DYNAMIC_TIME_REQUIRED = new ErrorCode(1_040_714_118, \"动态盘点必须选择开始时间和结束时间\");\r\n ErrorCode WM_STOCK_TAKING_TASK_RESULT_NOT_EXISTS = new ErrorCode(1_040_714_119, \"盘点结果不存在\");\r\n ErrorCode WM_STOCK_TAKING_TASK_LINE_ALREADY_TAKEN = new ErrorCode(1_040_714_120, \"该盘点清单行已有盘点记录,不能重复盘点\");\r\n ErrorCode WM_STOCK_TAKING_TASK_NOT_FINISHED = new ErrorCode(1_040_714_121, \"只有已完成状态的盘点任务才能处理差异\");\r\n\r\n // ========== MES 仓库管理-销售出库单(1-040-714-000) ==========\r\n ErrorCode WM_PRODUCT_SALES_NOT_EXISTS = new ErrorCode(1_040_714_000, \"销售出库单不存在\");\r\n ErrorCode WM_PRODUCT_SALES_CODE_DUPLICATE = new ErrorCode(1_040_714_001, \"销售出库单号已存在\");\r\n ErrorCode WM_PRODUCT_SALES_NOT_PREPARE = new ErrorCode(1_040_714_002, \"只有草稿状态才可操作\");\r\n ErrorCode WM_PRODUCT_SALES_LINES_EMPTY = new ErrorCode(1_040_714_003, \"销售出库单行不能为空\");\r\n ErrorCode WM_PRODUCT_SALES_CANNOT_SUBMIT = new ErrorCode(1_040_714_004, \"当前状态不允许提交\");\r\n ErrorCode WM_PRODUCT_SALES_CANNOT_PICK = new ErrorCode(1_040_714_005, \"当前状态不允许拣货\");\r\n ErrorCode WM_PRODUCT_SALES_CANNOT_SHIPPING = new ErrorCode(1_040_714_006, \"当前状态不允许填写运单\");\r\n ErrorCode WM_PRODUCT_SALES_CANNOT_FINISH = new ErrorCode(1_040_714_007, \"当前状态不允许执行出库\");\r\n ErrorCode WM_PRODUCT_SALES_CANNOT_CANCEL = new ErrorCode(1_040_714_008, \"当前状态不允许取消\");\r\n ErrorCode WM_PRODUCT_SALES_CANNOT_CONFIRM = new ErrorCode(1_040_714_009, \"当前状态不允许确认检验通过\");\r\n ErrorCode WM_PRODUCT_SALES_ALREADY_EXISTS = new ErrorCode(1_040_714_010, \"该发货通知单已生成销售出库单,不能重复生成\");\r\n ErrorCode WM_PRODUCT_SALES_DETAILS_EMPTY = new ErrorCode(1_040_714_020, \"拣货明细不能为空\");\r\n ErrorCode WM_PRODUCT_SALES_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_714_011, \"拣货数量与出库数量不匹配\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_NOT_EXISTS = new ErrorCode(1_040_714_011, \"销售出库单行不存在\");\r\n ErrorCode WM_PRODUCT_SALES_DETAIL_NOT_EXISTS = new ErrorCode(1_040_714_012, \"销售出库明细不存在\");\r\n ErrorCode WM_PRODUCT_SALES_STOCK_INSUFFICIENT = new ErrorCode(1_040_714_013, \"库存不足,无法拣货\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_QUANTITY_INVALID = new ErrorCode(1_040_714_014, \"出库数量必须大于 0\");\r\n ErrorCode WM_PRODUCT_SALES_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_714_015, \"拣货明细不属于指定的销售出库单\");\r\n ErrorCode WM_PRODUCT_SALES_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_714_016, \"拣货明细的物料与销售出库单行的物料不一致\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_SALES_NOTICE_LINE_REQUIRED = new ErrorCode(1_040_714_017,\r\n \"出库单关联了发货通知单,必须选择发货通知单行\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_SALES_NOTICE_LINE_NOT_ALLOWED = new ErrorCode(1_040_714_018,\r\n \"出库单未关联发货通知单,不能选择发货通知单行\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_NOTICE_LINE_ITEM_MISMATCH = new ErrorCode(1_040_714_030,\r\n \"出库行物料与发货通知单行物料不一致\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_NOTICE_LINE_QUANTITY_MISMATCH = new ErrorCode(1_040_714_031,\r\n \"出库行数量与发货通知单行数量不一致\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_NOTICE_LINE_BATCH_MISMATCH = new ErrorCode(1_040_714_032,\r\n \"出库行批次号与发货通知单行批次号不一致\");\r\n ErrorCode WM_PRODUCT_SALES_LINE_NOTICE_LINE_OQC_MISMATCH = new ErrorCode(1_040_714_033,\r\n \"出库行 OQC 检验标识与发货通知单行不一致\");\r\n\r\n // ========== MES 仓库管理-杂项出库单(1-040-715-000) ==========\r\n ErrorCode WM_MISC_ISSUE_NOT_EXISTS = new ErrorCode(1_040_715_000, \"杂项出库单不存在\");\r\n ErrorCode WM_MISC_ISSUE_CODE_DUPLICATE = new ErrorCode(1_040_715_001, \"杂项出库单编码已存在\");\r\n ErrorCode WM_MISC_ISSUE_STATUS_INVALID = new ErrorCode(1_040_715_002, \"杂项出库单状态不正确,无法执行该操作\");\r\n ErrorCode WM_MISC_ISSUE_NO_LINE = new ErrorCode(1_040_715_003, \"杂项出库单至少需要一条行数据\");\r\n ErrorCode WM_MISC_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_715_004, \"杂项出库单已完成或已取消,无法取消\");\r\n ErrorCode WM_MISC_ISSUE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_715_005, \"杂项出库单行数量与明细数量不一致\");\r\n ErrorCode WM_MISC_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_715_100, \"杂项出库单行不存在\");\r\n ErrorCode WM_MISC_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_715_200, \"杂项出库单明细不存在\");\r\n\r\n // ========== MES 仓库管理-杂项入库单(1-040-716-000) ==========\r\n ErrorCode WM_MISC_RECEIPT_NOT_EXISTS = new ErrorCode(1_040_716_000, \"杂项入库单不存在\");\r\n ErrorCode WM_MISC_RECEIPT_CODE_DUPLICATE = new ErrorCode(1_040_716_001, \"杂项入库单编码已存在\");\r\n ErrorCode WM_MISC_RECEIPT_STATUS_NOT_PREPARE = new ErrorCode(1_040_716_002, \"只有草稿状态才允许此操作\");\r\n ErrorCode WM_MISC_RECEIPT_STATUS_NOT_APPROVED = new ErrorCode(1_040_716_003, \"只有已审批状态才允许执行入库\");\r\n ErrorCode WM_MISC_RECEIPT_NO_LINE = new ErrorCode(1_040_716_004, \"至少需要一条行项目\");\r\n ErrorCode WM_MISC_RECEIPT_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_716_005, \"已完成或已取消的入库单不允许取消\");\r\n ErrorCode WM_MISC_RECEIPT_LINE_NOT_EXISTS = new ErrorCode(1_040_716_100, \"杂项入库单行不存在\");\r\n ErrorCode WM_MISC_RECEIPT_WAREHOUSE_REQUIRED = new ErrorCode(1_040_716_101, \"仓库不能为空\");\r\n ErrorCode WM_MISC_RECEIPT_QUANTITY_INVALID = new ErrorCode(1_040_716_102, \"入库数量必须大于 0\");\r\n ErrorCode WM_MISC_RECEIPT_DETAIL_NOT_EXISTS = new ErrorCode(1_040_716_200, \"杂项入库单明细不存在\");\r\n\r\n // ========== MES 仓库管理-发货通知单(1-040-720-000) ==========\r\n ErrorCode WM_SALES_NOTICE_NOT_EXISTS = new ErrorCode(1_040_720_000, \"发货通知单不存在\");\r\n ErrorCode WM_SALES_NOTICE_CODE_DUPLICATE = new ErrorCode(1_040_720_001, \"通知单编号重复\");\r\n ErrorCode WM_SALES_NOTICE_STATUS_NOT_ALLOW_DELETE = new ErrorCode(1_040_720_002, \"单据状态不允许删除\");\r\n ErrorCode WM_SALES_NOTICE_STATUS_NOT_ALLOW_UPDATE = new ErrorCode(1_040_720_003, \"单据状态不允许修改\");\r\n ErrorCode WM_SALES_NOTICE_STATUS_NOT_APPROVED = new ErrorCode(1_040_720_004, \"发货通知单不是待出库状态\");\r\n ErrorCode WM_SALES_NOTICE_CLIENT_MISMATCH = new ErrorCode(1_040_720_005, \"发货通知单的客户与当前单据不一致\");\r\n ErrorCode WM_SALES_NOTICE_LINE_NOT_EXISTS = new ErrorCode(1_040_720_010, \"发货通知单行不存在\");\r\n ErrorCode WM_SALES_NOTICE_LINE_EMPTY = new ErrorCode(1_040_720_011, \"发货通知单行为空,不能提交\");\r\n ErrorCode WM_SALES_NOTICE_LINE_NOT_MATCH = new ErrorCode(1_040_720_012, \"发货通知单行不属于指定的发货通知单\");\r\n ErrorCode WM_SALES_NOTICE_SALE_ORDER_NOT_EXISTS = new ErrorCode(1_040_720_013, \"销售订单不存在\");\r\n ErrorCode WM_SALES_NOTICE_SALE_ORDER_ITEM_EMPTY = new ErrorCode(1_040_720_014, \"销售订单明细为空\");\r\n ErrorCode WM_SALES_NOTICE_ALREADY_EXISTS = new ErrorCode(1_040_720_015, \"该销售订单已生成发货通知单,不能重复生成\");\r\n\r\n // ========== MES 仓库管理-条码配置(1-040-730-000) ==========\r\n ErrorCode WM_BARCODE_CONFIG_NOT_EXISTS = new ErrorCode(1_040_730_000, \"条码配置不存在\");\r\n ErrorCode WM_BARCODE_CONFIG_BIZ_TYPE_DUPLICATE = new ErrorCode(1_040_730_001, \"该业务类型的条码配置已存在\");\r\n ErrorCode WM_BARCODE_CONFIG_HAS_BARCODE = new ErrorCode(1_040_730_002, \"该条码配置已被条码记录关联,无法删除\");\r\n\r\n // ========== MES 仓库管理-条码清单(1-040-731-000) ==========\r\n ErrorCode WM_BARCODE_NOT_EXISTS = new ErrorCode(1_040_731_000, \"条码不存在\");\r\n ErrorCode WM_BARCODE_ALREADY_EXISTS = new ErrorCode(1_040_731_001, \"该业务对象的条码已存在\");\r\n ErrorCode WM_BARCODE_CONTENT_DUPLICATE = new ErrorCode(1_040_731_002, \"条码内容已存在\");\r\n ErrorCode BARCODE_BIZ_TYPE_NOT_EXISTS = new ErrorCode(1_040_731_003, \"业务类型不能为空\");\r\n ErrorCode BARCODE_BIZ_CODE_NOT_EXISTS = new ErrorCode(1_040_731_004, \"业务编码不能为空\");\r\n ErrorCode BARCODE_CONFIG_NOT_EXISTS = new ErrorCode(1_040_731_005, \"条码配置不存在\");\r\n\r\n // ========== MES 仓库管理-装箱单(1-040-740-000) ==========\r\n ErrorCode WM_PACKAGE_NOT_EXISTS = new ErrorCode(1_040_740_000, \"装箱单不存在\");\r\n ErrorCode WM_PACKAGE_CODE_DUPLICATE = new ErrorCode(1_040_740_001, \"装箱单编码已存在\");\r\n ErrorCode WM_PACKAGE_STATUS_NOT_PREPARE = new ErrorCode(1_040_740_002, \"只有草稿状态才允许此操作\");\r\n ErrorCode WM_PACKAGE_PARENT_NOT_EXISTS = new ErrorCode(1_040_740_003, \"父箱不存在\");\r\n ErrorCode WM_PACKAGE_PARENT_SELF = new ErrorCode(1_040_740_004, \"不能选择自己作为父箱\");\r\n ErrorCode WM_PACKAGE_CHILD_HAS_PARENT = new ErrorCode(1_040_740_005, \"该装箱单已有父箱,不能重复添加\");\r\n ErrorCode WM_PACKAGE_PARENT_IS_CHILD = new ErrorCode(1_040_740_006, \"不能选择子箱的后代作为父箱,会形成环路\");\r\n ErrorCode WM_PACKAGE_CHILD_NOT_FINISHED = new ErrorCode(1_040_740_007, \"子箱必须是已完成状态才能添加\");\r\n ErrorCode WM_PACKAGE_HAS_CHILDREN = new ErrorCode(1_040_740_008, \"存在子箱,不允许删除\");\r\n ErrorCode WM_PACKAGE_LINE_NOT_EXISTS = new ErrorCode(1_040_740_100, \"装箱明细不存在\");\r\n\r\n // ========== MES 产品设计-设计项目(1-040-800-000) ==========\r\n ErrorCode PD_PROJECT_NOT_EXISTS = new ErrorCode(1_040_800_000, \"设计项目不存在\");\r\n ErrorCode PD_PROJECT_NOT_INITIATE = new ErrorCode(1_040_800_001, \"设计项目不是待发布状态,不允许修改或删除\");\r\n ErrorCode PD_PROJECT_CODE_DUPLICATE = new ErrorCode(1_040_800_002, \"设计项目任务编码已存在\");\r\n ErrorCode PD_PROJECT_NOT_INITIATE_FOR_PUBLISH = new ErrorCode(1_040_800_003, \"只有待发布状态的设计项目才能发布\");\r\n ErrorCode PD_PROJECT_NOT_PUBLISH_FOR_UPLOAD = new ErrorCode(1_040_800_004, \"只有待上传状态的设计项目才能上传资料\");\r\n ErrorCode PD_PROJECT_NOT_UPLOAD_FOR_AUDIT = new ErrorCode(1_040_800_005, \"只有待审核状态的设计项目才能审核\");\r\n ErrorCode PD_PROJECT_NOT_AUDIT_FOR_ARCHIVE = new ErrorCode(1_040_800_006, \"只有待归档状态的设计项目才能归档\");\r\n ErrorCode PD_PROJECT_AUDIT_NOT_FINISHED = new ErrorCode(1_040_800_007, \"该项目下存在未审核的资料,请先完成所有资料审核\");\r\n ErrorCode PD_PROJECT_NOT_UPLOAD_FOR_APPROVAL = new ErrorCode(1_040_800_008, \"只有待审核状态的设计项目才能提交审批\");\r\n ErrorCode PD_PROJECT_NOT_APPROVING = new ErrorCode(1_040_800_009, \"设计项目不处于审批中状态\");\r\n ErrorCode PD_PROJECT_BPM_CATEGORY_NOT_EXISTS = new ErrorCode(1_040_800_010, \"设计项目审批分类不存在,请先配置 BPM 审批流程\");\r\n\r\n // ========== MES 产品设计-资料子表(1-040-801-000) ==========\r\n ErrorCode PD_DOCUMENT_NOT_EXISTS = new ErrorCode(1_040_801_000, \"设计资料不存在\");\r\n\r\n // ========== MES 产品设计-资料审核(1-040-802-000) ==========\r\n ErrorCode PD_DOCUMENT_AUDIT_NOT_EXISTS = new ErrorCode(1_040_802_000, \"资料审核记录不存在\");\r\n\r\n // ========== MES 产品设计-归档台账(1-040-803-000) ==========\r\n ErrorCode PD_ARCHIVE_NOT_EXISTS = new ErrorCode(1_040_803_000, \"归档台账不存在\");\r\n ErrorCode PD_ARCHIVE_CODE_DUPLICATE = new ErrorCode(1_040_803_001, \"归档编号已存在\");\r\n\r\n // ========== MES 产品设计-工艺参数(1-040-804-000) ==========\r\n ErrorCode PD_PROCESS_PARAM_NOT_EXISTS = new ErrorCode(1_040_804_000, \"工艺参数不存在\");\r\n ErrorCode PD_PROCESS_PARAM_CODE_DUPLICATE = new ErrorCode(1_040_804_001, \"工艺参数编码已存在\");\r\n\r\n // ========== MES 产品设计-工艺参数模板(1-040-805-000) ==========\r\n ErrorCode PD_PROCESS_PARAM_TEMPLATE_NOT_EXISTS = new ErrorCode(1_040_805_000, \"工艺参数模板不存在\");\r\n ErrorCode PD_PROCESS_PARAM_TEMPLATE_CODE_DUPLICATE = new ErrorCode(1_040_805_001, \"工艺参数模板编码已存在\");\r\n\r\n // ========== MES 仓储物流-审批配置(1-040-900-000) ==========\r\n ErrorCode WMS_APPROVAL_CONFIG_NOT_EXISTS = new ErrorCode(1_040_900_000, \"仓库审批配置不存在\");\r\n ErrorCode WMS_APPROVAL_ORDER_NOT_EXISTS = new ErrorCode(1_040_900_001, \"审批单据不存在\");\r\n ErrorCode WMS_APPROVAL_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_040_900_002, \"审批流程定义不存在\");\r\n ErrorCode WMS_APPROVAL_ORDER_TYPE_NOT_SUPPORTED = new ErrorCode(1_040_900_003, \"不支持的单据类型\");\r\n ErrorCode WMS_APPROVAL_STATUS_INVALID = new ErrorCode(1_040_900_004, \"单据状态不正确,无法提交审批\");\r\n ErrorCode WMS_APPROVAL_ALREADY_SUBMITTED = new ErrorCode(1_040_900_005, \"单据已提交审批,请勿重复提交\");\r\n\r\n}\r\n" }, { "file": "yudao-module-mes\\src\\main\\java\\cn\\iocoder\\yudao\\module\\mes\\enums\\md\\autocode\\MesMdAutoCodeRuleCodeEnum.java", "removed": 1, "before": "package cn.iocoder.yudao.module.mes.enums.md.autocode;\r\n\r\nimport lombok.AllArgsConstructor;\r\nimport lombok.Getter;\r\n\r\n/**\r\n * MES 编码规则代码枚举\r\n *\r\n * @author 超级管理员\r\n */\r\n@Getter\r\n@AllArgsConstructor\r\npublic enum MesMdAutoCodeRuleCodeEnum {\r\n\r\n MD_ITEM_TYPE_CODE(\"MD_ITEM_TYPE_CODE\", \"物料分类编码\"),\r\n MD_ITEM_CODE(\"MD_ITEM_CODE\", \"物料编码\"),\r\n MD_VENDOR_CODE(\"MD_VENDOR_CODE\", \"供应商编码\"),\r\n MD_CLIENT_CODE(\"MD_CLIENT_CODE\", \"客户编码\"),\r\n MD_WORKSTATION_CODE(\"MD_WORKSTATION_CODE\", \"工作站编码\"),\r\n MD_WORKSHOP_CODE(\"MD_WORKSHOP_CODE\", \"车间编码\"),\r\n TM_TOOL_TYPE_CODE(\"TM_TOOL_TYPE_CODE\", \"工具类型编码\"),\r\n WM_ARRIVAL_NOTICE_CODE(\"WM_ARRIVAL_NOTICE_CODE\", \"到货通知单编码\"),\r\n WM_ITEM_RECEIPT_CODE(\"WM_ITEM_RECEIPT_CODE\", \"采购入库单编码\"),\r\n WM_RETURN_VENDOR_CODE(\"WM_RETURN_VENDOR_CODE\", \"采购退货单编码\"),\r\n WM_RETURN_ISSUE_CODE(\"WM_RETURN_ISSUE_CODE\", \"生产退料单编码\"),\r\n WM_SN_CODE(\"WM_SN_CODE\", \"SN 码\"),\r\n WM_PACKAGE_CODE(\"WM_PACKAGE_CODE\", \"装箱单编码\"),\r\n WM_BATCH_CODE(\"WM_BATCH_CODE\", \"批次编码\"),\r\n PRO_TASK_CODE(\"PRO_TASK_CODE\", \"生产任务编码\"),\r\n QC_IQC_CODE(\"QC_IQC_CODE\", \"来料检验单编码\"),\r\n QC_IPQC_CODE(\"QC_IPQC_CODE\", \"过程检验单编码\"),\r\n QC_OQC_CODE(\"QC_OQC_CODE\", \"出货检验单编码\"),\r\n QC_RQC_CODE(\"QC_RQC_CODE\", \"退货检验单编码\"),\r\n WM_WAREHOUSE_CODE(\"WM_WAREHOUSE_CODE\", \"仓库编码\"),\r\n WM_LOCATION_CODE(\"WM_LOCATION_CODE\", \"库区编码\"),\r\n WM_AREA_CODE(\"WM_AREA_CODE\", \"库位编码\"),\r\n WM_PRODUCT_SALES_CODE(\"WM_PRODUCT_SALES_CODE\", \"销售出库单编码\"),\r\n WM_MISC_RECEIPT_CODE(\"WM_MISC_RECEIPT_CODE\", \"杂项入库单编码\"),\r\n WM_STOCK_TAKING_PLAN_CODE(\"WM_STOCK_TAKING_PLAN_CODE\", \"盘点方案编码\"),\r\n WM_STOCK_TAKING_CODE(\"WM_STOCK_TAKING_CODE\", \"盘点任务编码\"),\r\n TRANSFER_CODE(\"TRANSFER_CODE\", \"转移调拨单编码\"),\r\n WM_OUTSOURCE_ISSUE_CODE(\"WM_OUTSOURCE_ISSUE_CODE\", \"外协发料单编码\"),\r\n DV_MACHINERY_CODE(\"DV_MACHINERY_CODE\", \"设备编码\"),\r\n DV_MACHINERY_TYPE_CODE(\"DV_MACHINERY_TYPE_CODE\", \"设备类型编码\"),\r\n DV_SUBJECT_CODE(\"DV_SUBJECT_CODE\", \"点检保养项目编码\"),\r\n DV_REPAIR_CODE(\"DV_REPAIR_CODE\", \"维修单编码\"),\r\n WM_SALES_NOTICE_CODE(\"WM_SALES_NOTICE_CODE\", \"发货通知单编码\"),\r\n WM_RETURN_SALES_CODE(\"WM_RETURN_SALES_CODE\", \"销售退货单编码\"),\r\n WM_MISC_ISSUE_CODE(\"WM_MISC_ISSUE_CODE\", \"杂项出库单编码\"),\r\n PRO_ROUTE_CODE(\"PRO_ROUTE_CODE\", \"工艺路线编码\"),\r\n PRO_FEEDBACK_CODE(\"PRO_FEEDBACK_CODE\", \"生产报工单编码\"),\r\n PRO_WORK_ORDER_CODE(\"PRO_WORK_ORDER_CODE\", \"生产工单编码\"),\r\n QC_DEFECT_CODE(\"QC_DEFECT_CODE\", \"缺陷类型编码\"),\r\n QC_INDICATOR_RESULT_CODE(\"QC_INDICATOR_RESULT_CODE\", \"样品检验结果编码\"),\r\n WM_OUTSOURCE_RECEIPT_CODE(\"WM_OUTSOURCE_RECEIPT_CODE\", \"外协入库单编码\"),\r\n PD_DOCUMENT_AUDIT_CODE(\"PD_DOCUMENT_AUDIT_CODE\", \"资料审核单编码\"),\r\n PD_ARCHIVE_CODE(\"PD_ARCHIVE_CODE\", \"归档台账编码\"),\r\n PD_PROCESS_PARAM_CODE(\"PD_PROCESS_PARAM_CODE\", \"工艺参数编码\"),\r\n PD_PROCESS_PARAM_TEMPLATE_CODE(\"PD_PROCESS_PARAM_TEMPLATE_CODE\", \"工艺参数模板编码\");\r\n\r\n /**\r\n * 规则代码\r\n */\r\n private final String code;\r\n /**\r\n * 规则名称\r\n */\r\n private final String name;\r\n\r\n}\r\n", "after": "package cn.iocoder.yudao.module.mes.enums.md.autocode;\r\n\r\nimport lombok.AllArgsConstructor;\r\nimport lombok.Getter;\r\n\r\n/**\r\n * MES 编码规则代码枚举\r\n *\r\n * @author 超级管理员\r\n */\r\n@Getter\r\n@AllArgsConstructor\r\npublic enum MesMdAutoCodeRuleCodeEnum {\r\n\r\n MD_ITEM_TYPE_CODE(\"MD_ITEM_TYPE_CODE\", \"物料分类编码\"),\r\n MD_ITEM_CODE(\"MD_ITEM_CODE\", \"物料编码\"),\r\n MD_VENDOR_CODE(\"MD_VENDOR_CODE\", \"供应商编码\"),\r\n MD_WORKSTATION_CODE(\"MD_WORKSTATION_CODE\", \"工作站编码\"),\r\n MD_WORKSHOP_CODE(\"MD_WORKSHOP_CODE\", \"车间编码\"),\r\n TM_TOOL_TYPE_CODE(\"TM_TOOL_TYPE_CODE\", \"工具类型编码\"),\r\n WM_ARRIVAL_NOTICE_CODE(\"WM_ARRIVAL_NOTICE_CODE\", \"到货通知单编码\"),\r\n WM_ITEM_RECEIPT_CODE(\"WM_ITEM_RECEIPT_CODE\", \"采购入库单编码\"),\r\n WM_RETURN_VENDOR_CODE(\"WM_RETURN_VENDOR_CODE\", \"采购退货单编码\"),\r\n WM_RETURN_ISSUE_CODE(\"WM_RETURN_ISSUE_CODE\", \"生产退料单编码\"),\r\n WM_SN_CODE(\"WM_SN_CODE\", \"SN 码\"),\r\n WM_PACKAGE_CODE(\"WM_PACKAGE_CODE\", \"装箱单编码\"),\r\n WM_BATCH_CODE(\"WM_BATCH_CODE\", \"批次编码\"),\r\n PRO_TASK_CODE(\"PRO_TASK_CODE\", \"生产任务编码\"),\r\n QC_IQC_CODE(\"QC_IQC_CODE\", \"来料检验单编码\"),\r\n QC_IPQC_CODE(\"QC_IPQC_CODE\", \"过程检验单编码\"),\r\n QC_OQC_CODE(\"QC_OQC_CODE\", \"出货检验单编码\"),\r\n QC_RQC_CODE(\"QC_RQC_CODE\", \"退货检验单编码\"),\r\n WM_WAREHOUSE_CODE(\"WM_WAREHOUSE_CODE\", \"仓库编码\"),\r\n WM_LOCATION_CODE(\"WM_LOCATION_CODE\", \"库区编码\"),\r\n WM_AREA_CODE(\"WM_AREA_CODE\", \"库位编码\"),\r\n WM_PRODUCT_SALES_CODE(\"WM_PRODUCT_SALES_CODE\", \"销售出库单编码\"),\r\n WM_MISC_RECEIPT_CODE(\"WM_MISC_RECEIPT_CODE\", \"杂项入库单编码\"),\r\n WM_STOCK_TAKING_PLAN_CODE(\"WM_STOCK_TAKING_PLAN_CODE\", \"盘点方案编码\"),\r\n WM_STOCK_TAKING_CODE(\"WM_STOCK_TAKING_CODE\", \"盘点任务编码\"),\r\n TRANSFER_CODE(\"TRANSFER_CODE\", \"转移调拨单编码\"),\r\n WM_OUTSOURCE_ISSUE_CODE(\"WM_OUTSOURCE_ISSUE_CODE\", \"外协发料单编码\"),\r\n DV_MACHINERY_CODE(\"DV_MACHINERY_CODE\", \"设备编码\"),\r\n DV_MACHINERY_TYPE_CODE(\"DV_MACHINERY_TYPE_CODE\", \"设备类型编码\"),\r\n DV_SUBJECT_CODE(\"DV_SUBJECT_CODE\", \"点检保养项目编码\"),\r\n DV_REPAIR_CODE(\"DV_REPAIR_CODE\", \"维修单编码\"),\r\n WM_SALES_NOTICE_CODE(\"WM_SALES_NOTICE_CODE\", \"发货通知单编码\"),\r\n WM_RETURN_SALES_CODE(\"WM_RETURN_SALES_CODE\", \"销售退货单编码\"),\r\n WM_MISC_ISSUE_CODE(\"WM_MISC_ISSUE_CODE\", \"杂项出库单编码\"),\r\n PRO_ROUTE_CODE(\"PRO_ROUTE_CODE\", \"工艺路线编码\"),\r\n PRO_FEEDBACK_CODE(\"PRO_FEEDBACK_CODE\", \"生产报工单编码\"),\r\n PRO_WORK_ORDER_CODE(\"PRO_WORK_ORDER_CODE\", \"生产工单编码\"),\r\n QC_DEFECT_CODE(\"QC_DEFECT_CODE\", \"缺陷类型编码\"),\r\n QC_INDICATOR_RESULT_CODE(\"QC_INDICATOR_RESULT_CODE\", \"样品检验结果编码\"),\r\n WM_OUTSOURCE_RECEIPT_CODE(\"WM_OUTSOURCE_RECEIPT_CODE\", \"外协入库单编码\"),\r\n PD_DOCUMENT_AUDIT_CODE(\"PD_DOCUMENT_AUDIT_CODE\", \"资料审核单编码\"),\r\n PD_ARCHIVE_CODE(\"PD_ARCHIVE_CODE\", \"归档台账编码\"),\r\n PD_PROCESS_PARAM_CODE(\"PD_PROCESS_PARAM_CODE\", \"工艺参数编码\"),\r\n PD_PROCESS_PARAM_TEMPLATE_CODE(\"PD_PROCESS_PARAM_TEMPLATE_CODE\", \"工艺参数模板编码\");\r\n\r\n /**\r\n * 规则代码\r\n */\r\n private final String code;\r\n /**\r\n * 规则名称\r\n */\r\n private final String name;\r\n\r\n}\r\n" }, { "file": "yudao-module-mes\\src\\main\\java\\cn\\iocoder\\yudao\\module\\mes\\service\\pro\\workorder\\dto\\MesProWorkOrderDTO.java", "removed": 1, "before": "package cn.iocoder.yudao.module.mes.service.pro.workorder.dto;\r\n\r\nimport cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;\r\nimport lombok.Data;\r\nimport lombok.EqualsAndHashCode;\r\n\r\nimport java.util.List;\r\n\r\n/**\r\n * 生产工单 DTO (携带关联名称与进度状态)\r\n */\r\n@Data\r\n@EqualsAndHashCode(callSuper = true)\r\npublic class MesProWorkOrderDTO extends MesProWorkOrderDO {\r\n\r\n /**\r\n * 产品名称\r\n */\r\n private String productName;\r\n /**\r\n * 产品编码\r\n */\r\n private String productCode;\r\n /**\r\n * 规格型号\r\n */\r\n private String productSpecification;\r\n /**\r\n * 单位名称\r\n */\r\n private String unitMeasureName;\r\n /**\r\n * 客户编码\r\n */\r\n private String clientCode;\r\n /**\r\n * 客户名称\r\n */\r\n private String clientName;\r\n /**\r\n * 供应商编码\r\n */\r\n private String vendorCode;\r\n /**\r\n * 供应商名称\r\n */\r\n private String vendorName;\r\n /**\r\n * 父工单编码\r\n */\r\n private String parentCode;\r\n /**\r\n * 工序进度列表\r\n */\r\n private List processProgressList;\r\n /**\r\n * 生产状态 (0: 待生产, 1: 生产中, 2: 生产完成)\r\n */\r\n private Integer productionStatus;\r\n}\r\n", "after": "package cn.iocoder.yudao.module.mes.service.pro.workorder.dto;\r\n\r\nimport cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;\r\nimport lombok.Data;\r\nimport lombok.EqualsAndHashCode;\r\n\r\nimport java.util.List;\r\n\r\n/**\r\n * 生产工单 DTO (携带关联名称与进度状态)\r\n */\r\n@Data\r\n@EqualsAndHashCode(callSuper = true)\r\npublic class MesProWorkOrderDTO extends MesProWorkOrderDO {\r\n\r\n /**\r\n * 产品名称\r\n */\r\n private String productName;\r\n /**\r\n * 产品编码\r\n */\r\n private String productCode;\r\n /**\r\n * 规格型号\r\n */\r\n private String productSpecification;\r\n /**\r\n * 单位名称\r\n */\r\n private String unitMeasureName;\r\n /**\r\n * 客户名称\r\n */\r\n private String clientName;\r\n /**\r\n * 供应商编码\r\n */\r\n private String vendorCode;\r\n /**\r\n * 供应商名称\r\n */\r\n private String vendorName;\r\n /**\r\n * 父工单编码\r\n */\r\n private String parentCode;\r\n /**\r\n * 工序进度列表\r\n */\r\n private List processProgressList;\r\n /**\r\n * 生产状态 (0: 待生产, 1: 生产中, 2: 生产完成)\r\n */\r\n private Integer productionStatus;\r\n}\r\n" } ]