feat: 增加 BOM 另存为跨版本内容查重校验
This commit is contained in:
@ -224,6 +224,7 @@ const isEditMode = ref(false)
|
||||
const isSaveAsMode = ref(false) // 任务1:标记是否为另存为模式
|
||||
let originalVersion = '' // 保存原始版本号用于计算升级选项
|
||||
let currentBomNo = '' // 保存当前操作的 BOM 编号用于计算版本避让
|
||||
let originalChildren: ChildRow[] = [] // 保存原始子件数据用于本地查重
|
||||
|
||||
const bomList = ref<BomItem[]>([])
|
||||
const materialOptions = ref<MaterialBase[]>([])
|
||||
@ -441,6 +442,8 @@ const handleSaveAs = async (row: BomItem) => {
|
||||
// 保存原始版本号和 BOM 编号用于计算升级选项
|
||||
originalVersion = form.version
|
||||
currentBomNo = row.bom_no // 保存当前操作的 BOM 编号
|
||||
// 保存原始子件数据用于本地查重
|
||||
originalChildren = JSON.parse(JSON.stringify(form.children))
|
||||
// 默认选中次版本升级
|
||||
form.versionUpgradeType = 'minor'
|
||||
form.version = versionOptions.value.minor
|
||||
@ -524,6 +527,21 @@ const submitForm = async () => {
|
||||
return ElMessage.warning('子件列表中存在重复物料,请合并用量或删除重复项')
|
||||
}
|
||||
|
||||
// ===== 另存为本地查重:检查是否修改过 =====
|
||||
if (isSaveAsMode.value && originalChildren.length > 0) {
|
||||
// 将当前 children 和原始 children 转换为 set 进行比较
|
||||
const currentSet = new Set(form.children.map(c => `${c.child_id}-${c.dosage}`))
|
||||
const originalSet = new Set(originalChildren.map(c => `${c.child_id}-${c.dosage}`))
|
||||
|
||||
// 比较两个集合是否完全相同
|
||||
const isIdentical = currentSet.size === originalSet.size &&
|
||||
[...currentSet].every(item => originalSet.has(item))
|
||||
|
||||
if (isIdentical) {
|
||||
return ElMessage.warning('您未修改任何子件,与原版本内容一致,请修改后再保存')
|
||||
}
|
||||
}
|
||||
|
||||
const payload = {
|
||||
bom_no: fullBomNo.value,
|
||||
version: form.version,
|
||||
@ -540,8 +558,11 @@ const submitForm = async () => {
|
||||
dialogVisible.value = false
|
||||
fetchBomList()
|
||||
} else { ElMessage.error(res.msg || '保存失败') }
|
||||
} catch (e) {
|
||||
// 错误已由全局拦截器统一处理
|
||||
} catch (e: any) {
|
||||
// 确保后端返回的错误信息能正确展示
|
||||
if (e.response?.data?.msg) {
|
||||
ElMessage.error(e.response.data.msg)
|
||||
}
|
||||
}
|
||||
finally { saving.value = false }
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user