From 383591d02f26b940882fb8c988ced9f6073b14d6 Mon Sep 17 00:00:00 2001 From: shaoleiliu-netizen123 <480188199@qq.com> Date: Sat, 22 Aug 2026 17:14:31 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/defectiveWarehouse.ts | 111 ++++ src/views/biz/defectiveWarehouse/index.vue | 572 ++++++++++++++++++ .../components/OrderReportDetail.vue | 2 + .../components/ReportDetail.vue | 29 +- src/views/biz/stockIn/index.vue | 2 +- .../componets/SubmitLogInfoPage.vue | 9 +- 6 files changed, 701 insertions(+), 24 deletions(-) create mode 100644 src/api/defectiveWarehouse.ts create mode 100644 src/views/biz/defectiveWarehouse/index.vue 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/biz/defectiveWarehouse/index.vue b/src/views/biz/defectiveWarehouse/index.vue new file mode 100644 index 0000000..e9f1405 --- /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..ea22f70 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: 'scrapQty',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..ef5c49b 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: 'scrapQty',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/stockIn/index.vue b/src/views/biz/stockIn/index.vue index 3b86ec3..afafdbc 100644 --- a/src/views/biz/stockIn/index.vue +++ b/src/views/biz/stockIn/index.vue @@ -385,7 +385,7 @@ const columns: DataTableColumns = [ const btns = [ h(NButton, { text: true, type: 'primary', size: 'small', onClick: () => openDetail(row) }, { default: () => '详情' }), ] - if (status === 0 || status === 1 || status === 3) { + if (status === 0 || status === 1) { btns.push( h(NButton, { text: true, diff --git a/src/views/production/componets/SubmitLogInfoPage.vue b/src/views/production/componets/SubmitLogInfoPage.vue index ce28f21..40aac49 100644 --- a/src/views/production/componets/SubmitLogInfoPage.vue +++ b/src/views/production/componets/SubmitLogInfoPage.vue @@ -65,7 +65,7 @@ const props =defineProps( //汇报状态字典 const submitStatusOptions = ref<{ label: string; value: any ;class:any}[]>([]) - +const reportTypeOptions = ref<{ label: string; value: any ;class:any}[]>([]) const pagination = reactive({ page: 1, @@ -75,10 +75,9 @@ const pagination = reactive({ //汇报信息表格 const reportRecordsColums:DataTableColumns = [ - { title: '汇报数量', key: 'quantity',align: 'center'}, { title: '合格数量', key: 'qualifiedQty',align: 'center'}, - { title: '报废数量', key: 'scrapQty',align: 'center'}, + { title: '报废数量', key: 'scrapeQty',align: 'center'}, { title: '汇报人', key: 'userName',align: 'center' }, { title: '状态', key: 'submitStatus',align: 'center', render: (row) => { @@ -98,6 +97,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 {} } //加载汇报信息 From 9291f5ffd22bbdf33d179d71087437a132b30e1b Mon Sep 17 00:00:00 2001 From: shaoleiliu-netizen123 <480188199@qq.com> Date: Sat, 22 Aug 2026 17:33:37 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/biz/orderProcessPlan/components/OrderReportDetail.vue | 2 +- src/views/biz/orderProcessPlan/components/ReportDetail.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/biz/orderProcessPlan/components/OrderReportDetail.vue b/src/views/biz/orderProcessPlan/components/OrderReportDetail.vue index ea22f70..4eeef86 100644 --- a/src/views/biz/orderProcessPlan/components/OrderReportDetail.vue +++ b/src/views/biz/orderProcessPlan/components/OrderReportDetail.vue @@ -38,7 +38,7 @@ const columns = [ width: 120 }, { title: '合格数量', key: 'qualifiedQty',align: 'center', width: 120}, - { title: '报废数量', key: 'scrapQty',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 ef5c49b..cd89228 100644 --- a/src/views/biz/orderProcessPlan/components/ReportDetail.vue +++ b/src/views/biz/orderProcessPlan/components/ReportDetail.vue @@ -39,7 +39,7 @@ const columns = [ width: 120 }, { title: '合格数量', key: 'qualifiedQty',align: 'center', width: 120}, - { title: '报废数量', key: 'scrapQty',align: 'center', width: 120}, + { title: '报废数量', key: 'scrapeQty',align: 'center', width: 120}, { title: '提交人', key: 'userName', From f9e91c42165c50347b17ef6ced511029d489b949 Mon Sep 17 00:00:00 2001 From: shaoleiliu-netizen123 <480188199@qq.com> Date: Tue, 25 Aug 2026 15:20:24 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/NCcode/index.vue | 2 +- src/views/biz/defectiveWarehouse/index.vue | 12 ++++---- src/views/biz/orderProcessPlan/board.vue | 3 +- src/views/biz/qualityTesting/index.vue | 34 ++++++---------------- src/views/lllustrated/index.vue | 2 +- src/views/production/myassigtask/index.vue | 9 +++++- 6 files changed, 27 insertions(+), 35 deletions(-) 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 index e9f1405..3c83c52 100644 --- a/src/views/biz/defectiveWarehouse/index.vue +++ b/src/views/biz/defectiveWarehouse/index.vue @@ -272,6 +272,9 @@ const columns: DataTableColumns = [ var status = row.status if (status == 0 || status == 1) { return h('div', {style: {display: 'flex', alignItems: 'center', gap: '8px', flexWrap: 'nowrap'}}, [ + h(NButton, {size: 'small', quaternary: true, onClick: () => handleDetail(row)}, { + default: () => ['详情'] + }), h(NButton, {size: 'small', quaternary: true, onClick: () => handleConfirm(row)}, { default: () => [h(NIcon, null, {default: () => h(CreateOutline)}), '确认入库'] }), @@ -280,18 +283,15 @@ const columns: DataTableColumns = [ }), h(NButton, {size: 'small', quaternary: true, type: 'error', onClick: () => handleDelete(row)}, { default: () => [h(NIcon, null, {default: () => h(TrashOutline)}), ' 删除'] - }), - h(NButton, {size: 'small', quaternary: true, onClick: () => handleDetail(row)}, { - default: () => ['详情'] }) ]) } else if (status == 2) { return h('div', {style: {display: 'flex', alignItems: 'center', gap: '8px', flexWrap: 'nowrap'}}, [ - h(NButton, {size: 'small', quaternary: true, onClick: () => handleCancel(row)}, { - default: () => [h(NIcon, null, {default: () => h(CreateOutline)}), '撤回入库'] - }), h(NButton, {size: 'small', quaternary: true, onClick: () => handleDetail(row)}, { default: () => ['详情'] + }), + h(NButton, {size: 'small', quaternary: true, onClick: () => handleCancel(row)}, { + default: () => [h(NIcon, null, {default: () => h(CreateOutline)}), '撤回入库'] }) ]) } diff --git a/src/views/biz/orderProcessPlan/board.vue b/src/views/biz/orderProcessPlan/board.vue index e84bb04..d0c3b49 100644 --- a/src/views/biz/orderProcessPlan/board.vue +++ b/src/views/biz/orderProcessPlan/board.vue @@ -1326,7 +1326,8 @@ function disphand(process: ProcessPlanItemVO, order?: OrderProcessPlanVO) { const planQty = Number(entity.quantity) || 0 const completedQty = Number(process.completedQty) || 0 - const remainQty = Math.max(0, planQty - completedQty) + const patchNum = Number(process.patchNum) || 0 + const remainQty = Math.max(0, planQty - patchNum) dispatchmodal.value = true dispatchformRef.value?.restoreValidation() dispatchform.id = entity.id 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 @@ - - + + - + - +