Browse Source

feat: support `menuVisibleWithForbidden` in generate-routes-backend (#7526)

当后端菜单项 `meta.menuVisibleWithForbidden` 为 true 时,将其路由组件替换为 403 页,菜单仍展示该项,访问时展示 403,便于用户知悉功能并申请权限。
pull/7528/head
MistyMoon 1 month ago
committed by GitHub
parent
commit
22ed522711
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 26
      packages/utils/src/helpers/generate-routes-backend.ts

26
packages/utils/src/helpers/generate-routes-backend.ts

@ -8,13 +8,26 @@ import type {
import { mapTree } from '@vben-core/shared/utils'; import { mapTree } from '@vben-core/shared/utils';
/**
* 访 403
*/
function menuHasVisibleWithForbidden(route: RouteRecordRaw): boolean {
return !!route.meta?.menuVisibleWithForbidden;
}
/** /**
* - * -
* meta.menuVisibleWithForbidden true 403
*/ */
async function generateRoutesByBackend( async function generateRoutesByBackend(
options: GenerateMenuAndRoutesOptions, options: GenerateMenuAndRoutesOptions,
): Promise<RouteRecordRaw[]> { ): Promise<RouteRecordRaw[]> {
const { fetchMenuListAsync, layoutMap = {}, pageMap = {} } = options; const {
fetchMenuListAsync,
layoutMap = {},
pageMap = {},
forbiddenComponent,
} = options;
try { try {
const menuRoutes = await fetchMenuListAsync?.(); const menuRoutes = await fetchMenuListAsync?.();
@ -28,7 +41,16 @@ async function generateRoutesByBackend(
normalizePageMap[normalizeViewPath(key)] = value; normalizePageMap[normalizeViewPath(key)] = value;
} }
const routes = convertRoutes(menuRoutes, layoutMap, normalizePageMap); let routes = convertRoutes(menuRoutes, layoutMap, normalizePageMap);
if (forbiddenComponent) {
routes = mapTree(routes, (route) => {
if (menuHasVisibleWithForbidden(route)) {
route.component = forbiddenComponent;
}
return route;
});
}
return routes; return routes;
} catch (error) { } catch (error) {

Loading…
Cancel
Save