springboot vue 实现动态路由(前端)

前言

项目的后端用的是springboot2.6。前端是vue2 基于vue admin template开发

本文主要讲解动态路由的实现 需要完整代码请参考权限系统

前端

路由配置文件router/index.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: '/404',
    component: () => import('@/views/404'),
    hidden: true
  },

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



/**
 * asyncRoutes
* 需要根据用户角色动态加载的路由
 */
export const asyncRoutes = [
    // 404页面需要放到最后 !!!
    { path: '*', redirect: '/404', hidden: true }
]

const createRouter = () => new Router({
  mode: 'history', // require service support  需要服务支持
  // mode:'hash',
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})

const router = createRouter()

// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher // reset router  重置路由器
}

export default router

获取用户菜单信息api/user.js

export function getInfo(id) {
  return request({
    url: `/menu/userInfo`,
    method: 'get',
  })
}

加载动态路由store/modules/permission.js


// 获取用户菜单信息
import {getInfo} from "@/api/user"
// 导入路由脚本文件中的方法
import { asyncRoutes, constantRoutes } from '@/router'

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


/**
* 使用 meta.role 确定当前用户是否具有权限
 * @param roles
 * @param route
 */

// 权限判定
function hasPermission(roles, route) {
  
  // meta中是否有roles中的角色  包含返回true  否则false meta中没有roles则默认返回true
  if (route.meta && route.meta.roles) {
    return roles.some(role => route.meta.roles.includes(role))
  } else {
    return true
  }
}

/**
* 按递归过滤异步路由表
 * @
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值