From a7cbbeeda9c3581d99e8cb2cb22e0387bd56994b Mon Sep 17 00:00:00 2001 From: riefive Date: Sat, 4 Oct 2025 09:05:28 +0700 Subject: [PATCH] feat(division): fixing logic treeview --- app/components/app/division/entry-form.vue | 5 ++-- app/components/content/division/list.vue | 1 - app/components/pub/base/select-tree/leaf.vue | 4 +-- .../pub/base/select-tree/tree-select.vue | 26 +++++++++++++++++-- app/handlers/_shared.handler.ts | 2 +- app/models/division.ts | 2 ++ 6 files changed, 32 insertions(+), 8 deletions(-) diff --git a/app/components/app/division/entry-form.vue b/app/components/app/division/entry-form.vue index 640d1fd5..1b9edc4e 100644 --- a/app/components/app/division/entry-form.vue +++ b/app/components/app/division/entry-form.vue @@ -49,8 +49,9 @@ const [division] = defineField('division_id') if (props.values) { if (props.values.code !== undefined) code.value = props.values.code if (props.values.name !== undefined) name.value = props.values.name - if (props.values.parent_id !== undefined) parent.value = props.values.parent_id - if (props.values.division_id !== undefined) division.value = props.values.division_id + if (props.values.parent_id !== undefined) parent.value = String(props.values.parent_id) + if (props.values.division_id !== undefined) division.value = String(props.values.division_id) + console.log(props.values) } const resetForm = () => { diff --git a/app/components/content/division/list.vue b/app/components/content/division/list.vue index 20c83baa..17c3f8f1 100644 --- a/app/components/content/division/list.vue +++ b/app/components/content/division/list.vue @@ -129,7 +129,6 @@ watch( }) if (result.success) { const currentData = result.body.data || [] - console.log(currentData) divisionsTrees.value = convertDivisionToTreeItems(currentData || []) } }, diff --git a/app/components/pub/base/select-tree/leaf.vue b/app/components/pub/base/select-tree/leaf.vue index 81dabf2b..d98b8b27 100644 --- a/app/components/pub/base/select-tree/leaf.vue +++ b/app/components/pub/base/select-tree/leaf.vue @@ -24,7 +24,7 @@ function handleSelect(value: string) { :class="{ 'pl-8': shouldAlign }" @select="() => handleSelect(item.value)" > - {{ item.label }} + {{ item.label }} .leaf-node { - @apply w-full; + width: 100%; } diff --git a/app/components/pub/base/select-tree/tree-select.vue b/app/components/pub/base/select-tree/tree-select.vue index d0525336..1994e533 100644 --- a/app/components/pub/base/select-tree/tree-select.vue +++ b/app/components/pub/base/select-tree/tree-select.vue @@ -11,6 +11,7 @@ const props = defineProps<{ const modelValue = defineModel() const open = ref(false) +const searchValue = ref('') function handleSelect(newVal: string) { modelValue.value = newVal @@ -30,6 +31,27 @@ function findLabel(value: string, items: TreeItem[]): string | undefined { const selectedLabel = computed(() => { return modelValue.value ? findLabel(modelValue.value, props.data) : '--- select item' }) + +const filteredData = computed(() => { + if (!searchValue.value) return props.data + // recursive filter + function filterTree(items: TreeItem[]): TreeItem[] { + return items + .map(item => { + const match = item.label.toLowerCase().includes(searchValue.value.toLowerCase()) + let children: TreeItem[] | undefined = undefined + if (item.children) { + children = filterTree(item.children) + } + if (match || (children && children.length > 0)) { + return { ...item, children } + } + return null + }) + .filter(Boolean) as TreeItem[] + } + return filterTree(props.data) +})