feat(qc): 新增批量检验功能并优化数据处理流程
- 添加 BatchInspectionMainBo 和 BatchInspectionTensileBo 数据传输对象 - 集成检验明细列表到 WmsInspectionMainBo 和 WmsInspectionTensileDetailBo - 在 inspectionMain 控制器中实现批量插入检验主数据接口 - 在 inspectionTensileDetail 控制器中实现批量插入拉伸试验明细接口 - 重构前端检验样品页面,合并主表和明细表的保存操作 - 优化前端拉伸试验页面的批量新增逻辑,统一使用批量插入接口 - 更新服务层实现以支持批量插入并更新申请单关联ID列表 - 移除前端页面中单独的明细表增删改操作接口调用
This commit is contained in:
@@ -42,3 +42,12 @@ export function delInspectionMain(mainId) {
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 批量新增检验主及明细,并更新申请单detailIds
|
||||
export function batchInsertMainWithDetails(data) {
|
||||
return request({
|
||||
url: '/wms/inspectionMain/batchInsertWithDetails',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
@@ -42,3 +42,12 @@ export function delInspectionTensileDetail(detailId) {
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 批量插入明细并更新申请单detailIds
|
||||
export function batchInsertTensileDetails(data) {
|
||||
return request({
|
||||
url: '/wms/inspectionTensileDetail/batchInsertDetails',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
|
||||
<script>
|
||||
import { listInspectionMain, addInspectionMain, updateInspectionMain, delInspectionMain } from '@/api/mes/qc/inspectionMain'
|
||||
import { listInspectionDetail, addInspectionDetail, updateInspectionDetail } from '@/api/mes/qc/inspectionDetail'
|
||||
import { listInspectionDetail } from '@/api/mes/qc/inspectionDetail'
|
||||
import { listInspectionItemTemplate, getInfoByInspectionItem } from '@/api/mes/qc/inspectionItemTemplate'
|
||||
|
||||
export default {
|
||||
@@ -391,36 +391,28 @@ export default {
|
||||
|
||||
handleSaveMain(row) {
|
||||
row._saving = true
|
||||
const detailList = this.checkItems.map(checkItem => {
|
||||
const itemData = row._items[checkItem.itemName]
|
||||
if (!itemData || (!itemData.itemValue && !itemData.detailId)) return null
|
||||
return {
|
||||
detailId: itemData.detailId,
|
||||
mainId: row.mainId,
|
||||
itemName: itemData.itemName,
|
||||
itemValue: itemData.itemValue || '',
|
||||
itemUnit: itemData.itemUnit || '',
|
||||
upperLimit: itemData.upperLimit,
|
||||
lowerLimit: itemData.lowerLimit,
|
||||
rangeDesc: itemData.rangeDesc || ''
|
||||
}
|
||||
}).filter(Boolean)
|
||||
updateInspectionMain({
|
||||
mainId: row.mainId,
|
||||
sampleName: row.sampleName,
|
||||
sampleNo: row.sampleNo,
|
||||
batchNo: row.batchNo,
|
||||
inspectionDate: row.inspectionDate,
|
||||
remark: row.remark
|
||||
}).then(() => {
|
||||
const items = this.checkItems.map(checkItem => {
|
||||
const itemData = row._items[checkItem.itemName]
|
||||
return itemData || { itemName: checkItem.itemName }
|
||||
})
|
||||
const promises = items.map(item => {
|
||||
const data = {
|
||||
mainId: row.mainId,
|
||||
itemName: item.itemName,
|
||||
itemValue: item.itemValue,
|
||||
itemUnit: item.itemUnit,
|
||||
upperLimit: item.upperLimit,
|
||||
lowerLimit: item.lowerLimit
|
||||
}
|
||||
if (item.detailId) {
|
||||
data.detailId = item.detailId
|
||||
return updateInspectionDetail(data)
|
||||
} else if (item.itemValue) {
|
||||
return addInspectionDetail(data)
|
||||
}
|
||||
return Promise.resolve()
|
||||
})
|
||||
return Promise.all(promises)
|
||||
remark: row.remark,
|
||||
detailList: detailList
|
||||
}).then(() => {
|
||||
this.$message.success('保存成功')
|
||||
return listInspectionDetail({ mainId: row.mainId, pageNum: 1, pageSize: 9999 })
|
||||
|
||||
@@ -519,7 +519,7 @@
|
||||
|
||||
<script>
|
||||
import { listInspectionTensile, getInspectionTensile, addInspectionTensile, updateInspectionTensile } from '@/api/mes/qc/inspectionTensile'
|
||||
import { listInspectionTensileDetail, addInspectionTensileDetail, updateInspectionTensileDetail, delInspectionTensileDetail } from '@/api/mes/qc/inspectionTensileDetail'
|
||||
import { listInspectionTensileDetail, addInspectionTensileDetail, updateInspectionTensileDetail, delInspectionTensileDetail, batchInsertTensileDetails } from '@/api/mes/qc/inspectionTensileDetail'
|
||||
import { listMaterialCoil } from '@/api/wms/coil'
|
||||
import { listChemicalItem } from '@/api/mes/qc/chemicalItem'
|
||||
import { listPhysicalItem } from '@/api/mes/qc/physicalItem'
|
||||
@@ -765,16 +765,12 @@ export default {
|
||||
this.$message.warning('请选择钢卷')
|
||||
return
|
||||
}
|
||||
|
||||
let successCount = 0
|
||||
let failCount = 0
|
||||
this.detailLoading = true
|
||||
|
||||
for (let index = 0; index < coils.length; index++) {
|
||||
const coil = coils[index]
|
||||
const detailList = []
|
||||
for (const coil of coils) {
|
||||
try {
|
||||
const data = await this.fetchLatestChemAndPhys(coil.enterCoilNo)
|
||||
addInspectionTensileDetail({
|
||||
detailList.push({
|
||||
testMainId: this.currentTestId,
|
||||
steelCoilNo: coil.currentCoilNo,
|
||||
material: coil.material,
|
||||
@@ -782,21 +778,27 @@ export default {
|
||||
rawMaterialNo: coil.enterCoilNo,
|
||||
...data
|
||||
})
|
||||
successCount++
|
||||
} catch {
|
||||
failCount++
|
||||
// skip failed coil
|
||||
}
|
||||
}
|
||||
|
||||
this.batchAddDialogVisible = false
|
||||
if (failCount === 0) {
|
||||
this.$message.success(`批量新增成功,共新增 ${successCount} 条明细`)
|
||||
} else if (successCount === 0) {
|
||||
this.$message.error('批量新增失败')
|
||||
} else {
|
||||
this.$message.warning(`批量新增完成,成功 ${successCount} 条,失败 ${failCount} 条`)
|
||||
if (detailList.length === 0) {
|
||||
this.detailLoading = false
|
||||
this.$message.error('批量新增失败,请稍后重试')
|
||||
return
|
||||
}
|
||||
this.getDetailList()
|
||||
updateInspectionTensile({
|
||||
testId: this.currentTestId,
|
||||
detailList: detailList
|
||||
}).then(() => {
|
||||
this.$message.success(`批量新增成功,共新增 ${detailList.length} 条明细`)
|
||||
}).catch(() => {
|
||||
this.$message.error('批量新增失败')
|
||||
}).finally(() => {
|
||||
this.batchAddDialogVisible = false
|
||||
this.detailLoading = false
|
||||
this.getDetailList()
|
||||
})
|
||||
},
|
||||
|
||||
// 保存明细
|
||||
|
||||
Reference in New Issue
Block a user