diff --git a/apps/web-antd/src/views/system/user/dept-tree.vue b/apps/web-antd/src/views/system/user/dept-tree.vue index 130c3fcd..67adb3be 100644 --- a/apps/web-antd/src/views/system/user/dept-tree.vue +++ b/apps/web-antd/src/views/system/user/dept-tree.vue @@ -3,10 +3,12 @@ import type { PropType } from 'vue'; import type { DeptTree } from '#/api/system/user/model'; -import { onMounted, ref } from 'vue'; +import { computed, onMounted, ref } from 'vue'; + +import { listToTree, treeToList } from '@vben/utils'; import { SyncOutlined } from '@antdv-next/icons'; -import { Empty, InputSearch, Skeleton, Tree } from 'antdv-next'; +import { Empty, Input, Skeleton, SpaceCompact, Tree } from 'antdv-next'; import { getDeptTree } from '#/api/system/user'; @@ -66,6 +68,23 @@ async function loadTree() { showTreeSkeleton.value = false; } +const deptTreeComputed = computed(() => { + if (!searchValue.value) { + return deptTreeArray.value; + } + const toTree = treeToList(deptTreeArray.value, { + id: 'id', + pid: 'parentId', + }); + const filteredTree = toTree.filter((item: DeptTree) => + item.label.toUpperCase().includes(searchValue.value.toUpperCase()), + ); + return listToTree(filteredTree, { + id: 'id', + pid: 'parentId', + }); +}); + async function handleReload() { await loadTree(); emit('reload'); @@ -90,33 +109,38 @@ onMounted(loadTree); v-if="showSearch" class="sticky left-0 top-0 z-100 bg-background p-[8px]" > - - - + + + + + +
-