refactor: 安全提取纯净BOM编号,将原后缀输入框改为备注功能
This commit is contained in:
@ -87,17 +87,20 @@
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="14">
|
||||
<el-form-item label="BOM 编号" required v-if="hasFormFieldPermission('bom_suffix')">
|
||||
<el-input v-model="form.bom_suffix" placeholder="输入后缀 (如 -001)" :disabled="isEditMode">
|
||||
<template #prepend v-if="form.bom_prefix">{{ form.bom_prefix }}</template>
|
||||
</el-input>
|
||||
<el-col :span="10">
|
||||
<el-form-item label="BOM 编号" required v-if="hasFormFieldPermission('bom_no')">
|
||||
<el-input v-model="form.bom_no" placeholder="选择父件后自动生成" disabled />
|
||||
<div style="font-size: 12px; color: #909399; line-height: 1.2; margin-top: 4px;">
|
||||
最终编号: <span style="font-weight: bold">{{ fullBomNo }}</span>
|
||||
编号预览: <span style="font-weight: bold">{{ form.bom_no || '请选择父件' }}</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="备注" v-if="hasFormFieldPermission('remark')">
|
||||
<el-input v-model="form.remark" placeholder="备注信息(可选)" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<!-- 任务1:另存为模式显示版本选项,新建/编辑模式显示输入框 -->
|
||||
<el-form-item label="版本号" prop="version" v-if="hasFormFieldPermission('version')">
|
||||
<template v-if="isSaveAsMode">
|
||||
@ -269,7 +272,7 @@ const permissionMap: Record<string, string> = {
|
||||
// 表单字段
|
||||
parent_id: 'bom_manage:parent_id',
|
||||
is_enabled: 'bom_manage:status',
|
||||
bom_suffix: 'bom_manage:bom_no',
|
||||
bom_no: 'bom_manage:bom_no',
|
||||
child_id: 'bom_manage:child_id',
|
||||
dosage: 'bom_manage:dosage',
|
||||
remark: 'bom_manage:remark',
|
||||
@ -295,8 +298,8 @@ const hasFormFieldPermission = (fieldName: string) => {
|
||||
|
||||
const formRef = ref<FormInstance>()
|
||||
const form = reactive({
|
||||
bom_prefix: '', // 自动生成的父件规格前缀
|
||||
bom_suffix: '', // 用户输入的后缀
|
||||
bom_no: '', // 纯净的 BOM 编号(从父件规格提取)
|
||||
remark: '', // BOM 备注信息
|
||||
parent_id: null as number | null,
|
||||
version: 'V1.0',
|
||||
versionUpgradeType: 'minor' as 'minor' | 'major', // 任务1:另存为时的版本升级类型
|
||||
@ -304,13 +307,8 @@ const form = reactive({
|
||||
children: [] as ChildRow[]
|
||||
})
|
||||
|
||||
// 计算最终的 BOM 编号
|
||||
const fullBomNo = computed(() => {
|
||||
if (form.bom_prefix) {
|
||||
return form.bom_prefix + (form.bom_suffix ? ('-' + form.bom_suffix) : '')
|
||||
}
|
||||
return form.bom_suffix
|
||||
})
|
||||
// 纯净 BOM 编号(直接从表单获取,无拼接逻辑)
|
||||
const pureBomNo = computed(() => form.bom_no)
|
||||
|
||||
// 任务1:根据原版本号计算升级选项(智能避让已占用版本)
|
||||
const versionOptions = computed(() => {
|
||||
@ -390,13 +388,15 @@ const fetchMaterialOptions = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
// 监听父件变化,自动设置前缀
|
||||
// 监听父件变化,自动设置纯净的 BOM 编号
|
||||
const onParentChange = (val: number) => {
|
||||
const selected = materialOptions.value.find(m => m.id === val)
|
||||
if (selected && selected.spec) {
|
||||
form.bom_prefix = selected.spec
|
||||
// 安全提取:取 / 前面的部分作为纯净 BOM 编号
|
||||
const rawSpec = selected.spec || ''
|
||||
form.bom_no = rawSpec.split('/')[0].trim()
|
||||
} else {
|
||||
form.bom_prefix = ''
|
||||
form.bom_no = ''
|
||||
}
|
||||
}
|
||||
|
||||
@ -464,17 +464,15 @@ const loadDetail = async (bomNo: string, version: string) => {
|
||||
remark: child.remark || ''
|
||||
}))
|
||||
|
||||
// 解析编号到 前缀/后缀
|
||||
if (data.parent_spec && bomNo.startsWith(data.parent_spec)) {
|
||||
form.bom_prefix = data.parent_spec
|
||||
// 移除前缀和可能的分隔符
|
||||
let suffix = bomNo.substring(data.parent_spec.length)
|
||||
if (suffix.startsWith('-')) suffix = suffix.substring(1)
|
||||
form.bom_suffix = suffix
|
||||
// 解析编号:安全提取纯净 BOM 编号
|
||||
if (data.parent_spec) {
|
||||
form.bom_no = (data.parent_spec || '').split('/')[0].trim()
|
||||
} else {
|
||||
form.bom_prefix = ''
|
||||
form.bom_suffix = bomNo
|
||||
// 无父件规格时直接使用 bom_no
|
||||
form.bom_no = bomNo.split('/')[0].trim()
|
||||
}
|
||||
// 加载备注信息
|
||||
form.remark = data.remark || ''
|
||||
}
|
||||
} catch (e) {
|
||||
// 错误已由全局拦截器统一处理
|
||||
@ -496,8 +494,8 @@ const handleDelete = (row: BomItem) => {
|
||||
}
|
||||
|
||||
const resetForm = () => {
|
||||
form.bom_prefix = ''
|
||||
form.bom_suffix = ''
|
||||
form.bom_no = ''
|
||||
form.remark = ''
|
||||
form.parent_id = null
|
||||
form.version = 'V1.0'
|
||||
form.versionUpgradeType = 'minor'
|
||||
@ -517,7 +515,7 @@ const submitForm = async () => {
|
||||
if (!formRef.value) return
|
||||
await formRef.value.validate(async (valid) => {
|
||||
if (!valid) return
|
||||
if (!fullBomNo.value) return ElMessage.warning('BOM编号不能为空')
|
||||
if (!pureBomNo.value) return ElMessage.warning('BOM编号不能为空')
|
||||
if (form.children.length === 0) return ElMessage.warning('请至少添加一个子件')
|
||||
|
||||
// 任务1:提交前校验重复子件
|
||||
@ -543,7 +541,8 @@ const submitForm = async () => {
|
||||
}
|
||||
|
||||
const payload = {
|
||||
bom_no: fullBomNo.value,
|
||||
bom_no: pureBomNo.value,
|
||||
remark: form.remark,
|
||||
version: form.version,
|
||||
parent_id: form.parent_id,
|
||||
is_enabled: form.is_enabled,
|
||||
|
||||
Reference in New Issue
Block a user