|
@@ -11,7 +11,6 @@ import { onMounted, ref, watchEffect } from 'vue';
|
|
|
import { ChevronRight, IconifyIcon } from '@vben-core/icons';
|
|
|
import { cn, get } from '@vben-core/shared/utils';
|
|
|
|
|
|
-import { useVModel } from '@vueuse/core';
|
|
|
import { TreeItem, TreeRoot } from 'radix-vue';
|
|
|
|
|
|
import { Checkbox } from '../checkbox';
|
|
@@ -27,7 +26,6 @@ const props = withDefaults(defineProps<TreeProps>(), {
|
|
|
expanded: () => [],
|
|
|
iconField: 'icon',
|
|
|
labelField: 'label',
|
|
|
- modelValue: () => [],
|
|
|
multiple: false,
|
|
|
showIcon: true,
|
|
|
transition: true,
|
|
@@ -38,7 +36,6 @@ const props = withDefaults(defineProps<TreeProps>(), {
|
|
|
const emits = defineEmits<{
|
|
|
expand: [value: FlattenedItem<Recordable<any>>];
|
|
|
select: [value: FlattenedItem<Recordable<any>>];
|
|
|
- 'update:modelValue': [value: Arrayable<Recordable<any>>];
|
|
|
}>();
|
|
|
|
|
|
interface InnerFlattenItem<T = Recordable<any>, P = number | string> {
|
|
@@ -76,11 +73,7 @@ function flatten<T = Recordable<any>, P = number | string>(
|
|
|
}
|
|
|
|
|
|
const flattenData = ref<Array<InnerFlattenItem>>([]);
|
|
|
-const modelValue = useVModel(props, 'modelValue', emits, {
|
|
|
- deep: true,
|
|
|
- defaultValue: props.defaultValue ?? [],
|
|
|
- passive: (props.modelValue === undefined) as false,
|
|
|
-});
|
|
|
+const modelValue = defineModel<Arrayable<number | string>>();
|
|
|
const expanded = ref<Array<number | string>>(props.defaultExpandedKeys ?? []);
|
|
|
|
|
|
const treeValue = ref();
|
|
@@ -105,9 +98,13 @@ function getItemByValue(value: number | string) {
|
|
|
|
|
|
function updateTreeValue() {
|
|
|
const val = modelValue.value;
|
|
|
- treeValue.value = Array.isArray(val)
|
|
|
- ? val.map((v) => getItemByValue(v))
|
|
|
- : getItemByValue(val);
|
|
|
+ if (val === undefined) {
|
|
|
+ treeValue.value = undefined;
|
|
|
+ } else {
|
|
|
+ treeValue.value = Array.isArray(val)
|
|
|
+ ? val.map((v) => getItemByValue(v))
|
|
|
+ : getItemByValue(val);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
function updateModelValue(val: Arrayable<Recordable<any>>) {
|
|
@@ -173,13 +170,6 @@ function onSelect(item: FlattenedItem<Recordable<any>>, isSelected: boolean) {
|
|
|
modelValue.value.push(p);
|
|
|
}
|
|
|
});
|
|
|
- } else {
|
|
|
- if (Array.isArray(modelValue.value)) {
|
|
|
- const index = modelValue.value.indexOf(get(item.value, props.valueField));
|
|
|
- if (index !== -1) {
|
|
|
- modelValue.value.splice(index, 1);
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
updateTreeValue();
|
|
|
emits('select', item);
|
|
@@ -240,7 +230,7 @@ defineExpose({
|
|
|
@select="
|
|
|
(event) => {
|
|
|
if (event.detail.originalEvent.type === 'click') {
|
|
|
- // event.preventDefault();
|
|
|
+ event.preventDefault();
|
|
|
}
|
|
|
onSelect(item, event.detail.isSelected);
|
|
|
}
|