diff --git a/src/components/Tree/src/Tree.vue b/src/components/Tree/src/Tree.vue index d66f4267ed5ee7a57bda05f9ee420e0215f0a43a..345ad4339d74a0536a203e0628b5cd02b62d9fbe 100644 --- a/src/components/Tree/src/Tree.vue +++ b/src/components/Tree/src/Tree.vue @@ -363,6 +363,7 @@ return result; }, unref(getFieldNames), + props.onlySearchLevel, ); if (expandOnSearch) { diff --git a/src/components/Tree/src/props.ts b/src/components/Tree/src/props.ts index 4d068484362c82309727c2e7d2c41b64708530c5..9c2108b37c5ed4ff3083d4a4dca50da5ae4ef53e 100644 --- a/src/components/Tree/src/props.ts +++ b/src/components/Tree/src/props.ts @@ -101,6 +101,8 @@ export const basicProps: any = { checkOnSearch: propTypes.bool.def(false), // 搜索完成自动select所有结果 selectedOnSearch: propTypes.bool.def(false), + // 只搜索树表指定的层级,获得该层级下所有结果 + onlySearchLevel: propTypes.number, }; export const treeNodeProps = { diff --git a/src/utils/helper/treeHelper.ts b/src/utils/helper/treeHelper.ts index af93fbb9d1d5a3affb792c58884794314ca52c25..a5e13eb8af539ee59307fd8156e64328eebf5752 100644 --- a/src/utils/helper/treeHelper.ts +++ b/src/utils/helper/treeHelper.ts @@ -137,18 +137,26 @@ export function filter( tree: T[], func: (n: T) => boolean, config: Partial = {}, + onlySearchLevel?: number, ): T[] { config = getConfig(config); const children = config.children as string; - function listFilter(list: T[]) { + function listFilter(list: T[], level?: number) { return list .map((node: any) => ({ ...node })) .filter((node) => { + if (level === 1) { + return func(node); + } + if (onlySearchLevel && level) { + node[children] = node[children] && listFilter(node[children], level - 1); + return node[children] && node[children].length; + } node[children] = node[children] && listFilter(node[children]); return func(node) || (node[children] && node[children].length); }); } - return listFilter(tree); + return listFilter(tree, onlySearchLevel); } export function forEach(