Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin into antdv-next

This commit is contained in:
dap
2026-02-09 16:26:26 +08:00
128 changed files with 4183 additions and 68 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "@vben/utils",
"version": "5.5.9",
"version": "5.6.0",
"homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": {

View File

@@ -8,13 +8,26 @@ import type {
import { mapTree } from '@vben-core/shared/utils';
/**
* 判断路由是否在菜单中显示但访问时展示 403让用户知悉功能并申请权限
*/
function menuHasVisibleWithForbidden(route: RouteRecordRaw): boolean {
return !!route.meta?.menuVisibleWithForbidden;
}
/**
* 动态生成路由 - 后端方式
* 对 meta.menuVisibleWithForbidden 为 true 的项直接替换为 403 组件,让用户知悉功能并申请权限。
*/
async function generateRoutesByBackend(
options: GenerateMenuAndRoutesOptions,
): Promise<RouteRecordRaw[]> {
const { fetchMenuListAsync, layoutMap = {}, pageMap = {} } = options;
const {
fetchMenuListAsync,
layoutMap = {},
pageMap = {},
forbiddenComponent,
} = options;
try {
const menuRoutes = await fetchMenuListAsync?.();
@@ -28,7 +41,16 @@ async function generateRoutesByBackend(
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;
} catch (error) {