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