From e39e5a4ed8ef68624480b2c038f14e75e7916157 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=90=E5=A4=9C?= <278898052@qq.com> Date: Sat, 24 May 2025 09:50:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=A8=A1=E6=80=81=E6=A1=86=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E6=A0=91=E8=8A=82=E7=82=B9=E6=B7=B1=E5=BA=A6?= =?UTF-8?q?=E9=99=90=E5=88=B6=EF=BC=8C=E9=83=A8=E9=97=A8=E6=8C=89=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E6=A3=80=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user-select-modal/user-select-modal.vue | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/apps/web-antd/src/components/user-select-modal/user-select-modal.vue b/apps/web-antd/src/components/user-select-modal/user-select-modal.vue index 105267b7..723e612c 100644 --- a/apps/web-antd/src/components/user-select-modal/user-select-modal.vue +++ b/apps/web-antd/src/components/user-select-modal/user-select-modal.vue @@ -30,6 +30,7 @@ interface DeptTreeNode { key: string; title: string; children?: DeptTreeNode[]; + name: string; } defineOptions({ name: 'UserSelectModal' }); @@ -107,22 +108,26 @@ const transferDataSource = computed(() => { const filteredDeptTree = computed(() => { if (!deptSearchKeys.value) return deptTree.value; - const filterNode = (node: any): any => { - const title = node?.title?.toLowerCase(); + const filterNode = (node: any, depth = 0): any => { + // 添加深度限制,防止过深的递归导致爆栈 + if (depth > 100) return null; + + // 按部门名称搜索 + const name = node?.name?.toLowerCase(); const search = deptSearchKeys.value.toLowerCase(); - // 如果当前节点匹配 - if (title.includes(search)) { + // 如果当前节点匹配,直接返回节点,不处理子节点 + if (name?.includes(search)) { return { ...node, - children: node.children?.map((child: any) => filterNode(child)), + children: node.children, }; } // 如果当前节点不匹配,检查子节点 if (node.children) { const filteredChildren = node.children - .map((child: any) => filterNode(child)) + .map((child: any) => filterNode(child, depth + 1)) .filter(Boolean); if (filteredChildren.length > 0) { @@ -397,6 +402,7 @@ const processDeptNode = (node: any): DeptTreeNode => { return { key: String(node.id), title: `${node.name} (${node.id})`, + name: node.name, children: node.children?.map((child: any) => processDeptNode(child)), }; };