From 578c15dc9543042ecc00733c3660c5e1a7bf1834 Mon Sep 17 00:00:00 2001 From: yueli Date: Tue, 8 Sep 2026 18:19:28 +0800 Subject: [PATCH] =?UTF-8?q?fix(bom):=20=E5=8F=A6=E5=AD=98=E4=B8=BA?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E8=87=AA=E5=A2=9E=E5=9F=BA=E5=87=86=E6=94=B9?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E5=BC=8F=EF=BC=8C=E4=BF=AE=E5=A4=8D=20V1.1?= =?UTF-8?q?=E2=86=92V1.2=20=E6=9C=AA=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - originalVersion/currentBomNo 为普通 let,computed 读不到变化;且 handleSaveAs 在赋值前就算版本候选,导致从 V1.1 另存得到 V1.1 覆盖原版本 - 新增响应式 upgradeBaseVersion/upgradeBaseBomNo,versionOptions 改读 ref;handleSaveAs 先锁定基准再计算 - 修复后:V1.1→V1.2、V1.9→V1.10、主版本→V2.0,占用号自动跳过 --- inventory-web/src/views/bom/BomManage.vue | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/inventory-web/src/views/bom/BomManage.vue b/inventory-web/src/views/bom/BomManage.vue index 80ec231..9fc1eb8 100644 --- a/inventory-web/src/views/bom/BomManage.vue +++ b/inventory-web/src/views/bom/BomManage.vue @@ -424,6 +424,9 @@ const isSaveAsMode = ref(false) const isReadOnlyMode = ref(false) let originalVersion = '' let currentBomNo = '' +// ★ 版本升级的响应式基准(plain let 不是响应式,computed 读不到变化 → 1.1 升次版本会算出错的候选) +const upgradeBaseVersion = ref('') +const upgradeBaseBomNo = ref('') let originalChildren: ChildRow[] = [] let pendingDraftBomNo = '' let pendingDraftVersion = '' @@ -617,11 +620,11 @@ const form = reactive({ const pureBomNo = computed(() => form.bom_no) const versionOptions = computed(() => { - const ver = originalVersion || 'V1.0' + const ver = upgradeBaseVersion.value || 'V1.0' const allItems: any[] = [] groupCache.value.forEach((items) => allItems.push(...items)) const occupiedVersions = new Set( - allItems.filter((item: any) => item.bom_no === currentBomNo).map((item: any) => item.version) + allItems.filter((item: any) => item.bom_no === upgradeBaseBomNo.value).map((item: any) => item.version) ) const getNextMinor = (baseMajor: number, baseMinor: number): string => { let minor = baseMinor + 1 @@ -1008,10 +1011,15 @@ const handleSaveAs = async (row: any) => { form.bom_no = (raw.parent_spec || row.bom_no).split('/')[0].trim() form.remark = raw.remark || '' form.versionUpgradeType = 'minor' - form.version = versionOptions.value?.minor || 'V1.1' + // ★ 先锁定升级基准(原版本号 + 该 BOM),再计算目标版本,保证 V1.1 → V1.2 等正确且跳过已占用号 originalVersion = raw.version || '' currentBomNo = row.bom_no + upgradeBaseVersion.value = originalVersion + upgradeBaseBomNo.value = currentBomNo + const upgradeOpts = versionOptions.value + form.version = upgradeOpts?.minor || upgradeOpts?.major || 'V1.1' + originalChildren = JSON.parse(JSON.stringify(form.children)) originalDraftHash.value = getDraftHash() @@ -1207,6 +1215,8 @@ const resetForm = () => { isReadOnlyMode.value = false originalVersion = '' currentBomNo = '' + upgradeBaseVersion.value = '' + upgradeBaseBomNo.value = '' childSearchKeyword.value = '' parentNameInput.value = '' originalDraftHash.value = ''