!129 feat: 路由name重复检查

Merge pull request !129 from 玲娜贝er/dev
This commit is contained in:
疯狂的狮子Li 2024-06-26 04:02:28 +00:00 committed by Gitee
commit 27d36f7970
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F

View File

@ -58,6 +58,8 @@ export const usePermissionStore = defineStore('permission', () => {
setSidebarRouters(constantRoutes.concat(sidebarRoutes)); setSidebarRouters(constantRoutes.concat(sidebarRoutes));
setDefaultRoutes(sidebarRoutes); setDefaultRoutes(sidebarRoutes);
setTopbarRoutes(defaultRoutes); setTopbarRoutes(defaultRoutes);
// 路由name重复检查
duplicateRouteChecker(asyncRoutes, sidebarRoutes);
return new Promise<RouteRecordRaw[]>((resolve) => resolve(rewriteRoutes)); return new Promise<RouteRecordRaw[]>((resolve) => resolve(rewriteRoutes));
}; };
@ -167,4 +169,48 @@ export const usePermissionStoreHook = () => {
return usePermissionStore(store); return usePermissionStore(store);
}; };
interface Route {
name?: string | symbol;
path: string;
children?: Route[];
}
/**
* name是否重复
* @param localRoutes
* @param routes
*/
function duplicateRouteChecker(localRoutes: Route[], routes: Route[]) {
// 展平
function flatRoutes(routes: Route[]) {
const res: Route[] = [];
routes.forEach((route) => {
if (route.children) {
res.push(...flatRoutes(route.children));
} else {
res.push(route);
}
});
return res;
}
const allRoutes = flatRoutes([...localRoutes, ...routes]);
const nameList: string[] = [];
allRoutes.forEach((route) => {
const name = route.name.toString();
if (name && nameList.includes(name)) {
const message = `路由名称: [${name}] 重复, 会造成 404`;
console.error(message);
ElNotification({
title: '路由名称重复',
message,
type: 'error'
});
return;
}
nameList.push(route.name.toString());
});
}
export default usePermissionStore; export default usePermissionStore;