yangzongzhuan / RuoYi-Vue3

:tada: (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
http://ruoyi.vip
MIT License
4.82k stars 1.96k forks source link

path重复时404的bug #264

Closed jinceon closed 3 months ago

jinceon commented 5 months ago

image

代码改动很简单,我就不提pr了,有需要的小伙伴们自取

image

arm-liang commented 3 months ago

这个是新版vue-router特性,存在同名name的route,后面的route会覆盖前面的route js版本,store/modules/permission.js

// action
generateRoutes(roles) {
// ...
  getRouters().then(()=>{
  // ...
    routeNameMap.clear()
  })
}
/**@type {Map<string,number>} */
const routeNameMap = new Map()
function filterAsyncRouter(.........){
   return asyncRouterMap.filter(route => {

    if (route.component) {
      if(type && route.name){
        // name 不重复,vue-router 相同name的route会覆盖
        const nameCount = routeNameMap.get(route.name)
        if(nameCount){
          route.name = route.name + (nameCount + 1)
          routeNameMap.set(route.name, nameCount+1)
        }
        routeNameMap.set(route.name, 1)
      }
      // ......
  })

}
yangzongzhuan commented 3 months ago

由于Vue3 Router存在名称相同的Name,会先删除路由,再添加路由,所有会导致前面的路由无法被访问。

问题反馈给Router官方也一直很久没有结果,所以大家可以先更新提交代码,出现重名冲突可以在菜单管理可以自定义Name,和对应页面组件的Name保持一致,防止缓存失效。

前端 菜单管理新增路由名称 后端 菜单管理新增路由名称

jinceon commented 3 months ago

我觉得router官方的设计没问题,确定不该重复。 但我觉得这个改动不好。 因为用户就不关注name,只要保证唯一即可。 那为什么不自动拼接父menu的path呢?