diff --git a/mes-ui/src/api/outsourcing.ts b/mes-ui/src/api/outsourcing.ts new file mode 100644 index 0000000..cd1e044 --- /dev/null +++ b/mes-ui/src/api/outsourcing.ts @@ -0,0 +1,100 @@ +import { request } from '@/utils/request' + +// 委外记录表 类型定义 +export interface Outsourcing { + id?: number + + name?: string + + code?: string + + businessType?: number + + businessId?: number + + businessCode?: string + + orderItemId?: number + + quantity?: number + + supplierId?: number + + supplierName?: string + + unitPrice?: string + + totalAmount?: string + + beginPreparationTime?: string + + endPreparationTime?: string + + beginTime?: string + + endTime?: string + + remark?: string + + createTime?: string + + createBy?: string + + overdue?: number + +} + +// 委外记录表 API +export const outsourcingApi = { + // 分页查询 + page(params: { page: number; pageSize: number; id?: number; name?: string; businessType?: number }) { + return request({ url: '/biz/outsourcing/page', method: 'get', params }) + }, + + // 获取详情 + detail(id: string) { + return request({ url: `/biz/outsourcing/${id}`, method: 'get' }) + }, + + // 新增 + create(data: Outsourcing) { + return request({ url: '/biz/outsourcing', method: 'post', data }) + }, + + // 修改 + update(data: Outsourcing) { + return request({ url: '/biz/outsourcing', method: 'put', data }) + }, + + // 删除 + delete(ids: string[]) { + return request({ url: `/biz/outsourcing/${ids.join(',')}`, method: 'delete' }) + }, + + // 导出 + export(params?: { ids?: string[]; id?: number; name?: string; businessType?: number }) { + const p: Record = {} + 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?.businessType !== undefined && params?.businessType !== null) p.businessType = params.businessType + return request({ url: `/biz/outsourcing/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/outsourcing/import`, + method: 'post', + data: formData, + headers: { 'Content-Type': 'multipart/form-data' } + }) + }, + + // 下载导入模板 + downloadTemplate() { + return request({ url: `/biz/outsourcing/template`, method: 'get', responseType: 'blob' }) + } +} diff --git a/mes-ui/src/views/biz/outsourcing/index.vue b/mes-ui/src/views/biz/outsourcing/index.vue new file mode 100644 index 0000000..0b68648 --- /dev/null +++ b/mes-ui/src/views/biz/outsourcing/index.vue @@ -0,0 +1,492 @@ + + + + + diff --git a/src/api/device.ts b/src/api/device.ts index ff636b2..ac2a6bb 100644 --- a/src/api/device.ts +++ b/src/api/device.ts @@ -8,16 +8,37 @@ export interface Device{ deviceTypeId:number, deviceType:string, sectionId:number, + sectionName?:string, spec:string, manufacturer:string, manufactureDate:string, workshopId:number, remark:string, status:number, + deviceFlag?:string, + /** 新代 SynFactory equipID */ + synEquipId?: number | null, createTime:string, updateTime:string } +export interface DeviceRealtimeVO { + deviceId?: number + deviceCode?: string + displayName: string + synEquipId: number + bound: boolean + connected?: number | null + cncStatus?: number | null + cncStatusText?: string + partCount?: number | null + mainProgram?: string | null + alarmCount?: number + alarmMessages?: string[] + dataTimestamp?: number + sectionName?: string +} + export const deviceApi = { @@ -25,6 +46,7 @@ export const deviceApi = { page:number, pageSize:number, deviceCode:any + deviceFlag?: string }) { return request({ url:"/biz/device/page", @@ -33,6 +55,21 @@ export const deviceApi = { }) }, + /** 设备机联网看板:MES名称 + 新代即时状态 */ + realtimeBoard(equipIds?: string | number[]) { + const params: Record = {} + if (Array.isArray(equipIds) && equipIds.length) { + params.equipIds = equipIds.join(',') + } else if (typeof equipIds === 'string' && equipIds) { + params.equipIds = equipIds + } + return request({ + url: '/biz/device/realtime-board', + method: 'get', + params + }) + }, + create(data:Device) { return request({ url:"/biz/device", diff --git a/src/api/orderProcessPlan.ts b/src/api/orderProcessPlan.ts index 9b0da35..35f9c32 100644 --- a/src/api/orderProcessPlan.ts +++ b/src/api/orderProcessPlan.ts @@ -64,6 +64,8 @@ export interface ProcessPlanItemVO { planId?: number + workOrderCode?: string + processCode?: string operNumber?: number @@ -442,5 +444,60 @@ export const orderProcessPlanApi = { }, + /** 委外第一步:获取可选工序 */ + getOutsourcingOptions(processPlanId: number) { + return request({ + url: `/biz/orderProcessPlan/outsourcing/options/${processPlanId}`, + method: 'get', + }) + }, + + /** 委外第二步:创建委外单 */ + createOutsourcing(data: OutsourcingCreate) { + return request({ + url: '/biz/orderProcessPlan/outsourcing', + method: 'post', + data, + }) + }, + +} + +/** 委外可选工序项 */ +export interface OutsourcingProcessOption { + planId?: number + workOrderCode?: string + processCode?: string + operNumber?: number + processName?: string + quantity?: number + outsource?: number + planStartTime?: string + planFinishTime?: string + current?: boolean +} + +/** 委外可选工序(第一步) */ +export interface OutsourcingOptions { + orderItemId?: number + mainCode?: string + materialCode?: string + materialName?: string + orderCode?: string + quantity?: number + currentProcessPlanId?: number + processList?: OutsourcingProcessOption[] +} + +/** 创建委外单(第二步) */ +export interface OutsourcingCreate { + processPlanId: number + supplierId?: number + supplierName: string + quantity: number + unitPrice?: number + planStartTime?: string + planEndTime?: string + remark?: string } diff --git a/src/api/outsourcing.ts b/src/api/outsourcing.ts new file mode 100644 index 0000000..be639fd --- /dev/null +++ b/src/api/outsourcing.ts @@ -0,0 +1,105 @@ +import { request } from '@/utils/request' + +/** 委外工单 */ +export interface Outsourcing { + id?: number + outsourceCode?: string + name?: string + code?: string + businessType?: number + businessId?: number + businessCode?: string + orderItemId?: number + quantity?: number + supplierId?: number + supplierName?: string + unitPrice?: number | string + totalAmount?: number | string + beginPreparationTime?: string + endPreparationTime?: string + beginTime?: string + endTime?: string + remark?: string + createTime?: string + createBy?: string + overdue?: number + /** 0草稿 1执行中 2已完成 3已关闭 */ + status?: number + /** 1正常 2紧急 3低 */ + priority?: number + issuedQuantity?: number | string + receivedQuantity?: number | string + qualifiedQuantity?: number | string +} + +export const OUTSOURCE_STATUS_MAP: Record = { + 0: { label: '草稿', type: 'default' }, + 1: { label: '执行中', type: 'info' }, + 2: { label: '已完成', type: 'success' }, + 3: { label: '已关闭', type: 'default' }, +} + +export const OUTSOURCE_PRIORITY_MAP: Record = { + 1: { label: '正常', type: 'info' }, + 2: { label: '紧急', type: 'error' }, + 3: { label: '低', type: 'default' }, +} + +export const outsourcingApi = { + page(params: { + page: number + pageSize: number + id?: number + name?: string + businessType?: number + outsourceCode?: string + supplierName?: string + status?: number + }) { + return request<{ list: Outsourcing[]; total: number; page: number; pageSize: number }>({ + url: '/biz/outsourcing/page', + method: 'get', + params, + }) + }, + + detail(id: number | string) { + return request({ url: `/biz/outsourcing/${id}`, method: 'get' }) + }, + + create(data: Outsourcing) { + return request({ url: '/biz/outsourcing', method: 'post', data }) + }, + + update(data: Outsourcing) { + return request({ url: '/biz/outsourcing', method: 'put', data }) + }, + + delete(ids: number[]) { + return request({ url: `/biz/outsourcing/${ids.join(',')}`, method: 'delete' }) + }, + + export(params?: { ids?: number[]; id?: number; name?: string; businessType?: number }) { + const p: Record = {} + if (params?.ids?.length) p.ids = params.ids.join(',') + if (params?.id != null) p.id = params.id + if (params?.name) p.name = params.name + if (params?.businessType != null) p.businessType = params.businessType + return request({ url: '/biz/outsourcing/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/outsourcing/import', + method: 'post', + data: formData, + headers: { 'Content-Type': 'multipart/form-data' }, + }) + }, + + downloadTemplate() { + return request({ url: '/biz/outsourcing/template', method: 'get', responseType: 'blob' }) + }, +} diff --git a/src/api/qcResultDetail.ts b/src/api/qcResultDetail.ts index ae8cd70..433fb0a 100644 --- a/src/api/qcResultDetail.ts +++ b/src/api/qcResultDetail.ts @@ -82,5 +82,12 @@ export const qcResultDetailApi = { // 下载导入模板 downloadTemplate() { return request({ url: `/biz/qcResultDetail/template`, method: 'get', responseType: 'blob' }) + }, + + selectlistByqcId(qcId:any) { + return request({ + url:`/biz/qcResultDetail/selectlistByqcId/${qcId}`, + method:'get' + }) } } \ No newline at end of file diff --git a/src/api/qualityTesting.ts b/src/api/qualityTesting.ts index 42bca4d..e038d50 100644 --- a/src/api/qualityTesting.ts +++ b/src/api/qualityTesting.ts @@ -73,8 +73,10 @@ export const qualityTestingApi = { return request({ url: '/mes/qc/partial', method: 'post', data }) }, //质检撤回 - cancel(id: number) { - return request({ url: `/mes/dispatch/revoke/${id}`, method: 'put' }) + cancel(data:{assingId:number,remark:string}) { + console.log(data); + + return request({ url: `/mes/dispatch/revoke`, method: 'put',data }) }, // 导出 diff --git a/src/api/submitLog.ts b/src/api/submitLog.ts index d01d31c..7d8c5c6 100644 --- a/src/api/submitLog.ts +++ b/src/api/submitLog.ts @@ -22,12 +22,14 @@ export interface SubmitLog { assingStatus?: number + remark?: string + } // 派工工单汇报记录 API export const submitLogApi = { // 分页查询 - page(params: { page: number; pageSize: number; assingStatus?: number }) { + page(params: { page: number; pageSize: number; submitStatus?: number }) { return request({ url: '/mes/report/page', method: 'get', params }) }, @@ -56,7 +58,7 @@ export const submitLogApi = { const p: Record = {} if (params?.ids?.length) p.ids = params.ids.join(',') if (params?.id !== undefined && params?.id !== null) p.id = params.id - return request({ url: `/biz/submitLog/export`, method: 'get', params: p, responseType: 'blob' }) + return request({ url: `/mes/report/export`, method: 'get', params: p, responseType: 'blob' }) }, // 导入 diff --git a/src/components/SubmitDetailPage.vue b/src/components/SubmitDetailPage.vue new file mode 100644 index 0000000..734250c --- /dev/null +++ b/src/components/SubmitDetailPage.vue @@ -0,0 +1,84 @@ + + \ No newline at end of file diff --git a/src/components/SumbitDetailCard.vue b/src/components/SumbitDetailCard.vue new file mode 100644 index 0000000..2db2fbf --- /dev/null +++ b/src/components/SumbitDetailCard.vue @@ -0,0 +1,169 @@ + + \ No newline at end of file diff --git a/src/router/index.ts b/src/router/index.ts index 4da2bfa..ff3851a 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -148,6 +148,24 @@ const routes: RouteRecordRaw[] = [ component: () => import('@/views/biz/orderProcessPlan/index.vue'), meta: { title: '工序计划', icon: 'ListOutline' } }, + { + path: 'biz/orderProcessPlan/board', + name: 'orderProcessPlanBoard', + component: () => import('@/views/biz/orderProcessPlan/board.vue'), + meta: { title: '工序计划看板', icon: 'ListOutline', activeMenu: '/biz/orderProcessPlan' } + }, + { + path: 'biz/device', + name: 'device', + component: () => import('@/views/biz/device/index.vue'), + meta: { title: '设备管理', icon: 'HardwareChipOutline' } + }, + { + path: 'biz/device/board', + name: 'deviceRealtimeBoard', + component: () => import('@/views/biz/device/board.vue'), + meta: { title: '设备状态看板', icon: 'GridOutline', activeMenu: '/biz/device' } + }, { path: 'biz/user', name: 'user', @@ -264,6 +282,12 @@ const routes: RouteRecordRaw[] = [ component: () => import('@/views/biz/flowingAround/index.vue'), meta: { title: '流转记录表', icon: 'ListOutline' } }, + { + path: 'biz/outsourcing', + name: 'outsourcing', + component: () => import('@/views/biz/outsourcing/index.vue'), + meta: { title: '工序委外', icon: 'ListOutline' } + }, { // 开发工具 path: 'tool/gen', diff --git a/src/views/biz/device/board.vue b/src/views/biz/device/board.vue new file mode 100644 index 0000000..13ea600 --- /dev/null +++ b/src/views/biz/device/board.vue @@ -0,0 +1,438 @@ + + + + + + + diff --git a/src/views/biz/device/index.vue b/src/views/biz/device/index.vue index 2ff0169..ced75dd 100644 --- a/src/views/biz/device/index.vue +++ b/src/views/biz/device/index.vue @@ -29,6 +29,9 @@ 新增设备 + + 设备状态看板 + @@ -103,12 +112,13 @@ diff --git a/src/views/biz/qualityTesting/detail.vue b/src/views/biz/qualityTesting/detail.vue index b635ee8..e7316b0 100644 --- a/src/views/biz/qualityTesting/detail.vue +++ b/src/views/biz/qualityTesting/detail.vue @@ -54,8 +54,8 @@