feat: 增加用户选择模态框中的部门树节点深度限制,部门按名称检索
parent
c0a82df7f4
commit
e39e5a4ed8
|
@ -30,6 +30,7 @@ interface DeptTreeNode {
|
||||||
key: string;
|
key: string;
|
||||||
title: string;
|
title: string;
|
||||||
children?: DeptTreeNode[];
|
children?: DeptTreeNode[];
|
||||||
|
name: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
defineOptions({ name: 'UserSelectModal' });
|
defineOptions({ name: 'UserSelectModal' });
|
||||||
|
@ -107,22 +108,26 @@ const transferDataSource = computed(() => {
|
||||||
const filteredDeptTree = computed(() => {
|
const filteredDeptTree = computed(() => {
|
||||||
if (!deptSearchKeys.value) return deptTree.value;
|
if (!deptSearchKeys.value) return deptTree.value;
|
||||||
|
|
||||||
const filterNode = (node: any): any => {
|
const filterNode = (node: any, depth = 0): any => {
|
||||||
const title = node?.title?.toLowerCase();
|
// 添加深度限制,防止过深的递归导致爆栈
|
||||||
|
if (depth > 100) return null;
|
||||||
|
|
||||||
|
// 按部门名称搜索
|
||||||
|
const name = node?.name?.toLowerCase();
|
||||||
const search = deptSearchKeys.value.toLowerCase();
|
const search = deptSearchKeys.value.toLowerCase();
|
||||||
|
|
||||||
// 如果当前节点匹配
|
// 如果当前节点匹配,直接返回节点,不处理子节点
|
||||||
if (title.includes(search)) {
|
if (name?.includes(search)) {
|
||||||
return {
|
return {
|
||||||
...node,
|
...node,
|
||||||
children: node.children?.map((child: any) => filterNode(child)),
|
children: node.children,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果当前节点不匹配,检查子节点
|
// 如果当前节点不匹配,检查子节点
|
||||||
if (node.children) {
|
if (node.children) {
|
||||||
const filteredChildren = node.children
|
const filteredChildren = node.children
|
||||||
.map((child: any) => filterNode(child))
|
.map((child: any) => filterNode(child, depth + 1))
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
|
|
||||||
if (filteredChildren.length > 0) {
|
if (filteredChildren.length > 0) {
|
||||||
|
@ -397,6 +402,7 @@ const processDeptNode = (node: any): DeptTreeNode => {
|
||||||
return {
|
return {
|
||||||
key: String(node.id),
|
key: String(node.id),
|
||||||
title: `${node.name} (${node.id})`,
|
title: `${node.name} (${node.id})`,
|
||||||
|
name: node.name,
|
||||||
children: node.children?.map((child: any) => processDeptNode(child)),
|
children: node.children?.map((child: any) => processDeptNode(child)),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue