提交
This commit is contained in:
1 parent
5ad07c8cac
commit
a79aee2614
61 files changed
+9220
-9348
No files matched your search
@@ -115,24 +115,20 @@ export class MenuProcessor {
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据 menu code 过滤菜单(仅补齐顶级父菜单)
|
||||
* 根据 menu code 过滤菜单(保留有权限的叶子及其各级父目录)
|
||||
*/
|
||||
private filterMenuByCodes(
|
||||
menu: AppRouteRecord[],
|
||||
codes: Set<string>,
|
||||
level = 1
|
||||
): AppRouteRecord[] {
|
||||
private filterMenuByCodes(menu: AppRouteRecord[], codes: Set<string>): AppRouteRecord[] {
|
||||
return menu.reduce((acc: AppRouteRecord[], item) => {
|
||||
const rawCode = (item.meta as any)?.menuCode ?? item.name
|
||||
const code = this.normalizeMenuCode(rawCode)
|
||||
const hasSelfPermission = !!code && codes.has(code)
|
||||
const filteredChildren = item.children?.length
|
||||
? this.filterMenuByCodes(item.children, codes, level + 1)
|
||||
? this.filterMenuByCodes(item.children, codes)
|
||||
: item.children
|
||||
|
||||
const shouldKeep =
|
||||
hasSelfPermission ||
|
||||
(level === 1 && Array.isArray(filteredChildren) && filteredChildren.length > 0)
|
||||
(Array.isArray(filteredChildren) && filteredChildren.length > 0)
|
||||
|
||||
if (shouldKeep) {
|
||||
acc.push({
|
||||
|
||||
@@ -278,9 +278,12 @@ async function handleDynamicRoutes(
|
||||
// 2. 获取菜单数据
|
||||
const menuList = await menuProcessor.getMenuList()
|
||||
|
||||
// 3. 验证菜单数据
|
||||
// 3. 验证菜单数据:无可用菜单时跳转 403,而非当作系统错误
|
||||
if (!menuProcessor.validateMenuList(menuList)) {
|
||||
throw new Error('获取菜单列表失败,请重新登录')
|
||||
routeInitInProgress = false
|
||||
closeLoading()
|
||||
next({ name: 'Exception403', replace: true })
|
||||
return
|
||||
}
|
||||
|
||||
// 4. 注册动态路由
|
||||
|
||||
Reference in new issue
Block a user