|
|
|
@ -65,16 +65,24 @@ const modelValue = defineModel<Arrayable<number | string>>(); |
|
|
|
const expanded = ref<Array<number | string>>(props.defaultExpandedKeys ?? []); |
|
|
|
|
|
|
|
const treeValue = ref(); |
|
|
|
let lastTreeData: any = null; |
|
|
|
|
|
|
|
onMounted(() => { |
|
|
|
watchEffect(() => { |
|
|
|
flattenData.value = flatten(props.treeData, props.childrenField); |
|
|
|
updateTreeValue(); |
|
|
|
if ( |
|
|
|
props.defaultExpandedLevel !== undefined && |
|
|
|
props.defaultExpandedLevel > 0 |
|
|
|
) |
|
|
|
expandToLevel(props.defaultExpandedLevel); |
|
|
|
|
|
|
|
// 只在 treeData 变化时执行展开 |
|
|
|
const currentTreeData = JSON.stringify(props.treeData); |
|
|
|
if (lastTreeData !== currentTreeData) { |
|
|
|
lastTreeData = currentTreeData; |
|
|
|
if ( |
|
|
|
props.defaultExpandedLevel !== undefined && |
|
|
|
props.defaultExpandedLevel > 0 |
|
|
|
) { |
|
|
|
expandToLevel(props.defaultExpandedLevel); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
@ -87,9 +95,11 @@ function getItemByValue(value: number | string) { |
|
|
|
function updateTreeValue() { |
|
|
|
const val = modelValue.value; |
|
|
|
if (val === undefined) { |
|
|
|
treeValue.value = undefined; |
|
|
|
} else { |
|
|
|
if (Array.isArray(val)) { |
|
|
|
treeValue.value = props.multiple ? [] : undefined; |
|
|
|
} else if (Array.isArray(val)) { |
|
|
|
if (val.length === 0) { |
|
|
|
treeValue.value = []; |
|
|
|
} else { |
|
|
|
const filteredValues = val.filter((v) => { |
|
|
|
const item = getItemByValue(v); |
|
|
|
return item && !get(item, props.disabledField); |
|
|
|
@ -99,14 +109,14 @@ function updateTreeValue() { |
|
|
|
if (filteredValues.length !== val.length) { |
|
|
|
modelValue.value = filteredValues; |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
const item = getItemByValue(val); |
|
|
|
if (item && !get(item, props.disabledField)) { |
|
|
|
treeValue.value = item; |
|
|
|
} else { |
|
|
|
const item = getItemByValue(val); |
|
|
|
if (item && !get(item, props.disabledField)) { |
|
|
|
treeValue.value = item; |
|
|
|
} else { |
|
|
|
treeValue.value = undefined; |
|
|
|
modelValue.value = undefined; |
|
|
|
} |
|
|
|
treeValue.value = props.multiple ? [] : undefined; |
|
|
|
modelValue.value = props.multiple ? [] : undefined; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|