fix: 完善另存为版本推算逻辑,自动避让已存在的版本号
This commit is contained in:
@ -223,6 +223,7 @@ const saving = ref(false)
|
||||
const isEditMode = ref(false)
|
||||
const isSaveAsMode = ref(false) // 任务1:标记是否为另存为模式
|
||||
let originalVersion = '' // 保存原始版本号用于计算升级选项
|
||||
let currentBomNo = '' // 保存当前操作的 BOM 编号用于计算版本避让
|
||||
|
||||
const bomList = ref<BomItem[]>([])
|
||||
const materialOptions = ref<MaterialBase[]>([])
|
||||
@ -310,21 +311,50 @@ const fullBomNo = computed(() => {
|
||||
return form.bom_suffix
|
||||
})
|
||||
|
||||
// 任务1:根据原版本号计算升级选项
|
||||
// 任务1:根据原版本号计算升级选项(智能避让已占用版本)
|
||||
const versionOptions = computed(() => {
|
||||
const ver = originalVersion || 'V1.0'
|
||||
|
||||
// 获取当前 BOM 编号下所有已占用的版本号集合
|
||||
const occupiedVersions = new Set(
|
||||
bomList.value
|
||||
.filter(item => item.bom_no === currentBomNo)
|
||||
.map(item => item.version)
|
||||
)
|
||||
|
||||
// 智能递增避让函数
|
||||
const getNextMinor = (baseMajor: number, baseMinor: number): string => {
|
||||
let minor = baseMinor + 1
|
||||
let candidate = `V${baseMajor}.${minor}`
|
||||
while (occupiedVersions.has(candidate)) {
|
||||
minor++
|
||||
candidate = `V${baseMajor}.${minor}`
|
||||
}
|
||||
return candidate
|
||||
}
|
||||
|
||||
const getNextMajor = (baseMajor: number): string => {
|
||||
let major = baseMajor + 1
|
||||
let candidate = `V${major}.0`
|
||||
while (occupiedVersions.has(candidate)) {
|
||||
major++
|
||||
candidate = `V${major}.0`
|
||||
}
|
||||
return candidate
|
||||
}
|
||||
|
||||
// 解析版本号格式 Vx.y
|
||||
const match = ver.match(/^V(\d+)\.(\d+)$/)
|
||||
if (match) {
|
||||
const major = parseInt(match[1])
|
||||
const minor = parseInt(match[2])
|
||||
return {
|
||||
minor: `V${major}.${minor + 1}`,
|
||||
major: `V${major + 1}.0`
|
||||
minor: getNextMinor(major, minor),
|
||||
major: getNextMajor(major)
|
||||
}
|
||||
}
|
||||
// 无法解析时返回默认选项
|
||||
return { minor: 'V1.1', major: 'V2.0' }
|
||||
// 无法解析时返回默认选项(带避让)
|
||||
return { minor: getNextMinor(1, 0), major: getNextMajor(1) }
|
||||
})
|
||||
|
||||
// 任务1:版本升级类型变更时更新版本号
|
||||
@ -408,8 +438,9 @@ const handleSaveAs = async (row: BomItem) => {
|
||||
isEditMode.value = true
|
||||
isSaveAsMode.value = true // 任务1:进入另存为模式,显示版本选项
|
||||
|
||||
// 保存原始版本号用于计算升级选项
|
||||
// 保存原始版本号和 BOM 编号用于计算升级选项
|
||||
originalVersion = form.version
|
||||
currentBomNo = row.bom_no // 保存当前操作的 BOM 编号
|
||||
// 默认选中次版本升级
|
||||
form.versionUpgradeType = 'minor'
|
||||
form.version = versionOptions.value.minor
|
||||
@ -471,6 +502,7 @@ const resetForm = () => {
|
||||
form.children = []
|
||||
isSaveAsMode.value = false // 任务1:重置另存为模式
|
||||
originalVersion = ''
|
||||
currentBomNo = '' // 重置当前 BOM 编号
|
||||
childSearchKeyword.value = '' // 任务2:重置搜索关键字
|
||||
if (formRef.value) formRef.value.resetFields()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user