mes-vue/src/api/orderProcessPlan.ts
shaoleiliu-netizen123 8c5a9534c9 工序页面的调整
2026-06-12 10:28:26 +08:00

447 lines
7.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { request } from '@/utils/request'
/** 工序计划实体(新增/修改/派工) */
export interface OrderProcessPlan {
id?: number
name?: string
code?: string
sort?: number
orderItemId?: number
beginTime?: string
endTime?: string
procurement?: number
outsource?: number
quantity?: number
transferNum?: number
transferOutNum?: number
createTime?: string
createBy?: string
qualityInspection?: number
storageEntry?: number
}
/** 派工明细 */
export interface AssignWorkItem {
userId?: number | string
quantity?: number | string
assingStatus?: number
[key: string]: unknown
}
/** 工序计划明细 VOprocessList 项) */
export interface ProcessPlanItemVO {
planId?: number
processCode?: string
operNumber?: number
workCenterName?: string
departmentName?: string
processName?: string
operDescription?: string
activityUnit?: string
optCtrlCodeName?: string
activityQty?: number
planStartTime?: string
planFinishTime?: string
actualStartTime?: string | null
actualFinishTime?: string | null
quantity?: number
transferInQty?: number
transferOutQty?: number
completedQty?: number
scrapQty?: number
reworkQty?: number
procurement?: number
outsource?: number
qualityInspection?: number
storageEntry?: number
assign?: number
assignByName?: string | null
assignTime?: string | null
processStatus?: number
prevPlanId?: number | null
nextPlanId?: number | null
assignWorkList?: AssignWorkItem[]
}
/** 按生产订单分组的工序计划 VO分页/详情) */
export interface OrderProcessPlanVO {
orderItemId?: number
mainCode?: string
materialCode?: string
materialName?: string
orderCode?: string
quantity?: number
routeCode?: string
proWorkshop?: string
beginTime?: string
endTime?: string
actualStartTime?: string | null
actualEndTime?: string | null
completedQty?: number
orderStatus?: number
currentProcessName?: string
currentOperNumber?: number
processList?: ProcessPlanItemVO[]
}
export const ORDER_STATUS_MAP: Record<number, { label: string; type: 'default' | 'info' | 'success' | 'warning' | 'error' }> = {
0: { label: '未开始', type: 'default' },
1: { label: '进行中', type: 'info' },
2: { label: '已完成', type: 'success' },
}
export const PROCESS_STATUS_MAP: Record<number, { label: string; type: 'default' | 'info' | 'success' | 'warning' | 'error' }> = {
0: { label: '待派工', type: 'default' },
1: { label: '待执行', type: 'info' },
2: { label: '执行中', type: 'warning' },
3: { label: '质检中', type: 'warning' },
4: { label: '已完成', type: 'success' },
}
export const ASSIGN_STATUS_MAP: Record<number, { label: string; type: 'default' | 'info' | 'success' | 'warning' | 'error' }> = {
1: { label: '待执行', type: 'info' },
2: { label: '执行中', type: 'warning' },
3: { label: '质检中', type: 'warning' },
4: { label: '已汇报', type: 'success' },
5: { label: '已关闭', type: 'default' },
}
/** 工序 VO 转实体(编辑/派工提交用) */
export function processItemToEntity(
item: ProcessPlanItemVO,
orderItemId?: number,
): OrderProcessPlan {
return {
id: item.planId,
name: item.processName,
code: item.processCode,
sort: item.operNumber,
orderItemId,
beginTime: item.planStartTime,
endTime: item.planFinishTime,
procurement: item.procurement,
outsource: item.outsource,
quantity: item.quantity,
transferNum: item.transferInQty,
transferOutNum: item.transferOutQty,
qualityInspection: item.qualityInspection,
storageEntry: item.storageEntry,
}
}
/** 提交前剔除展示字段,保留 OrderProcessPlan 实体 */
export function toOrderProcessPlanPayload(data: Record<string, unknown>): OrderProcessPlan {
const payload = { ...data }
const displayKeys = [
'mainCode', 'materialCode', 'materialName', 'orderCode', 'routeCode', 'proWorkshop',
'actualStartTime', 'actualEndTime', 'completedQty', 'orderStatus', 'currentProcessName',
'currentOperNumber', 'processList', 'planId', 'processName', 'processCode', 'operNumber',
'workCenterName', 'departmentName', 'operDescription', 'activityUnit', 'optCtrlCodeName',
'activityQty', 'planStartTime', 'planFinishTime', 'actualFinishTime', 'transferInQty',
'transferOutQty', 'scrapQty', 'reworkQty', 'assign', 'assignByName', 'assignTime',
'processStatus', 'prevPlanId', 'nextPlanId', 'assignWorkList',
]
for (const key of displayKeys) {
delete payload[key]
}
return payload as OrderProcessPlan
}
// 工序计划 API
export const orderProcessPlanApi = {
// 分页查询(按生产订单分组)
page(params: {
page: number
pageSize: number
id?: number | string
name?: string
code?: string
orderItemId?: number | string
}) {
return request<{ list: OrderProcessPlanVO[]; total: number; page: number; pageSize: number }>({
url: '/biz/orderProcessPlan/page',
method: 'get',
params,
})
},
// 获取详情(路径参数为生产订单 id
detail(orderItemId: number | string) {
return request<OrderProcessPlanVO>({
url: `/biz/orderProcessPlan/${orderItemId}`,
method: 'get',
})
},
// 新增
create(data: OrderProcessPlan) {
return request({ url: '/biz/orderProcessPlan', method: 'post', data })
},
// 修改
update(data: OrderProcessPlan) {
return request({ url: '/biz/orderProcessPlan', method: 'put', data })
},
// 删除(工序计划 id
delete(ids: (number | string)[]) {
return request({ url: `/biz/orderProcessPlan/${ids.join(',')}`, method: 'delete' })
},
// 派工
assignWork(data: OrderProcessPlan & { list?: AssignWorkItem[] }) {
return request({ url: '/biz/orderProcessPlan/assignWork', method: 'put', data })
},
// 导出
export(params?: { ids?: string[]; id?: number; name?: string; code?: string; orderItemId?: number }) {
const p: Record<string, unknown> = {}
if (params?.ids?.length) p.ids = params.ids.join(',')
if (params?.id !== undefined && params?.id !== null) p.id = params.id
if (params?.name !== undefined && params?.name !== null) p.name = params.name
if (params?.code !== undefined && params?.code !== null) p.code = params.code
if (params?.orderItemId !== undefined && params?.orderItemId !== null) p.orderItemId = params.orderItemId
return request({ url: '/biz/orderProcessPlan/export', method: 'get', params: p, responseType: 'blob' })
},
// 导入
importData(file: File) {
const formData = new FormData()
formData.append('file', file)
return request<{ success: number; fail: number; errors: string[] }>({
url: '/biz/orderProcessPlan/import',
method: 'post',
data: formData,
headers: { 'Content-Type': 'multipart/form-data' },
})
},
// 下载导入模板
downloadTemplate() {
return request({ url: '/biz/orderProcessPlan/template', method: 'get', responseType: 'blob' })
},
}