Ant Design Pro Vue 动态导航及动态路由实现

前言:作者本人用vue-antd-pro过程中,有动态路由的需求,看了下官方文档实在是写的比较不清楚,参考了一些博客,发现我使用的版本,有一些改动出入,所以写下这篇博文,希望能帮到有需要的人。

npm包 使用的版本如下:

{

"name": "vue-antd-pro",

"version": "3.0.2",

"ant-design-vue": "^1.7.6",

"vue": "^2.6.14"

}

参考: 

Ant Design Pro 2(动态路由和菜单) - 简书

一共要修改的文件

src/router/index.js

src/router/generator-routers.js

src/permission.js

src/main.js

src/store/modules/async-router.js

src/layouts/BasicLayout.vue

src/config/router.config.js

大概思路及步骤:

先把默认的mock数据注释,对接上自己的api接口 ,根据差异调整生成路由方法

1.src/router/index.js设置成动态路由模式

2. src/permission.js根据自己情况调整,简单说明一下我这边的改动,set_name只是用户名,getParts那里是内容分区列表请求,跟本文核心无关,GenerateRoutes以后才是重点,我把原本的请求roles(角色权限)去掉了,因为我后端那边处理了,大家看情况来弄,这里变动不大。


router.beforeEach((to, from, next) => {
  NProgress.start() // start progress bar
  to.meta && typeof to.meta.title !== 'undefined' && setDocumentTitle(`${i18nRender(to.meta.title)} - ${domTitle}`)
  /* has token */
  // console.log(store);
  if (storage.get(ACCESS_TOKEN) && storage.get(USER_INFO)) {  //是否存在token和UserInfo

    // 每次变动都存储到vuex中
    store.commit('SET_INFO', storage.get(USER_INFO))
    store.commit('SET_TOKEN', storage.get(ACCESS_TOKEN))
    store.commit('SET_NAME', { name: storage.get(USER_INFO).userName, welcome: welcome() })

    if (to.path === loginRoutePath) {
      next({ path: defaultRoutePath })
      NProgress.done()
    }
    // 获取分区列表,如果没有则请求接口
    if (store.getters.parts.length == 0) {
      store.dispatch('GetParts')
        .then(res => {
          console.log("parts" + store.getters.parts);
        })
    }
    // generate dynamic router
    // 是否有动态路由vuex,如果没有则请求接口
    if (store.getters.addRouters.length == 0) {
      store.dispatch('GenerateRoutes').then(() => {
        // 动态添加可访问路由表
        // VueRouter@3.5.0+ New API
        store.getters.addRouters.forEach(r => {
          router.addRoute(r)
        })
        // 请求带有 redirect 重定向时,登录自动重定向到该地址
        const redirect = decodeURIComponent(from.query.redirect || to.path)
        if (to.path === redirect) {
          // set the replace: true so the navigation will not leave a history record
          next({ ...to, replace: true })
        } else {
          // 跳转到目的路由
          next({ path: redirect })
        }
      }).catch((res) => {
        notification.error({
          message: '错误',
          description: res
        })
      })
    }

    next()
  } else {
    if (allowList.includes(to.name)) {
      // 在免登录名单,直接进入
      next()
    } else {
      next({ path: loginRoutePath, query: { redirect: to.fullPath } })
      NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it
    }
    // if (to.path === '/user/login') { // 如果是登录页面路径,就直接next()
    //   next()
  }
})

3.我们接下来看src/store/modules/async-router.js,这个文件不用改,我们找到这个方法本体。

4.这里是自己写的请求后台动态路由api的方法,这个方法我把原本的const {result} = res里的result改成data了,因为我后台统一返回的data,listToTree方法里有个parentId字段,如果你不是这么定义的需要去改一下,我这边也是parentId就不改了。5. 生成路由方法改动

 6.src/router/index.js,将原本的routes:constantRouterMap.concat(asyncRouterMap)改成constantRouterMap,没改动之前,我访问什么路由都是404,我猜测是当时路由没加载出来前,他认为没有这些路由,全都跳转到那个通配符*的404页面去了

下面是数据库字段,返回字段,效果。

{

"code": 200,

"data": [

{

"id": 11,

"name": "dashboard",

"title": "仪表盘",

"icon": "dashboard",

"component": "RouteView",

"redirect": "/dashboard/workplace",

"path": "",

"status": 1,

"type": 1,

"parentId": 0,

"sort": 99

},

{

"id": 1,

"name": "menu",

"title": "菜单管理",

"icon": "menu",

"component": "RouteView",

"redirect": null,

"path": null,

"status": 1,

"type": 1,

"parentId": 0,

"sort": 0

},

{

"id": 12,

"name": "workplace",

"title": "工作空间",

"icon": null,

"component": "Workplace",

"redirect": null,

"path": "/dashboard/workplace",

"status": 1,

"type": 1,

"parentId": 11,

"sort": 0

},

],

"msg": "请求成功"

}

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Ant Design Pro Vue 动态路由是指在运行时根据用户权限或其他条件动态生成路由。这种方式可以使应用程序更加灵活和可扩展,可以根据不同的用户角色或权限来展示不同的页面或菜单。在 Ant Design Pro Vue 中,可以通过配置路由表和权限控制来实现动态路由。具体实现方式可以参考官方文档或相关教程。 ### 回答2: Ant Design Pro Vue 是一个基于 Vue.js 的企业级中后台前端开发框架,它能够极大地提高开发效率和页面美观度。动态路由是其一个非常重要的功能,可以让前端路由的配置在后台管理系统中进行动态修改和生成,减少了前后端的耦合性。下面将对动态路由的使用进行详细介绍。 动态路由的概念: 动态路由是指根据后台返回的数据动态生成前端路由配置,前端可以通过该配置进行页面的访问。具体来说,当用户在前端操作时,前端会发起请求到后台,后台返回一个包含路由信息的 JSON 数据,前端负责解析该数据并进行路由配置。 实现步骤: 1.首先在路由配置文件中定义一个动态路由所在的组件。 2.在页面初始加载时,通过 Ajax 请求后台路由信息。 3.将后台返回的路由信息动态生成配置,并添加到路由表中。 4.当用户访问页面时,根据请求的路径进行路由匹配,并将匹配到的组件渲染到页面中。 优点: 1.动态路由配置可以让前端和后端的路由分离,减少了前后端的耦合性。 2.简化了前端路由的管理,后台管理员可以通过后台管理系统进行路由配置,而不需要修改前端代码。 3.动态路由可以提高前端的开发效率,让前端开发人员更加专注于界面和交互的开发。 总之,Ant Design Pro Vue 动态路由是一个非常重要的功能,它大大提高了前端开发的效率和可维护性,也方便了后台管理员进行路由配置。因此,大家在使用 Ant Design Pro Vue 开发企业级中后台系统时,一定要熟练掌握其动态路由的使用方法。 ### 回答3: Ant Design Pro Vue 是一个基于 Vue.js 技术栈的企业级中后台前端解决方案。它使用 Ant Design UI 组件库,并提供了一系列的经过优化的业务逻辑组件和样式,可以帮助开发人员更快速地完成中后台项目的开发。 动态路由Ant Design Pro Vue 的一个重要特性之一,它可以让开发人员根据业务需求动态地生成路由。这个特性的优点在于它可以大大减少开发人员的工作量,提高开发效率。具体来说,动态路由可以帮助开发人员实现以下几方面的需求: 1. 针对不同的角色或权限级别,动态生成不同的路由配置。这样,可以保证不同用户只能访问其具备权限的资源。 2. 根据业务需求动态生成菜单配置。这样,可以方便地根据业务需求灵活地修改菜单展示。 3. 当前路由路径不存在时,可以根据业务需求自动跳转到指定的路由。这样,可以避免用户访问不存在的路由时出现问题。 除了以上几点之外,动态路由还具有以下几个优点: 1. 可以更加灵活地处理路由跳转逻辑,使得开发人员可以更方便地处理复杂的业务逻辑。 2. 可以更好地适应企业级前端项目开发的需求,使得项目可以更容易地扩展和维护。 总之,Ant Design Pro Vue动态路由特性可以帮助开发人员快速构建出高质量的企业级中后台前端项目。它的灵活性和可扩展性可以满足各种不同项目的需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值