From 1f6de0ec29f56795dae3328bca773365c858acc8 Mon Sep 17 00:00:00 2001
From: dap <15891557205@163.com>
Date: Wed, 28 Jan 2026 15:11:33 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86):=20?=
=?UTF-8?q?=E4=BC=98=E5=8C=96=E9=83=A8=E9=97=A8=E6=A0=91=E6=90=9C=E7=B4=A2?=
=?UTF-8?q?=E4=B8=8E=E6=A0=B7=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 将搜索输入与刷新按钮组合为紧凑布局,提升操作便捷性
- 实现部门树实时搜索过滤,高亮显示匹配的节点文本
- 调整选中节点的背景色为更柔和的悬停色
- 修复树节点标题渲染插槽名称错误
---
.../src/views/system/user/dept-tree.vue | 58 +++++++++++++------
1 file changed, 41 insertions(+), 17 deletions(-)
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]"
>
-