From f0bddf6c7ae047193c90c9fb037cbfa47dbdf758 Mon Sep 17 00:00:00 2001 From: shenzhouyu Date: Wed, 25 Mar 2026 14:49:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=AB=E8=89=BE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/qc/qc.js | 22 + src/views/modules/qc/FQCResultEntry.vue | 4 +- src/views/modules/qc/IQCResultEntry.vue | 4 +- src/views/modules/qc/SQCFileTable.vue | 219 +++++ src/views/modules/qc/SQCResultEntry.vue | 1054 ++++++++++++++++++++++ src/views/modules/qc/qcPartAttribute.vue | 562 +++++++++++- 6 files changed, 1856 insertions(+), 9 deletions(-) create mode 100644 src/views/modules/qc/SQCFileTable.vue create mode 100644 src/views/modules/qc/SQCResultEntry.vue diff --git a/src/api/qc/qc.js b/src/api/qc/qc.js index 81bb371..4bdeabd 100644 --- a/src/api/qc/qc.js +++ b/src/api/qc/qc.js @@ -85,6 +85,14 @@ export const getManufacturerList = data => createAPI(`/pms/qc/getManufacturerLis export const getPartTemplateLists = data => createAPI(`/pms/qc/getPartTemplateLists`,'post',data) export const qcPartAttributeEdit = data => createAPI(`/pms/qc/qcPartAttributeEdit`,'post',data) export const overLoadSearchPartInfo = data => createAPI(`/pms/qc/overLoadSearchPartInfo`,'post',data) +export const partAttrDetailedSearch = data => createAPI(`/pms/qc/partAttrDetailedSearch`,'post',data) +export const getPartAttrItemList = data => createAPI(`/pms/qc/getPartAttrItemList`,'post',data) +export const getPartAttrItem = data => createAPI(`/pms/qc/getPartAttrItem`,'post',data) +export const addPartAttrItemDetails = data => createAPI(`/pms/qc/addPartAttrItemDetails`,'post',data) +export const delPartAttrItemDetails = data => createAPI(`/pms/qc/delPartAttrItemDetails`,'post',data) +export const savePartAttrDetailed = data => createAPI(`/pms/qc/savePartAttrDetailed`,'post',data) +export const goUpPartAttrItem = data => createAPI(`/pms/qc/goUpPartAttrItem`,'post',data) +export const goDownPartAttrItem = data => createAPI(`/pms/qc/goDownPartAttrItem`,'post',data) // ===================================== 类别属性设置 ===================================== export const qcFamilyAttributeSearch = data => createAPI(`/pms/qc/qcFamilyAttributeSearch`,'post',data) @@ -211,6 +219,20 @@ export const addItemObject = data => createAPI(`/pms/qc/addItemObject`,'post',da export const deleteItemObject = data => createAPI(`/pms/qc/deleteItemObject`,'post',data) export const updateItemObject = data => createAPI(`/pms/qc/updateItemObject`,'post',data) export const getIQCItemObjectList = data => createAPI(`/pms/qc/getIQCItemObjectList`,'post',data) + +// ===================================== SQC检验 ===================================== +export const qcSQCInspectionSearch = data => createAPI(`/pms/qc/qcSQCInspectionSearch`,'post',data) +export const sqcDetailSearch = data => createAPI(`/pms/qc/sqcDetailSearch`,'post',data) +export const selectSQCSubDetailedRecord = data => createAPI(`/pms/qc/selectSQCSubDetailedRecord`,'post',data) +export const checkSQCSubDetailValue = data => createAPI(`/pms/qc/checkSQCSubDetailValue`,'post',data) +export const saveSQCDetailedRecord = data => createAPI(`/pms/qc/saveSQCDetailedRecord`,'post',data) +export const checkSQCIsSubmit = data => createAPI(`/pms/qc/checkSQCIsSubmit`,'post',data) +export const saveSQCSubDetailed = data => createAPI(`/pms/qc/saveSQCSubDetailed`,'post',data) +export const saveSQCSubmitResult = data => createAPI(`/pms/qc/saveSQCSubmitResult`,'post',data) +export const sqcRecordDelete = data => createAPI(`/pms/qc/sqcRecordDelete`,'post',data) +export const sqcRecordOverLoad = data => createAPI(`/pms/qc/sqcRecordOverLoad`,'post',data) +export const actionSQCInspection = data => createAPI(`/pms/qc/actionSQCInspection`,'post',data) +export const getSQCItemObjectList = data => createAPI(`/pms/qc/getSQCItemObjectList`,'post',data) export const getFAIItemObjectList = data => createAPI(`/pms/qc/getFAIItemObjectList`,'post',data) export const getFQCItemObjectList = data => createAPI(`/pms/qc/getFQCItemObjectList`,'post',data) export const getIPQCItemObjectList = data => createAPI(`/pms/qc/getIPQCItemObjectList`,'post',data) diff --git a/src/views/modules/qc/FQCResultEntry.vue b/src/views/modules/qc/FQCResultEntry.vue index 8cf9f04..37c12f3 100644 --- a/src/views/modules/qc/FQCResultEntry.vue +++ b/src/views/modules/qc/FQCResultEntry.vue @@ -1089,10 +1089,10 @@ serialNumber: '301015Table1BuDesc', tableId: "301015Table1", tableName: "FQC检验记录表", - columnProp: 'buDesc', + columnProp: 'site', headerAlign: "center", align: "center", - columnLabel: 'BU', + columnLabel: '工厂编号', columnHidden: false, columnImage: false, columnSortable: false, diff --git a/src/views/modules/qc/IQCResultEntry.vue b/src/views/modules/qc/IQCResultEntry.vue index 677b6ed..3661634 100644 --- a/src/views/modules/qc/IQCResultEntry.vue +++ b/src/views/modules/qc/IQCResultEntry.vue @@ -961,10 +961,10 @@ serialNumber: '301006Table1BuDesc', tableId: "301006Table1", tableName: "IQC检验记录表", - columnProp: 'buDesc', + columnProp: 'site', headerAlign: "center", align: "center", - columnLabel: 'BU', + columnLabel: '工厂编号', columnHidden: false, columnImage: false, columnSortable: false, diff --git a/src/views/modules/qc/SQCFileTable.vue b/src/views/modules/qc/SQCFileTable.vue new file mode 100644 index 0000000..26a58d2 --- /dev/null +++ b/src/views/modules/qc/SQCFileTable.vue @@ -0,0 +1,219 @@ + + + + + + diff --git a/src/views/modules/qc/SQCResultEntry.vue b/src/views/modules/qc/SQCResultEntry.vue new file mode 100644 index 0000000..9fc47d1 --- /dev/null +++ b/src/views/modules/qc/SQCResultEntry.vue @@ -0,0 +1,1054 @@ + + + + + + diff --git a/src/views/modules/qc/qcPartAttribute.vue b/src/views/modules/qc/qcPartAttribute.vue index cb7e281..a157229 100644 --- a/src/views/modules/qc/qcPartAttribute.vue +++ b/src/views/modules/qc/qcPartAttribute.vue @@ -83,11 +83,12 @@ fixed="right" header-align="center" align="center" - width="180" + width="240" label="操作"> @@ -126,7 +127,7 @@ - 是否免检
+ 是否免检
@@ -161,6 +162,34 @@ + + + + IQC检验 + + + FAI检验 + + + IPQC检验 + + + PQC检验 + + + + + FQC检验 + + + RQC检验 + + + SQC检验 + + + + @@ -439,6 +468,190 @@ + + + + + + + + + + + + + + + + + 新增 + + + +
+ + + + + + + + + + + + + + + + + +
+ + 保存 + 关闭 + +
+ + + +
+ + + + + + + + + + + + + + + 查询 + + +
+ + + 可选项目: + + + + + + + + + + + +
+ 添加>> +
+
+ 删除<< +
+
+ + 已有项目: + + + + + + + +
+ + 关闭 + +
+
@@ -711,6 +924,14 @@ getAllResourceList, // 查询机台列表 getSiteAndBuByUserName, searchPartInfo, // 查询物料信息 + partAttrDetailedSearch, + getPartAttrItemList, + getPartAttrItem, + addPartAttrItemDetails, + delPartAttrItemDetails, + savePartAttrDetailed, + goUpPartAttrItem, + goDownPartAttrItem } from "@/api/qc/qc.js" import {getTableDefaultListLanguage, getTableUserListLanguage} from "@/api/table.js" import Chooselist from '@/views/modules/common/Chooselist_eam' @@ -776,7 +997,14 @@ createTime: '', createBy: this.$store.state.user.name, attributeType: 'A', - exemptInspection: '' + exemptInspection: 'N', + iqcExempt: 'N', + faiExempt: 'N', + ipqcExempt: 'N', + pqcExempt: 'N', + fqcExempt: 'N', + oqcExempt: 'N', + sqcExempt: 'N' }, detailData: { site: '', @@ -792,6 +1020,60 @@ templateName: '', createBy: this.$store.state.user.name }, + standardDetailModelFlag: false, + standardFastAddFlag: false, + standardDetailList: [], + standardItemList1: [], + standardItemList2: [], + standardItemSelections1: [], + standardItemSelections2: [], + standardCurrentRow: {}, + standardDetailData: { + site: '', + buNo: '', + partNo: '', + partDesc: '', + attributeNo: '', + attributeType: 'A', + itemType: 'D', + itemNo: '', + itemDesc: '', + inspectionTypeNo: '', + inspectionTypeName: '', + createBy: this.$store.state.user.name + }, + standardColumnDetailList: [ + { + columnProp: 'itemNo', + headerAlign: 'center', + align: 'center', + columnLabel: '检验项目编码', + columnHidden: false, + columnImage: false, + columnSortable: false, + columnWidth: 80 + }, + { + columnProp: 'itemDesc', + headerAlign: 'center', + align: 'left', + columnLabel: '检验项目名称', + columnHidden: false, + columnImage: false, + columnSortable: false, + columnWidth: 250 + }, + { + columnProp: 'valueType', + headerAlign: 'center', + align: 'center', + columnLabel: '检测值类型', + columnHidden: false, + columnImage: false, + columnSortable: false, + columnWidth: 90 + } + ], columnList: [ { userId: this.$store.state.user.name, @@ -1528,6 +1810,7 @@ }, searchPartInfo () { + this.partDetailData.site = this.modalData.site if (!this.partDetailData.partNo && !this.partDetailData.partDesc && !this.partDetailData.sku && !this.partDetailData.cinvSourceCode) { this.partInfoList = [] @@ -1672,7 +1955,14 @@ firstIPQCPatrolTime: '', lastIPQCPatrolTime: '', cycleIPQCPatrolTime: '', - exemptInspection: '' + exemptInspection: 'N', + iqcExempt: 'N', + faiExempt: 'N', + ipqcExempt: 'N', + pqcExempt: 'N', + fqcExempt: 'N', + oqcExempt: 'N', + sqcExempt: 'N' } this.modalDisableFlag = false this.modalFlag = true @@ -1701,7 +1991,14 @@ firstIPQCPatrolTime: row.firstIPQCPatrolTime, lastIPQCPatrolTime: row.lastIPQCPatrolTime, cycleIPQCPatrolTime: row.cycleIPQCPatrolTime, - exemptInspection: row.exemptInspection + exemptInspection: row.exemptInspection || 'N', + iqcExempt: row.iqcExempt || 'N', + faiExempt: row.faiExempt || 'N', + ipqcExempt: row.ipqcExempt || 'N', + pqcExempt: row.pqcExempt || 'N', + fqcExempt: row.fqcExempt || 'N', + oqcExempt: row.oqcExempt || 'N', + sqcExempt: row.sqcExempt || 'N' } this.modalDisableFlag = true this.modalFlag = true @@ -1967,6 +2264,261 @@ }) }, + syncStandardInspectionTypeName () { + const o = this.options.find(i => i.inspectionTypeNo === this.standardDetailData.inspectionTypeNo) + if (o) { + this.standardDetailData.inspectionTypeName = o.inspectionTypeName + } + }, + + standardDetailModal (row) { + this.standardDetailData.site = row.site + this.standardDetailData.buNo = row.buNo + this.standardDetailData.partNo = row.partNo + this.standardDetailData.partDesc = row.partDesc + this.standardDetailData.attributeNo = row.partNo + this.standardDetailData.attributeType = 'A' + this.standardDetailData.itemType = 'D' + if (this.options && this.options.length > 0) { + this.standardDetailData.inspectionTypeNo = this.options[0].inspectionTypeNo + this.standardDetailData.inspectionTypeName = this.options[0].inspectionTypeName + } + partAttrDetailedSearch(this.standardDetailData).then(({data}) => { + if (data.code === 0) { + this.standardDetailList = data.rows || [] + } + }) + this.standardDetailModelFlag = true + }, + + closeStandardDialog () { + this.standardDetailList = [] + this.standardItemList1 = [] + this.standardItemList2 = [] + }, + + standardAddFastModal () { + this.syncStandardInspectionTypeName() + this.standardItemSelections1 = null + this.standardItemSelections2 = null + getPartAttrItemList(this.standardDetailData).then(({data}) => { + if (data.code === 0) { + this.standardItemList1 = data.row1 || [] + this.standardItemList2 = data.row2 || [] + } + }) + this.standardFastAddFlag = true + }, + + standardGetItem () { + this.syncStandardInspectionTypeName() + getPartAttrItem(this.standardDetailData).then(({data}) => { + if (data.code === 0) { + this.standardItemList1 = data.rows || [] + } + }) + }, + + standardItemClickRow (row) { + this.standardCurrentRow = JSON.parse(JSON.stringify(row)) + }, + + standardItemClickRow1 (row) { + this.$refs.standardItemTable1.toggleRowSelection(row) + }, + + standardItemClickRow2 (row) { + this.$refs.standardItemTable2.toggleRowSelection(row) + }, + + standardSelectionItem1 (val) { + this.standardItemSelections1 = val + }, + + standardSelectionItem2 (val) { + this.standardItemSelections2 = val + }, + + standardAddItem () { + if (this.standardItemSelections1 == null || this.standardItemSelections1.length === 0) { + this.$message.warning('请选择可选项目!') + return + } + if (!this.standardDetailData.inspectionTypeName) { + this.syncStandardInspectionTypeName() + } + let inData = { + site: this.standardDetailData.site, + buNo: this.standardDetailData.buNo, + attributeNo: this.standardDetailData.attributeNo, + attributeType: 'A', + inspectionTypeNo: this.standardDetailData.inspectionTypeNo, + itemType: this.standardDetailData.itemType, + updateBy: this.$store.state.user.name, + itemList: this.standardItemSelections1 + } + addPartAttrItemDetails(inData).then(({data}) => { + if (data && data.code === 0) { + getPartAttrItemList(this.standardDetailData).then(({data}) => { + if (data.code === 0) { + this.standardItemList1 = data.row1 || [] + this.standardItemList2 = data.row2 || [] + } + }) + this.standardItemSelections1 = [] + this.$message.success('操作成功') + } else { + this.$alert((data && data.msg) || '操作失败', '错误', { confirmButtonText: '确定' }) + } + }) + }, + + standardDeleteItem () { + if (this.standardItemSelections2 == null || this.standardItemSelections2.length === 0) { + this.$message.warning('请选择已有项目!') + return + } + let inData = { + site: this.standardDetailData.site, + buNo: this.standardDetailData.buNo, + attributeNo: this.standardDetailData.attributeNo, + attributeType: 'A', + updateBy: this.$store.state.user.name, + itemList: this.standardItemSelections2 + } + delPartAttrItemDetails(inData).then(({data}) => { + if (data && data.code === 0) { + getPartAttrItemList(this.standardDetailData).then(({data}) => { + if (data.code === 0) { + this.standardItemList1 = data.row1 || [] + this.standardItemList2 = data.row2 || [] + } + }) + this.standardItemSelections2 = [] + this.$message.success('操作成功') + } else { + this.$alert((data && data.msg) || '操作失败', '错误', { confirmButtonText: '确定' }) + } + }) + }, + + standardRefreshDetailList () { + partAttrDetailedSearch(this.standardDetailData).then(({data}) => { + if (data.code === 0) { + this.standardDetailList = data.rows || [] + } + }) + }, + + saveStandardDetail () { + let tempData = { + site: this.standardDetailData.site, + buNo: this.standardDetailData.buNo, + attributeNo: this.standardDetailData.attributeNo, + attributeType: 'A', + inspectionTypeNo: this.standardDetailData.inspectionTypeNo, + updateBy: this.$store.state.user.name, + itemList: this.standardDetailList + } + savePartAttrDetailed(tempData).then(({data}) => { + if (data && data.code === 0) { + this.getDataList() + this.standardDetailModelFlag = false + this.$message.success('操作成功') + } else { + this.$alert((data && data.msg) || '操作失败', '错误', { confirmButtonText: '确定' }) + } + }) + }, + + standardDelItemDetails (row) { + this.$confirm('是否删除该检验项目?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + delPartAttrItemDetails({ + site: this.standardDetailData.site, + buNo: this.standardDetailData.buNo, + attributeNo: this.standardDetailData.attributeNo, + attributeType: 'A', + updateBy: this.$store.state.user.name, + itemList: [row] + }).then(({data}) => { + if (data && data.code === 0) { + partAttrDetailedSearch(this.standardDetailData).then(({data}) => { + if (data.code === 0) { + this.standardDetailList = data.rows || [] + } + }) + this.$message.success('操作成功') + } else { + this.$alert((data && data.msg) || '操作失败', '错误', { confirmButtonText: '确定' }) + } + }) + }).catch(() => {}) + }, + + standardGoUp () { + if (!this.standardCurrentRow || !this.standardCurrentRow.itemNo) { + this.$message.warning('请先点击表格选择一行') + return + } + const row = { + ...this.standardCurrentRow, + site: this.standardDetailData.site, + buNo: this.standardDetailData.buNo, + attributeNo: this.standardDetailData.attributeNo + } + goUpPartAttrItem(row).then(({data}) => { + if (data && data.code === 0) { + partAttrDetailedSearch(this.standardDetailData).then(({data}) => { + if (data.code === 0) { + this.standardDetailList = data.rows || [] + for (let i = 0; i < this.standardDetailList.length; i++) { + if (this.standardDetailList[i].itemNo === row.itemNo) { + this.$refs.standardDetailTable.setCurrentRow(this.standardDetailList[i]) + this.standardCurrentRow = JSON.parse(JSON.stringify(this.standardDetailList[i])) + break + } + } + this.$message.success('操作成功') + } + }) + } + }) + }, + + standardGoDown () { + if (!this.standardCurrentRow || !this.standardCurrentRow.itemNo) { + this.$message.warning('请先点击表格选择一行') + return + } + const row = { + ...this.standardCurrentRow, + site: this.standardDetailData.site, + buNo: this.standardDetailData.buNo, + attributeNo: this.standardDetailData.attributeNo + } + goDownPartAttrItem(row).then(({data}) => { + if (data && data.code === 0) { + partAttrDetailedSearch(this.standardDetailData).then(({data}) => { + if (data.code === 0) { + this.standardDetailList = data.rows || [] + for (let i = 0; i < this.standardDetailList.length; i++) { + if (this.standardDetailList[i].itemNo === row.itemNo) { + this.$refs.standardDetailTable.setCurrentRow(this.standardDetailList[i]) + this.standardCurrentRow = JSON.parse(JSON.stringify(this.standardDetailList[i])) + break + } + } + this.$message.success('操作成功') + } + }) + } + }) + }, + // 删除物料属性中的模板 deletePartAttributeDetails (row) { this.$confirm(`是否删除这个检验模板?`, '提示', {