From 1b51d68a25779d137b26bd9eb55193be3c899ba1 Mon Sep 17 00:00:00 2001 From: shaoleiliu-netizen123 <480188199@qq.com> Date: Thu, 4 Jun 2026 14:49:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B4=BE=E5=B7=A5=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/qualityTesting.ts | 4 + src/views/biz/qualityTesting/index.vue | 110 +++++++++++++++++--- src/views/production/dispatchwork/index.vue | 16 +-- src/views/production/myassigtask/index.vue | 2 +- 4 files changed, 99 insertions(+), 33 deletions(-) diff --git a/src/api/qualityTesting.ts b/src/api/qualityTesting.ts index fd5d34d..42bca4d 100644 --- a/src/api/qualityTesting.ts +++ b/src/api/qualityTesting.ts @@ -68,6 +68,10 @@ export const qualityTestingApi = { submit(data: QcResultDetail[]) { return request({ url: '/mes/qc/judge', method: 'put', data }) }, + + submitBF(data: QcResultDetail[]) { + return request({ url: '/mes/qc/partial', method: 'post', data }) + }, //质检撤回 cancel(id: number) { return request({ url: `/mes/dispatch/revoke/${id}`, method: 'put' }) diff --git a/src/views/biz/qualityTesting/index.vue b/src/views/biz/qualityTesting/index.vue index 3d3c68d..29a26ea 100644 --- a/src/views/biz/qualityTesting/index.vue +++ b/src/views/biz/qualityTesting/index.vue @@ -312,12 +312,38 @@ - - + + + + +
+ + + +
+ + 点击或者拖动文件到该区域来上传 + + + 仅支持 PDF、DOC、DOCX,单文件最大10MB + +
+
+ + @@ -339,7 +365,7 @@ import { NButton, NSpace, NIcon, NUpload,NTag, useMessage, useDialog, type DataTableColumns, type UploadCustomRequestOptions, NDropdown } from 'naive-ui' -import { } from '@vicons/ionicons5' + import { SearchOutline, RefreshOutline, AddOutline, TrashOutline, CreateOutline, CloudUploadOutline, DownloadOutline, EllipsisHorizontalOutline, ArrowDownOutline, ArrowUpOutline @@ -391,6 +417,9 @@ const detailIsCollapse = ref(true) //提交判定明细 const submitDetailModalVisible = ref(false) const traceCodeShow = ref(false) +//提交明细/部分提交明细标识 +const submitFlag = ref() + const customOrderKeys = [ 'materialCode', @@ -522,6 +551,11 @@ const defaultFormDetailData:QcResultDetail = { handleAction: undefined, actionStatus: undefined } + +//提交附件 +const fileList = ref([]) +const uploadFiles = ref([]) + const formDetailOKData = reactive({ ...defaultFormDetailData, resultType: 1,handleAction:'下一道工序',actionStatus:1 }) const formDetailScrapData = reactive({ ...defaultFormDetailData,resultType: 2,handleAction:'报废次品',actionStatus:1 }) const formDetailReworkData = reactive({ ...defaultFormDetailData,resultType: 3,handleAction:'返工',actionStatus:1 }) @@ -567,6 +601,7 @@ const columns: DataTableColumns = [ // { title: '关联工序计划ID', key: 'processId' }, // { title: '物料ID', key: 'itemId' }, { title: '报检总数', key: 'totalQty',align: 'center' }, + { title: '已检验数量', key: 'inspectQty',align: 'center' }, { title: '质检状态', key: 'status',align: 'center', render(row) { const val = row.status @@ -606,8 +641,10 @@ const columns: DataTableColumns = [ options: [ { label: '查看详情', key: 'view' }, { type: 'divider' }, // 分割线 - { label: '提交判定明细', key: 'submitResultDetail' }, - { type: 'divider' }, // 分割线 + { label: '提交判定明细', key: 'submitResultDetail',show:row.status == 1 }, + { type: 'divider',show:row.status == 1 }, // 分割线 + { label: '提交部分判定明细', key: 'submitBFResultDetail',show:(row.status == 1 || row.status == 2) }, + { type: 'divider',show:(row.status == 1 || row.status == 2) }, // 分割线 { label: '查询判定明细', key: 'queryResultDetail' }, { type: 'divider' }, // 分割线 { label: '质检撤回', key: 'cancelQuality' }, @@ -621,6 +658,9 @@ const columns: DataTableColumns = [ case 'submitResultDetail': submitResultDetail(row) break + case 'submitBFResultDetail': + submitBFResultDetail(row) + break case 'queryResultDetail': queryResultDetail(row) break @@ -930,7 +970,7 @@ async function loadAssignWorkOrder() { } //提交判定明细 -async function submitResultDetail(row) { +function submitResultDetail(row) { Object.assign(formDetailOKData, reactive({ ...defaultFormDetailData, resultType: 1,handleAction:'下一道工序',actionStatus:1 })) Object.assign(formDetailScrapData, reactive({ ...defaultFormDetailData,resultType: 2,handleAction:'报废次品',actionStatus:1 })) Object.assign(formDetailReworkData, reactive({ ...defaultFormDetailData,resultType: 3,handleAction:'返工',actionStatus:1 })) @@ -938,6 +978,7 @@ async function submitResultDetail(row) { if (row.traceType != 1) { traceCodeShow.value = true } + submitFlag.value = true submitDetailModalVisible.value = true formDetailOKData.qcId = row.id formDetailScrapData.qcId = row.id @@ -946,18 +987,35 @@ async function submitResultDetail(row) { } async function handleSubmitResultDetail() { - try { - const submitParam = [formDetailOKData,formDetailScrapData,formDetailReworkData,formDetailConcessionData] - await qualityTestingApi.submit(submitParam) - message.success('提交成功') - }catch ( error) { - message.error('提交失败'+error) - } + const submitParam = [formDetailOKData,formDetailScrapData,formDetailReworkData,formDetailConcessionData] + submitFlag.value? await qualityTestingApi.submit(submitParam) : await qualityTestingApi.submitBF(submitParam) + + message.success('提交成功') submitDetailModalVisible.value = false loadData() } +//提交部分判定明细 +function submitBFResultDetail(row) { + Object.assign(formDetailOKData, reactive({ ...defaultFormDetailData, resultType: 1,handleAction:'下一道工序',actionStatus:1 })) + Object.assign(formDetailScrapData, reactive({ ...defaultFormDetailData,resultType: 2,handleAction:'报废次品',actionStatus:1 })) + Object.assign(formDetailReworkData, reactive({ ...defaultFormDetailData,resultType: 3,handleAction:'返工',actionStatus:1 })) + Object.assign(formDetailConcessionData, reactive({ ...defaultFormDetailData,resultType: 4,handleAction:'让步接收',actionStatus:1 })) + + if (row.traceType != 1) { + traceCodeShow.value = true + } + submitFlag.value = false + submitDetailModalVisible.value = true + formDetailOKData.qcId = row.id + formDetailScrapData.qcId = row.id + formDetailReworkData.qcId = row.id + formDetailConcessionData.qcId = row.id + +} + + //查询判定明细 function queryResultDetail(row) { let path = `detail/${row.id}`; @@ -983,6 +1041,24 @@ function handleCancelQuality(row) { }) } + +//上传附件 +const handleUploadChange = ({ file, fileList: list }: any) => { + uploadFiles.value = list.map(item => item.file) +} + +// 表单保存时调用 +const submitUpload = async (billId: number) => { + if (!uploadFiles.value.length) return + const formData = new FormData() + formData.append('billId', String(billId)) + uploadFiles.value.forEach(file => { + formData.append('files', file) + }) + console.log(uploadFiles); + +} + onMounted(() => { loadData() loadDictOptions() diff --git a/src/views/production/dispatchwork/index.vue b/src/views/production/dispatchwork/index.vue index 1b1f35f..c922db7 100644 --- a/src/views/production/dispatchwork/index.vue +++ b/src/views/production/dispatchwork/index.vue @@ -508,20 +508,6 @@ const columns = [ key: 'assingStatus', minWidth: 150, render(row:any) { - // let text = '' - // if(row.assingStatus == 1){ - // text = '待执行' - // }else if(row.assingStatus == 2){ - // text = '执行中' - // }else if(row.assingStatus == 3){ - // text = '质检中' - // }else if(row.assingStatus == 4){ - // text = '已汇报' - // }else if(row.assingStatus == 5){ - // text = '已关闭' - // } - - // return text const val = row.assingStatus const opt = qcAssingStatusOptions.value.find(o => o.value === val || String(o.value) === String(val)) if (!opt) return val ?? '-' @@ -626,7 +612,7 @@ const columns = [ } if(row.status == 2){ return h(NTag, { - type:'warning', + type:'error', size: 'small' }, { diff --git a/src/views/production/myassigtask/index.vue b/src/views/production/myassigtask/index.vue index 7ae28ff..15aa868 100644 --- a/src/views/production/myassigtask/index.vue +++ b/src/views/production/myassigtask/index.vue @@ -285,7 +285,7 @@ const columns = [ { align:'center', title: '工人名称', - key: 'stringUserName', + key: 'userName', minWidth: 200 }, {