vue根据后端数据动态显示路由

// router.js
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)

/* Layout */
import Layout from '@/layout'

// 路由基础路径
export const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login/index'),
    hidden: true
  },

  { path: '/caslogin',
    meta: { title: 'cas登录', noCache: true },
    component: () => import('@/views/cas-login/index'),
    hidden: true
  },

  {
    path: '/404',
    component: () => import('@/views/404'),
    hidden: true
  },

  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    hidden: true,
    children: [{
      path: 'dashboard',
      name: 'Dashboard',
      component: () => import('@/views/dashboard/index'),
      meta: { title: ' 首页', icon: 'dashboard', affix: true }
    }]
  }
]

export default router
// permission.js 根据权限动态添加路由(此处只写核心部分)


     router.beforeEach(async(to, from, next) => {

       const hasToken = getToken()
    if (hasToken) {
      if (to.path === '/login') {
        next()
        // NProgress.done()
      } else {
      // determine whether the user has obtained his permission roles through getInfo
      // 获取用户角色
      const hasRoles = store.getters.roles && store.getters.roles.length > 0
      // 获取角色为一个异步 首先会进入 else判断
      if (hasRoles) {
        store.commit('permission/SWITCH_MENU', to.path)
        store.dispatch('app/showSideBar', { opened:store.getters.permission_routes.length > 5 })
        next()
      } else {
         // 核心部分
        try {
          // 获取用户角色信息
          const { roles } = await store.dispatch('user/getInfo')

          // 根据角色 获取角色的路由
          const accessRoutes = await store.dispatch('permission/generateRoutes', { roles, toPath: to.path })
          // 动态添加路由
          console.log(accessRoutes, 'accessRoutes')
          router.addRoutes(accessRoutes)

          next({ ...to, replace: true })
        } catch (error) {
          // 删除令牌并转到登录页面重新登录
          await store.dispatch('user/resetToken')
          Message.error(error || 'Has Error')
          next(`/login?redirect=${to.path}`)
          NProgress.done()
        }
      }
    }
  } 
})

 console.log(accessRoutes):

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值