fix(bom): 另存为版本自增基准改响应式,修复 V1.1→V1.2 未升级

- originalVersion/currentBomNo 为普通 let,computed 读不到变化;且 handleSaveAs 在赋值前就算版本候选,导致从 V1.1 另存得到 V1.1 覆盖原版本
- 新增响应式 upgradeBaseVersion/upgradeBaseBomNo,versionOptions 改读 ref;handleSaveAs 先锁定基准再计算
- 修复后:V1.1→V1.2、V1.9→V1.10、主版本→V2.0,占用号自动跳过
This commit is contained in:
yueli
2026-09-08 18:19:28 +08:00
parent 00dde3a896
commit 578c15dc95

View File

@ -424,6 +424,9 @@ const isSaveAsMode = ref(false)
const isReadOnlyMode = ref(false) const isReadOnlyMode = ref(false)
let originalVersion = '' let originalVersion = ''
let currentBomNo = '' let currentBomNo = ''
// ★ 版本升级的响应式基准plain let 不是响应式computed 读不到变化 → 1.1 升次版本会算出错的候选)
const upgradeBaseVersion = ref('')
const upgradeBaseBomNo = ref('')
let originalChildren: ChildRow[] = [] let originalChildren: ChildRow[] = []
let pendingDraftBomNo = '' let pendingDraftBomNo = ''
let pendingDraftVersion = '' let pendingDraftVersion = ''
@ -617,11 +620,11 @@ const form = reactive({
const pureBomNo = computed(() => form.bom_no) const pureBomNo = computed(() => form.bom_no)
const versionOptions = computed(() => { const versionOptions = computed(() => {
const ver = originalVersion || 'V1.0' const ver = upgradeBaseVersion.value || 'V1.0'
const allItems: any[] = [] const allItems: any[] = []
groupCache.value.forEach((items) => allItems.push(...items)) groupCache.value.forEach((items) => allItems.push(...items))
const occupiedVersions = new Set( 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 => { const getNextMinor = (baseMajor: number, baseMinor: number): string => {
let minor = baseMinor + 1 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.bom_no = (raw.parent_spec || row.bom_no).split('/')[0].trim()
form.remark = raw.remark || '' form.remark = raw.remark || ''
form.versionUpgradeType = 'minor' form.versionUpgradeType = 'minor'
form.version = versionOptions.value?.minor || 'V1.1'
// ★ 先锁定升级基准(原版本号 + 该 BOM再计算目标版本保证 V1.1 → V1.2 等正确且跳过已占用号
originalVersion = raw.version || '' originalVersion = raw.version || ''
currentBomNo = row.bom_no 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)) originalChildren = JSON.parse(JSON.stringify(form.children))
originalDraftHash.value = getDraftHash() originalDraftHash.value = getDraftHash()
@ -1207,6 +1215,8 @@ const resetForm = () => {
isReadOnlyMode.value = false isReadOnlyMode.value = false
originalVersion = '' originalVersion = ''
currentBomNo = '' currentBomNo = ''
upgradeBaseVersion.value = ''
upgradeBaseBomNo.value = ''
childSearchKeyword.value = '' childSearchKeyword.value = ''
parentNameInput.value = '' parentNameInput.value = ''
originalDraftHash.value = '' originalDraftHash.value = ''