feat: 优化BOM表单交互 - 另存为版本号选择与用量输入体验"
This commit is contained in:
@ -97,8 +97,17 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
<!-- 任务1:另存为模式显示版本选项,新建/编辑模式显示输入框 -->
|
||||
<el-form-item label="版本号" prop="version" v-if="hasFormFieldPermission('version')">
|
||||
<template v-if="isSaveAsMode">
|
||||
<el-radio-group v-model="form.versionUpgradeType" @change="onVersionUpgradeTypeChange">
|
||||
<el-radio-button label="minor">升级次版本 ({{ versionOptions.minor }})</el-radio-button>
|
||||
<el-radio-button label="major">升级主版本 ({{ versionOptions.major }})</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-input v-model="form.version" placeholder="如: V1.0" />
|
||||
</template>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -113,6 +122,7 @@
|
||||
placeholder="请搜索原料"
|
||||
filterable
|
||||
style="width: 100%"
|
||||
@change="(val) => onChildChange(val, $index)"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in materialOptions"
|
||||
@ -131,7 +141,8 @@
|
||||
|
||||
<el-table-column label="用量" width="140" v-if="hasFormFieldPermission('dosage')">
|
||||
<template #default="{ row }">
|
||||
<el-input-number v-model="row.dosage" :min="0" :precision="4" style="width: 100%" controls-position="right" />
|
||||
<!-- 任务2:整数精度,去掉调节按钮 -->
|
||||
<el-input-number v-model="row.dosage" :min="0" :precision="0" style="width: 100%" :controls="false" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@ -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<BomItem[]>([])
|
||||
const materialOptions = ref<MaterialBase[]>([])
|
||||
@ -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<FormRules>({
|
||||
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()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user