diff --git a/src/api/defectiveWarehouse.ts b/src/api/defectiveWarehouse.ts new file mode 100644 index 0000000..a6c0958 --- /dev/null +++ b/src/api/defectiveWarehouse.ts @@ -0,0 +1,111 @@ +import { request } from '@/utils/request' + +// 不良品库 类型定义 +export interface DefectiveWarehouse { + id?: number + + processId?: number + + sourceOrderId?: number + + inboundCode?: string + + subjectName?: string + + inboundType?: number + + processPlanId?: number + + warehouseId?: number + + status?: number + + deleted?: number + + businessType?: string + + num?:number +} + +export const STOCK_IN_TYPE_MAP: Record = { + 1: { label: '生产入库', type: 'success' }, + 2: { label: '委外收货', type: 'warning' }, + 3: { label: '采购入库', type: 'info' }, +} + +export const STOCK_IN_STATUS_MAP: Record = { + 0: { label: '草稿', type: 'default' }, + 1: { label: '待确认', type: 'info' }, + 2: { label: '上架入库', type: 'success' }, + 3: { label: '已撤回', type: 'warning' }, +} + + +// 不良品库 API +export const defectiveWarehouseApi = { + // 分页查询 + page(params: { page: number; pageSize: number; id?: number; status?: number }) { + return request({ url: '/biz/defectiveWarehouse/page', method: 'get', params }) + }, + + // 获取详情 + detail(id: number) { + return request({ url: `/biz/defectiveWarehouse/${id}`, method: 'get' }) + }, + + // 新增 + create(data: DefectiveWarehouse) { + return request({ url: '/biz/defectiveWarehouse', method: 'post', data }) + }, + + // 修改 + update(data: DefectiveWarehouse) { + return request({ url: '/biz/defectiveWarehouse', method: 'put', data }) + }, + + // 删除 + delete(ids: number[]) { + return request({ url: `/biz/defectiveWarehouse/${ids.join(',')}`, method: 'delete' }) + }, + + // 导出 + export(params?: { ids?: number[]; id?: number; status?: 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?.status !== undefined && params?.status !== null) p.status = params.status + return request({ url: `/biz/defectiveWarehouse/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/defectiveWarehouse/import`, + method: 'post', + data: formData, + headers: { 'Content-Type': 'multipart/form-data' } + }) + }, + + // 下载导入模板 + downloadTemplate() { + return request({ url: `/biz/defectiveWarehouse/template`, method: 'get', responseType: 'blob' }) + }, + + //确认入库 + confirm(id:number) { + return request({ + url:`/biz/defectiveWarehouse/confirm/${id}`, + method:"get" + }) + }, + //撤回入库 + cancel(id:number) { + return request({ + url:`/biz/defectiveWarehouse/cancel/${id}`, + method:"get" + }) + } +} diff --git a/src/views/NCcode/index.vue b/src/views/NCcode/index.vue index 2940aab..261adf2 100644 --- a/src/views/NCcode/index.vue +++ b/src/views/NCcode/index.vue @@ -976,7 +976,7 @@ const selectedDeviceIds = ref([]) function handlerConnectionDevice(row:any) { deviceDocumentConnectionVisible.value = true - title.value = row.deviceName + "设备工艺文档关联" + title.value = row.ncName + "关联设备" deviceDocumentConnection.sourceId = row.id getDeviceList(deviceDocumentConnection.sourceId) } diff --git a/src/views/biz/defectiveWarehouse/index.vue b/src/views/biz/defectiveWarehouse/index.vue new file mode 100644 index 0000000..3c83c52 --- /dev/null +++ b/src/views/biz/defectiveWarehouse/index.vue @@ -0,0 +1,572 @@ + + + + + diff --git a/src/views/biz/orderProcessPlan/components/OrderReportDetail.vue b/src/views/biz/orderProcessPlan/components/OrderReportDetail.vue index e89e2ed..4eeef86 100644 --- a/src/views/biz/orderProcessPlan/components/OrderReportDetail.vue +++ b/src/views/biz/orderProcessPlan/components/OrderReportDetail.vue @@ -37,6 +37,8 @@ const columns = [ key: 'quantity', width: 120 }, + { title: '合格数量', key: 'qualifiedQty',align: 'center', width: 120}, + { title: '报废数量', key: 'scrapeQty',align: 'center', width: 120}, { title: '提交人', key: 'userName', diff --git a/src/views/biz/orderProcessPlan/components/ReportDetail.vue b/src/views/biz/orderProcessPlan/components/ReportDetail.vue index f23e6ae..cd89228 100644 --- a/src/views/biz/orderProcessPlan/components/ReportDetail.vue +++ b/src/views/biz/orderProcessPlan/components/ReportDetail.vue @@ -12,6 +12,8 @@ const searchForm = ref({ submitStatus: undefined }) +const reportTypeOptions = ref<{ label: string; value: any ;class:any}[]>([]) + const submitList = ref([]) //根据工序Id加载汇报详情 async function loadReportDetail() { @@ -33,28 +35,11 @@ const columns = [ { title: '提交数量', key: 'quantity', + align: 'center', width: 120 }, - { - title: '完成数量', - key: 'qualifiedQty', - width: 120 - }, - { - title: '报废数量', - key: 'scrapQty', - width: 120 - }, - { - title: '返工数量', - key: 'reworkQty', - width: 120 - }, - { - title: '让步接收数量', - key: 'connectionQty', - width: 120 - }, + { title: '合格数量', key: 'qualifiedQty',align: 'center', width: 120}, + { title: '报废数量', key: 'scrapeQty',align: 'center', width: 120}, { title: '提交人', key: 'userName', @@ -84,6 +69,10 @@ async function loadDictOptions() { const data = await dictDataApi.listByType('submit_status') submitStatusOptions.value = data.map(d => ({ label: d.dictLabel, value: (Number(d.dictValue) || d.dictValue),class:d.listClass })) }catch {} + try { + const data = await dictDataApi.listByType('qc_result_type') + reportTypeOptions.value = data.map(d => ({ label: d.dictLabel, value: (Number(d.dictValue) || d.dictValue),class:d.listClass })) + }catch {} } const doShowInner = () => { diff --git a/src/views/biz/qualityTesting/index.vue b/src/views/biz/qualityTesting/index.vue index 01b768a..b19ce77 100644 --- a/src/views/biz/qualityTesting/index.vue +++ b/src/views/biz/qualityTesting/index.vue @@ -180,8 +180,8 @@ - - + + - + - +