fix:router push 无法使用 name 的问题

This commit is contained in:
YunaiV
2025-10-20 19:09:14 +08:00
parent 777ace6913
commit 2b15a1835d

View File

@@ -93,11 +93,13 @@ function generateMenus(
* 转换后端菜单数据为路由数据
* @param menuList 后端菜单数据
* @param parent 父级菜单
* @param nameSet 用于跟踪已使用的 name防止重复
* @returns 路由数据
*/
function convertServerMenuToRouteRecordStringComponent(
menuList: AppRouteRecordRaw[],
parent = '',
nameSet: Set<string> = new Set(),
): RouteRecordStringComponent[] {
const menus: RouteRecordStringComponent[] = [];
menuList.forEach((menu) => {
@@ -139,6 +141,14 @@ function convertServerMenuToRouteRecordStringComponent(
menu.path = `/${menu.path}`;
}
// add by 芋艿:防止 name 重复,只有在 name 重复时,才自动添加 id
let finalName = menu.componentName || menu.name;
if (nameSet.has(finalName)) {
finalName = menu.name + menu.id;
console.error(`menu name duplicate: ${menu.name}, id: ${menu.id}`, menu);
}
nameSet.add(finalName);
const buildMenu: RouteRecordStringComponent = {
component: menu.component,
meta: {
@@ -148,7 +158,7 @@ function convertServerMenuToRouteRecordStringComponent(
orderNo: menu.sort,
title: menu.name,
},
name: menu.name + menu.id, // add by 芋艿:防止 name 重复,加上 id
name: finalName,
path: menu.path,
};
@@ -156,6 +166,7 @@ function convertServerMenuToRouteRecordStringComponent(
buildMenu.children = convertServerMenuToRouteRecordStringComponent(
menu.children,
menu.path,
nameSet,
);
}