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