若依框架会使用菜单路由地址作为路由name,所以在路由地址重名时,就会出现404页面。vue-router需要name唯一.
[{
name: 'Aaa',
path: '/aaa',
children: [
{ name: 'Index', path: '/index' }
]},
{
name: 'Bbb',
path: '/bbb',
children: [
{ name: 'Index', path: '/index' }//404,因为name必须唯一
]}
]
在前端页面比较多时,尤其涉及多人合作的时候,很容易出现这种命名重复的问题,所以可以拼接父级name作为路由name.
若依框架 \src\store\modules\permission.js
......
// 向后端请求路由数据
getRouters().then((res) => {
//处理路由name
processName("", res.data);
......
});
/**
* 处理路由Name--父节点path+本节点path
* @param {*} name
* @param {*} data
*/
function processName(name, data) {
data.forEach((o) => {
let str = name + o.name;
o.name = str[0].toUpperCase() + str.slice(1).toLowerCase();
if (o.children && o.children.length > 0) {
processName(o.name, o.children);
}
});
}
这样可以有效避免出现重名导致的404问题。但是修改以后会导致出现另外一个问题,就是原来能正常缓存的页面现在无法缓存了,这是因为vue文件的name和路由名称不一致,比如原先若依框架系统菜单name是menu,但是经过处理以后,路由name变成了Systemmenu,所以还需要对vue文件的name进行调整,修改成和路由名称一致,这样就能正常缓存页面了.
可以按照若依菜单的路由path对前端目录进行规划,这样会更加规范.