mirror of
https://gitee.com/dapppp/ruoyi-plus-vben5.git
synced 2026-03-27 03:03:22 +08:00
feat: 修正菜单排序在二级菜单不生效问题 (#7007)
* treeUtil增加对树形结构数据进行递归排序 * 菜单sort排序各级菜单均生效
This commit is contained in:
@@ -94,4 +94,32 @@ function mapTree<T, V extends Record<string, any>>(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export { filterTree, mapTree, traverseTreeValues };
|
/**
|
||||||
|
* 对树形结构数据进行递归排序
|
||||||
|
* @param treeData - 树形数据数组
|
||||||
|
* @param sortFunction - 排序函数,用于定义排序规则
|
||||||
|
* @param options - 配置选项,包括子节点属性名
|
||||||
|
* @returns 排序后的树形数据
|
||||||
|
*/
|
||||||
|
function sortTree<T extends Record<string, any>>(
|
||||||
|
treeData: T[],
|
||||||
|
sortFunction: (a: T, b: T) => number,
|
||||||
|
options?: TreeConfigOptions,
|
||||||
|
): T[] {
|
||||||
|
const { childProps } = options || {
|
||||||
|
childProps: 'children',
|
||||||
|
};
|
||||||
|
|
||||||
|
return treeData.toSorted(sortFunction).map((item) => {
|
||||||
|
const children = item[childProps];
|
||||||
|
if (children && Array.isArray(children) && children.length > 0) {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
[childProps]: sortTree(children, sortFunction, options),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export { filterTree, mapTree, sortTree, traverseTreeValues };
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import type {
|
|||||||
RouteMeta,
|
RouteMeta,
|
||||||
} from '@vben-core/typings';
|
} from '@vben-core/typings';
|
||||||
|
|
||||||
import { filterTree, mapTree } from '@vben-core/shared/utils';
|
import { filterTree, mapTree, sortTree } from '@vben-core/shared/utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据 routes 生成菜单列表
|
* 根据 routes 生成菜单列表
|
||||||
@@ -81,7 +81,7 @@ function generateMenus(
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 对菜单进行排序,避免order=0时被替换成999的问题
|
// 对菜单进行排序,避免order=0时被替换成999的问题
|
||||||
menus = menus.toSorted((a, b) => (a?.order ?? 999) - (b?.order ?? 999));
|
menus = sortTree(menus, (a, b) => (a?.order ?? 999) - (b?.order ?? 999));
|
||||||
|
|
||||||
// 过滤掉隐藏的菜单项
|
// 过滤掉隐藏的菜单项
|
||||||
return filterTree(menus, (menu) => !!menu.show);
|
return filterTree(menus, (menu) => !!menu.show);
|
||||||
|
|||||||
Reference in New Issue
Block a user