diff --git a/inventory-web/src/views/bom/BomManage.vue b/inventory-web/src/views/bom/BomManage.vue index 1f70c73..38a1369 100644 --- a/inventory-web/src/views/bom/BomManage.vue +++ b/inventory-web/src/views/bom/BomManage.vue @@ -97,8 +97,17 @@ + - + + @@ -113,6 +122,7 @@ placeholder="请搜索原料" filterable style="width: 100%" + @change="(val) => onChildChange(val, $index)" > @@ -196,6 +207,8 @@ const loading = ref(false) const dialogVisible = ref(false) const saving = ref(false) const isEditMode = ref(false) +const isSaveAsMode = ref(false) // 任务1:标记是否为另存为模式 +let originalVersion = '' // 保存原始版本号用于计算升级选项 const bomList = ref([]) const materialOptions = ref([]) @@ -242,6 +255,7 @@ const form = reactive({ bom_suffix: '', // 用户输入的后缀 parent_id: null as number | null, version: 'V1.0', + versionUpgradeType: 'minor' as 'minor' | 'major', // 任务1:另存为时的版本升级类型 is_enabled: true, children: [] as ChildRow[] }) @@ -254,6 +268,28 @@ const fullBomNo = computed(() => { return form.bom_suffix }) +// 任务1:根据原版本号计算升级选项 +const versionOptions = computed(() => { + const ver = originalVersion || 'V1.0' + // 解析版本号格式 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` + } + } + // 无法解析时返回默认选项 + return { minor: 'V1.1', major: 'V2.0' } +}) + +// 任务1:版本升级类型变更时更新版本号 +const onVersionUpgradeTypeChange = (type: 'minor' | 'major') => { + form.version = versionOptions.value[type] +} + const rules = reactive({ parent_id: [{ required: true, message: '请选择父件', trigger: 'change' }], version: [{ required: true, message: '请输入版本号', trigger: 'blur' }] @@ -291,10 +327,18 @@ const onParentChange = (val: number) => { } } +// 任务2:子件物料选中后自动设置用量为1 +const onChildChange = (val: number | null, index: number) => { + if (val !== null) { + form.children[index].dosage = 1 + } +} + const handleCreate = () => { resetForm() dialogTitle.value = '新建 BOM' isEditMode.value = false + isSaveAsMode.value = false // 确保新建模式 dialogVisible.value = true } @@ -302,16 +346,21 @@ const handleEdit = async (row: BomItem) => { await loadDetail(row.bom_no, row.version) dialogTitle.value = '编辑 BOM' isEditMode.value = true // 编辑时不允许修改编号前缀/后缀 + isSaveAsMode.value = false // 确保编辑模式 dialogVisible.value = true } const handleSaveAs = async (row: BomItem) => { await loadDetail(row.bom_no, row.version) dialogTitle.value = '另存为新版/变体' - isEditMode.value = true // 另存为时,编号部分依然锁定(因为我们是在同一个编号下新增版本) + isEditMode.value = true + isSaveAsMode.value = true // 任务1:进入另存为模式,显示版本选项 - // 提示用户修改版本号 - form.version = form.version + '_V2' + // 保存原始版本号用于计算升级选项 + originalVersion = form.version + // 默认选中次版本升级 + form.versionUpgradeType = 'minor' + form.version = versionOptions.value.minor dialogVisible.value = true } @@ -365,8 +414,11 @@ const resetForm = () => { form.bom_suffix = '' form.parent_id = null form.version = 'V1.0' + form.versionUpgradeType = 'minor' form.is_enabled = true form.children = [] + isSaveAsMode.value = false // 任务1:重置另存为模式 + originalVersion = '' if (formRef.value) formRef.value.resetFields() }