云
4 小时以前 e09f103259fa602382bb5ce2a03361a6397af46a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
[
  {
    "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<string, string>; // 导入失败的客户编码及原因\n  }\n}\n\n/** 查询客户分页 */\nexport function getClientPage(params: PageParam) {\n  return requestClient.get<PageResult<MesMdClientApi.Client>>(\n    '/mes/md-client/page',\n    { params },\n  );\n}\n\n/** 查询客户详情 */\nexport function getClient(id: number) {\n  return requestClient.get<MesMdClientApi.Client>(\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<MesMdClientApi.ClientImportRespVO>(\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<string, string>; // 导入失败的客户名称及原因\n  }\n}\n\n/** 查询客户分页 */\nexport function getClientPage(params: PageParam) {\n  return requestClient.get<PageResult<MesMdClientApi.Client>>(\n    '/mes/md-client/page',\n    { params },\n  );\n}\n\n/** 查询客户详情 */\nexport function getClient(id: number) {\n  return requestClient.get<MesMdClientApi.Client>(\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<MesMdClientApi.ClientImportRespVO>(\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<PageResult<MesProMpsApi.Mps>>('/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<MesProMpsApi.Mps>(`/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<PageResult<MesProMpsApi.Mps>>('/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<MesProMpsApi.Mps>(`/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<PageResult<MesProWorkOrderApi.WorkOrder>>(\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<PageResult<MesProWorkOrderApi.WorkOrder>>(\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<MesProWorkOrderApi.WorkOrder>(\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<number>('/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<WorkOrderProgress>(\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<boolean>(\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<Array<{ id: string; name: string; key: string }>>(\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<PageResult<MesProWorkOrderApi.WorkOrder>>(\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<PageResult<MesProWorkOrderApi.WorkOrder>>(\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<MesProWorkOrderApi.WorkOrder>(\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<number>('/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<WorkOrderProgress>(\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<boolean>(\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<Array<{ id: string; name: string; key: string }>>(\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<MesWmBatchApi.Batch>(`/mes/wm/batch/get?id=${id}`);\r\n}\r\n\r\n/** 查询批次分页 */\r\nexport function getBatchPage(params: MesWmBatchApi.PageParams) {\r\n  return requestClient.get<PageResult<MesWmBatchApi.Batch>>(\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<MesWmBatchApi.Batch[]>(\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<MesWmBatchApi.Batch[]>(\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<MesWmBatchApi.PurchaseSource[]>(\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<MesWmBatchApi.SalesTarget[]>(\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<MesWmBatchApi.ProcessTrace[]>(\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<MesWmBatchApi.Batch | null>('/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<MesWmBatchApi.Batch>(`/mes/wm/batch/get?id=${id}`);\r\n}\r\n\r\n/** 查询批次分页 */\r\nexport function getBatchPage(params: MesWmBatchApi.PageParams) {\r\n  return requestClient.get<PageResult<MesWmBatchApi.Batch>>(\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<MesWmBatchApi.Batch[]>(\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<MesWmBatchApi.Batch[]>(\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<MesWmBatchApi.PurchaseSource[]>(\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<MesWmBatchApi.SalesTarget[]>(\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<MesWmBatchApi.ProcessTrace[]>(\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<MesWmBatchApi.Batch | null>('/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<PageResult<MesWmPackageApi.Package>>(\n    '/mes/wm/package/page',\n    { params },\n  );\n}\n\n/** 查询装箱单详情 */\nexport function getPackage(id: number) {\n  return requestClient.get<MesWmPackageApi.Package>(\n    `/mes/wm/package/get?id=${id}`,\n  );\n}\n\n/** 新增装箱单 */\nexport function createPackage(data: MesWmPackageApi.Package) {\n  return requestClient.post<number>('/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<PageResult<MesWmPackageApi.Package>>(\n    '/mes/wm/package/page',\n    { params },\n  );\n}\n\n/** 查询装箱单详情 */\nexport function getPackage(id: number) {\n  return requestClient.get<MesWmPackageApi.Package>(\n    `/mes/wm/package/get?id=${id}`,\n  );\n}\n\n/** 新增装箱单 */\nexport function createPackage(data: MesWmPackageApi.Package) {\n  return requestClient.post<number>('/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<PageResult<MesWmProductIssueApi.ProductIssue>>(\n    '/mes/wm/product-issue/page',\n    { params },\n  );\n}\n\n/** 查询领料出库单详情 */\nexport function getProductIssue(id: number) {\n  return requestClient.get<MesWmProductIssueApi.ProductIssue>(\n    `/mes/wm/product-issue/get?id=${id}`,\n  );\n}\n\n/** 新增领料出库单 */\nexport function createProductIssue(data: MesWmProductIssueApi.ProductIssue) {\n  return requestClient.post<number>('/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<boolean>(\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<PageResult<MesWmProductIssueApi.ProductIssue>>(\n    '/mes/wm/product-issue/page',\n    { params },\n  );\n}\n\n/** 查询领料出库单详情 */\nexport function getProductIssue(id: number) {\n  return requestClient.get<MesWmProductIssueApi.ProductIssue>(\n    `/mes/wm/product-issue/get?id=${id}`,\n  );\n}\n\n/** 新增领料出库单 */\nexport function createProductIssue(data: MesWmProductIssueApi.ProductIssue) {\n  return requestClient.post<number>('/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<boolean>(\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<PageResult<MesWmProductSalesApi.ProductSales>>(\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<MesWmProductSalesApi.ProductSales>(\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<number>('/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<boolean>(\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<PageResult<MesWmProductSalesApi.ProductSales>>(\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<MesWmProductSalesApi.ProductSales>(\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<number>('/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<boolean>(\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<PageResult<MesWmReturnSalesApi.ReturnSales>>(\n    '/mes/wm/return-sales/page',\n    { params },\n  );\n}\n\n/** 查询销售退货单详情 */\nexport function getReturnSales(id: number) {\n  return requestClient.get<MesWmReturnSalesApi.ReturnSales>(\n    `/mes/wm/return-sales/get?id=${id}`,\n  );\n}\n\n/** 新增销售退货单 */\nexport function createReturnSales(data: MesWmReturnSalesApi.ReturnSales) {\n  return requestClient.post<number>('/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<PageResult<MesWmReturnSalesApi.ReturnSales>>(\n    '/mes/wm/return-sales/page',\n    { params },\n  );\n}\n\n/** 查询销售退货单详情 */\nexport function getReturnSales(id: number) {\n  return requestClient.get<MesWmReturnSalesApi.ReturnSales>(\n    `/mes/wm/return-sales/get?id=${id}`,\n  );\n}\n\n/** 新增销售退货单 */\nexport function createReturnSales(data: MesWmReturnSalesApi.ReturnSales) {\n  return requestClient.post<number>('/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<PageResult<MesWmSalesNoticeApi.SalesNotice>>(\n    '/mes/wm/sales-notice/page',\n    { params },\n  );\n}\n\n/** 查询发货通知单详情 */\nexport function getSalesNotice(id: number) {\n  return requestClient.get<MesWmSalesNoticeApi.SalesNotice>(\n    `/mes/wm/sales-notice/get?id=${id}`,\n  );\n}\n\n/** 新增发货通知单 */\nexport function createSalesNotice(data: MesWmSalesNoticeApi.SalesNotice) {\n  return requestClient.post<number>('/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<number>('/mes/wm/sales-notice/generate-from-sale-order', {\n    saleOrderId,\n  });\n}\n\n/** 从发货通知单生成销售出库单 */\nexport function generateProductSales(id: number) {\n  return requestClient.post<number>('/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<PageResult<MesWmSalesNoticeApi.SalesNotice>>(\n    '/mes/wm/sales-notice/page',\n    { params },\n  );\n}\n\n/** 查询发货通知单详情 */\nexport function getSalesNotice(id: number) {\n  return requestClient.get<MesWmSalesNoticeApi.SalesNotice>(\n    `/mes/wm/sales-notice/get?id=${id}`,\n  );\n}\n\n/** 新增发货通知单 */\nexport function createSalesNotice(data: MesWmSalesNoticeApi.SalesNotice) {\n  return requestClient.post<number>('/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<number>('/mes/wm/sales-notice/generate-from-sale-order', {\n    saleOrderId,\n  });\n}\n\n/** 从发货通知单生成销售出库单 */\nexport function generateProductSales(id: number) {\n  return requestClient.post<number>('/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<WlsBatchApi.Batch>(`/mes/wm/batch/get?id=${id}`);\n}\n\n/** 查询批次分页 */\nexport function getBatchPage(params: WlsBatchApi.PageParams) {\n  return requestClient.get<PageResult<WlsBatchApi.Batch>>(\n    '/mes/wm/batch/page',\n    { params },\n  );\n}\n\n/** 批次向前追溯 */\nexport function getForwardBatchList(code: string) {\n  return requestClient.get<WlsBatchApi.Batch[]>(\n    '/mes/wm/batch/forward-list',\n    {\n      params: { code },\n    },\n  );\n}\n\n/** 批次向后追溯 */\nexport function getBackwardBatchList(code: string) {\n  return requestClient.get<WlsBatchApi.Batch[]>(\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<WlsBatchApi.Batch>(`/mes/wm/batch/get?id=${id}`);\n}\n\n/** 查询批次分页 */\nexport function getBatchPage(params: WlsBatchApi.PageParams) {\n  return requestClient.get<PageResult<WlsBatchApi.Batch>>(\n    '/mes/wm/batch/page',\n    { params },\n  );\n}\n\n/** 批次向前追溯 */\nexport function getForwardBatchList(code: string) {\n  return requestClient.get<WlsBatchApi.Batch[]>(\n    '/mes/wm/batch/forward-list',\n    {\n      params: { code },\n    },\n  );\n}\n\n/** 批次向后追溯 */\nexport function getBackwardBatchList(code: string) {\n  return requestClient.get<WlsBatchApi.Batch[]>(\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<PageResult<WlsPackageApi.Package>>(\n    '/mes/wm/package/page',\n    { params },\n  );\n}\n\n/** 查询装箱单详情 */\nexport function getPackage(id: number) {\n  return requestClient.get<WlsPackageApi.Package>(\n    `/mes/wm/package/get?id=${id}`,\n  );\n}\n\n/** 新增装箱单 */\nexport function createPackage(data: WlsPackageApi.Package) {\n  return requestClient.post<number>('/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<PageResult<WlsPackageApi.Package>>(\n    '/mes/wm/package/page',\n    { params },\n  );\n}\n\n/** 查询装箱单详情 */\nexport function getPackage(id: number) {\n  return requestClient.get<WlsPackageApi.Package>(\n    `/mes/wm/package/get?id=${id}`,\n  );\n}\n\n/** 新增装箱单 */\nexport function createPackage(data: WlsPackageApi.Package) {\n  return requestClient.post<number>('/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<PageResult<WlsProductIssueApi.ProductIssue>>(\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<WlsProductIssueApi.ProductIssue>(\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<number>('/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<boolean>(\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<PageResult<WlsProductIssueApi.ProductIssue>>(\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<WlsProductIssueApi.ProductIssue>(\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<number>('/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<boolean>(\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<PageResult<WlsProductSalesApi.ProductSales>>(\n    '/mes/wm/product-sales/page',\n    { params },\n  );\n}\n\n/** 查询销售出库单详情 */\nexport function getProductSales(id: number) {\n  return requestClient.get<WlsProductSalesApi.ProductSales>(\n    `/mes/wm/product-sales/get?id=${id}`,\n  );\n}\n\n/** 新增销售出库单 */\nexport function createProductSales(data: WlsProductSalesApi.ProductSales) {\n  return requestClient.post<number>('/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<boolean>(\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<PageResult<WlsProductSalesApi.ProductSales>>(\n    '/mes/wm/product-sales/page',\n    { params },\n  );\n}\n\n/** 查询销售出库单详情 */\nexport function getProductSales(id: number) {\n  return requestClient.get<WlsProductSalesApi.ProductSales>(\n    `/mes/wm/product-sales/get?id=${id}`,\n  );\n}\n\n/** 新增销售出库单 */\nexport function createProductSales(data: WlsProductSalesApi.ProductSales) {\n  return requestClient.post<number>('/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<boolean>(\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<PageResult<WlsReturnSalesApi.ReturnSales>>(\n    '/mes/wm/return-sales/page',\n    { params },\n  );\n}\n\n/** 查询销售退货单详情 */\nexport function getReturnSales(id: number) {\n  return requestClient.get<WlsReturnSalesApi.ReturnSales>(\n    `/mes/wm/return-sales/get?id=${id}`,\n  );\n}\n\n/** 新增销售退货单 */\nexport function createReturnSales(data: WlsReturnSalesApi.ReturnSales) {\n  return requestClient.post<number>('/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<PageResult<WlsReturnSalesApi.ReturnSales>>(\n    '/mes/wm/return-sales/page',\n    { params },\n  );\n}\n\n/** 查询销售退货单详情 */\nexport function getReturnSales(id: number) {\n  return requestClient.get<WlsReturnSalesApi.ReturnSales>(\n    `/mes/wm/return-sales/get?id=${id}`,\n  );\n}\n\n/** 新增销售退货单 */\nexport function createReturnSales(data: WlsReturnSalesApi.ReturnSales) {\n  return requestClient.post<number>('/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<PageResult<WlsSalesNoticeApi.SalesNotice>>(\n    '/mes/wm/sales-notice/page',\n    { params },\n  );\n}\n\n/** 查询发货通知单详情 */\nexport function getSalesNotice(id: number) {\n  return requestClient.get<WlsSalesNoticeApi.SalesNotice>(\n    `/mes/wm/sales-notice/get?id=${id}`,\n  );\n}\n\n/** 新增发货通知单 */\nexport function createSalesNotice(data: WlsSalesNoticeApi.SalesNotice) {\n  return requestClient.post<number>('/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<PageResult<WlsSalesNoticeApi.SalesNotice>>(\n    '/mes/wm/sales-notice/page',\n    { params },\n  );\n}\n\n/** 查询发货通知单详情 */\nexport function getSalesNotice(id: number) {\n  return requestClient.get<WlsSalesNoticeApi.SalesNotice>(\n    `/mes/wm/sales-notice/get?id=${id}`,\n  );\n}\n\n/** 新增发货通知单 */\nexport function createSalesNotice(data: WlsSalesNoticeApi.SalesNotice) {\n  return requestClient.post<number>('/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<BarcodeFormatEnum, string> = {\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<BarcodeFormatEnum, string> = {\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<MesMdClientApi.Client>['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<MesMdClientApi.Client>['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<MesProWorkOrderApi.WorkOrder>['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<MesProTaskApi.Task>['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<number | undefined>): 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<MesProTaskApi.Task>['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<MesProWorkOrderApi.WorkOrder>['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<MesProTaskApi.Task>['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<number | undefined>): 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<MesProTaskApi.Task>['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<MesProWorkOrderApi.WorkOrder>['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<MesProWorkOrderApi.WorkOrder>['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<MesProWorkOrderBomApi.WorkOrderBom>['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<MesProWorkOrderProcessApi.WorkOrderProcess>['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<number, string> = {\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<MesProWorkOrderApi.WorkOrder>['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<MesProWorkOrderApi.WorkOrder>['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<MesProWorkOrderBomApi.WorkOrderBom>['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<MesProWorkOrderProcessApi.WorkOrderProcess>['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<number, string> = {\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<MesWmBatchApi.Batch>['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<MesWmBatchApi.Batch>['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<MesWmBatchApi.PurchaseSource>['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<MesWmBatchApi.SalesTarget>['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<MesWmBatchApi.ProcessTrace>['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<MesWmBatchApi.Batch>['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<MesWmBatchApi.Batch>['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<MesWmBatchApi.PurchaseSource>['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<MesWmBatchApi.SalesTarget>['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<MesWmBatchApi.ProcessTrace>['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<MesWmBatchApi.Batch>['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<MesWmBatchApi.Batch>['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<MesWmPackageApi.Package>['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<MesWmPackageApi.Package>['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<MesWmPackageLineApi.PackageLine>['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<MesWmPackageApi.Package>['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<MesWmPackageApi.Package>['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<MesWmPackageApi.Package>['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<MesWmPackageLineApi.PackageLine>['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<MesWmPackageApi.Package>['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<MesWmProductSalesApi.ProductSales>['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<MesWmProductSalesLineApi.ProductSalesLine>['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<MesWmProductSalesDetailApi.ProductSalesDetail>['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<MesWmProductSalesApi.ProductSales>['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<MesWmProductSalesLineApi.ProductSalesLine>['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<MesWmProductSalesDetailApi.ProductSalesDetail>['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<string, unknown> | 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<MesWmReturnSalesApi.ReturnSales>['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<MesWmReturnSalesLineApi.ReturnSalesLine>['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<MesWmReturnSalesDetailApi.ReturnSalesDetail>['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<string, unknown> | 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<MesWmReturnSalesApi.ReturnSales>['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<MesWmReturnSalesLineApi.ReturnSalesLine>['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<MesWmReturnSalesDetailApi.ReturnSalesDetail>['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": "<script lang=\"ts\" setup>\nimport type { MesMdClientApi } from '#/api/mes/md/client';\n\nimport { computed, ref, useAttrs, watch } from 'vue';\n\nimport { IconifyIcon } from '@vben/icons';\n\nimport { Input, Tooltip } from 'ant-design-vue';\n\nimport { getClient } from '#/api/mes/md/client';\n\nimport MdClientSelectDialog from './select-dialog.vue';\n\ndefineOptions({ name: 'MdClientSelect', inheritAttrs: false });\n\nconst props = withDefaults(\n  defineProps<{\n    allowClear?: boolean;\n    disabled?: boolean;\n    modelValue?: number;\n    placeholder?: string;\n  }>(),\n  {\n    allowClear: true,\n    disabled: false,\n    modelValue: undefined,\n    placeholder: '请选择客户',\n  },\n);\nconst emit = defineEmits<{\n  change: [item: MesMdClientApi.Client | undefined];\n  'update:modelValue': [value: number | undefined];\n}>();\nconst attrs = useAttrs(); // 透传属性\nconst dialogRef = ref<InstanceType<typeof MdClientSelectDialog>>(); // 客户选择弹窗\nconst hovering = ref(false); // 是否悬停\nconst selectedItem = ref<MesMdClientApi.Client>(); // 当前选中客户\n\nconst displayLabel = computed(() => selectedItem.value?.name ?? ''); // 选择器展示名称\nconst showClear = computed(\n  () =>\n    props.allowClear &&\n    !props.disabled &&\n    hovering.value &&\n    props.modelValue !== null,\n);\n\n/** 根据客户编号回显选择器 */\nasync function resolveItemById(id: number | undefined) {\n  if (!id) {\n    selectedItem.value = undefined;\n    return;\n  }\n  if (selectedItem.value?.id === id) {\n    return;\n  }\n  selectedItem.value = await getClient(id);\n}\n\nwatch(\n  () => props.modelValue,\n  (value) => {\n    resolveItemById(value);\n  },\n  { immediate: true },\n);\n\n/** 清空已选客户 */\nfunction clearSelected() {\n  selectedItem.value = undefined;\n  emit('update:modelValue', undefined);\n  emit('change', undefined);\n}\n\n/** 打开客户选择弹窗 */\nfunction handleClick(event: MouseEvent) {\n  if (props.disabled) {\n    return;\n  }\n  const target = event.target as HTMLElement;\n  if (showClear.value && target.closest('.ant-input-suffix')) {\n    event.stopPropagation();\n    clearSelected();\n    return;\n  }\n  const selectedIds = (\n    props.modelValue === null ? [] : [props.modelValue]\n  ) as number[];\n  dialogRef.value?.open(selectedIds, { multiple: false });\n}\n\n/** 回填选中的客户 */\nfunction handleSelected(rows: MesMdClientApi.Client[]) {\n  const item = rows[0];\n  if (!item) {\n    return;\n  }\n  selectedItem.value = item;\n  emit('update:modelValue', item.id);\n  emit('change', item);\n}\n</script>\n\n<template>\n  <div\n    v-bind=\"attrs\"\n    class=\"w-full\"\n    :class=\"disabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n    @click=\"handleClick\"\n    @mouseenter=\"hovering = true\"\n    @mouseleave=\"hovering = false\"\n  >\n    <Tooltip :mouse-enter-delay=\"0.5\" :open=\"selectedItem ? undefined : false\">\n      <template #title>\n        <div v-if=\"selectedItem\" class=\"leading-6\">\n          <div>编码:{{ selectedItem.code || '-' }}</div>\n          <div>名称:{{ selectedItem.name || '-' }}</div>\n          <div>简称:{{ selectedItem.nickname || '-' }}</div>\n          <div>电话:{{ selectedItem.telephone || '-' }}</div>\n        </div>\n      </template>\n      <Input\n        :disabled=\"disabled\"\n        :placeholder=\"placeholder\"\n        :value=\"displayLabel\"\n        readonly\n      >\n        <template #suffix>\n          <IconifyIcon\n            class=\"size-4\"\n            :icon=\"showClear ? 'lucide:circle-x' : 'lucide:search'\"\n          />\n        </template>\n      </Input>\n    </Tooltip>\n  </div>\n  <MdClientSelectDialog ref=\"dialogRef\" @selected=\"handleSelected\" />\n</template>\n",
    "after": "<script lang=\"ts\" setup>\nimport type { MesMdClientApi } from '#/api/mes/md/client';\n\nimport { computed, ref, useAttrs, watch } from 'vue';\n\nimport { IconifyIcon } from '@vben/icons';\n\nimport { Input, Tooltip } from 'ant-design-vue';\n\nimport { getClient } from '#/api/mes/md/client';\n\nimport MdClientSelectDialog from './select-dialog.vue';\n\ndefineOptions({ name: 'MdClientSelect', inheritAttrs: false });\n\nconst props = withDefaults(\n  defineProps<{\n    allowClear?: boolean;\n    disabled?: boolean;\n    modelValue?: number;\n    placeholder?: string;\n  }>(),\n  {\n    allowClear: true,\n    disabled: false,\n    modelValue: undefined,\n    placeholder: '请选择客户',\n  },\n);\nconst emit = defineEmits<{\n  change: [item: MesMdClientApi.Client | undefined];\n  'update:modelValue': [value: number | undefined];\n}>();\nconst attrs = useAttrs(); // 透传属性\nconst dialogRef = ref<InstanceType<typeof MdClientSelectDialog>>(); // 客户选择弹窗\nconst hovering = ref(false); // 是否悬停\nconst selectedItem = ref<MesMdClientApi.Client>(); // 当前选中客户\n\nconst displayLabel = computed(() => selectedItem.value?.name ?? ''); // 选择器展示名称\nconst showClear = computed(\n  () =>\n    props.allowClear &&\n    !props.disabled &&\n    hovering.value &&\n    props.modelValue !== null,\n);\n\n/** 根据客户编号回显选择器 */\nasync function resolveItemById(id: number | undefined) {\n  if (!id) {\n    selectedItem.value = undefined;\n    return;\n  }\n  if (selectedItem.value?.id === id) {\n    return;\n  }\n  selectedItem.value = await getClient(id);\n}\n\nwatch(\n  () => props.modelValue,\n  (value) => {\n    resolveItemById(value);\n  },\n  { immediate: true },\n);\n\n/** 清空已选客户 */\nfunction clearSelected() {\n  selectedItem.value = undefined;\n  emit('update:modelValue', undefined);\n  emit('change', undefined);\n}\n\n/** 打开客户选择弹窗 */\nfunction handleClick(event: MouseEvent) {\n  if (props.disabled) {\n    return;\n  }\n  const target = event.target as HTMLElement;\n  if (showClear.value && target.closest('.ant-input-suffix')) {\n    event.stopPropagation();\n    clearSelected();\n    return;\n  }\n  const selectedIds = (\n    props.modelValue === null ? [] : [props.modelValue]\n  ) as number[];\n  dialogRef.value?.open(selectedIds, { multiple: false });\n}\n\n/** 回填选中的客户 */\nfunction handleSelected(rows: MesMdClientApi.Client[]) {\n  const item = rows[0];\n  if (!item) {\n    return;\n  }\n  selectedItem.value = item;\n  emit('update:modelValue', item.id);\n  emit('change', item);\n}\n</script>\n\n<template>\n  <div\n    v-bind=\"attrs\"\n    class=\"w-full\"\n    :class=\"disabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n    @click=\"handleClick\"\n    @mouseenter=\"hovering = true\"\n    @mouseleave=\"hovering = false\"\n  >\n    <Tooltip :mouse-enter-delay=\"0.5\" :open=\"selectedItem ? undefined : false\">\n      <template #title>\n        <div v-if=\"selectedItem\" class=\"leading-6\">\n          <div>名称:{{ selectedItem.name || '-' }}</div>\n          <div>简称:{{ selectedItem.nickname || '-' }}</div>\n          <div>电话:{{ selectedItem.telephone || '-' }}</div>\n        </div>\n      </template>\n      <Input\n        :disabled=\"disabled\"\n        :placeholder=\"placeholder\"\n        :value=\"displayLabel\"\n        readonly\n      >\n        <template #suffix>\n          <IconifyIcon\n            class=\"size-4\"\n            :icon=\"showClear ? 'lucide:circle-x' : 'lucide:search'\"\n          />\n        </template>\n      </Input>\n    </Tooltip>\n  </div>\n  <MdClientSelectDialog ref=\"dialogRef\" @selected=\"handleSelected\" />\n</template>\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<MesProWorkOrderProcessProgressVO> 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<MesProWorkOrderProcessProgressVO> 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 * <p>\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 * <p>\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<MesProWorkOrderProcessProgressDTO> 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<MesProWorkOrderProcessProgressDTO> processProgressList;\r\n    /**\r\n     * 生产状态 (0: 待生产, 1: 生产中, 2: 生产完成)\r\n     */\r\n    private Integer productionStatus;\r\n}\r\n"
  }
]