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 = ''