opt:树形结构

This commit is contained in:
2026-01-20 17:39:09 +08:00
parent 3b84113d26
commit cd76de78bf

View File

@@ -158,7 +158,7 @@
startTime: '', startTime: '',
endTime: '', endTime: '',
isTop: true, isTop: true,
parentDetailId: 0 parentDetailId: undefined
}) })
const formData = ref(defaultForm()) const formData = ref(defaultForm())
@@ -173,7 +173,7 @@
parentDetailId: [ parentDetailId: [
{ {
validator: async (_rule, value) => { validator: async (_rule, value) => {
if (formData.value.isTop === false && !value) { if (formData.value.isTop === false && (value === undefined || value === null || value === '')) {
return Promise.reject(new Error('请选择上级类目')) return Promise.reject(new Error('请选择上级类目'))
} }
return Promise.resolve() return Promise.resolve()
@@ -183,12 +183,16 @@
] ]
} }
const normalizeParentDetailId = (val) => {
if (val === undefined || val === null || val === '' || val === 0 || val === '0') {
return undefined
}
return val
}
const toTreeNode = (item = {}) => { const toTreeNode = (item = {}) => {
const id = item.detailId const id = item.detailId
const titleParts = [] const title = item.modelName ? item.modelName : String(id || '')
if (item.modelName) titleParts.push(item.modelName)
if (item.modelDetail) titleParts.push(item.modelDetail)
const title = titleParts.length ? titleParts.join(' - ') : String(id || '')
return { return {
title, title,
value: id, value: id,
@@ -241,7 +245,7 @@
const onTopChange = async () => { const onTopChange = async () => {
if (formData.value.isTop === true) { if (formData.value.isTop === true) {
formData.value.parentDetailId = 0 formData.value.parentDetailId = undefined
parentTreeData.value = [] parentTreeData.value = []
} else { } else {
// 顶级新增同级parentId = 0加载根节点 // 顶级新增同级parentId = 0加载根节点
@@ -253,11 +257,12 @@
const onOpen = async (payload = {}) => { const onOpen = async (payload = {}) => {
open.value = true open.value = true
formData.value = Object.assign(defaultForm(), cloneDeep(payload || {})) formData.value = Object.assign(defaultForm(), cloneDeep(payload || {}))
if (typeof formData.value.isTop !== 'boolean') { formData.value.parentDetailId = normalizeParentDetailId(formData.value.parentDetailId)
formData.value.isTop = !formData.value.parentDetailId if (formData.value.parentDetailId === undefined) {
} // 同级新增且传入 parentDetailId 为 0/'0' 时也视为顶级
if (formData.value.isTop) { formData.value.isTop = true
formData.value.parentDetailId = 0 } else if (typeof formData.value.isTop !== 'boolean') {
formData.value.isTop = false
} }
if (formData.value.isTop === false) { if (formData.value.isTop === false) {
await loadRootTree() await loadRootTree()