附上:vue-element-admin 官方文档 vue-element-admin https://panjiachen.github.io/vue-element-admin-site/zh/guide/

   大佬写的权限发现在自己公司上面用并不好使做了点修改费了老大劲

1,首先数据库表结构为

 CREATE TABLE [dbo].[QD_Router](
Id INT IDENTITY(1,1) NOT NULL,--唯一id
SySCName NVARCHAR](50) NULL,--菜单中文名称
name NVARCHAR(50) NULL ,--菜单英文名称
SysLayer INT NULL,--菜单等级
SysUpId INT NULL,--菜单上级id
)

2,需要修改src\store\modules\user.js 下GetInfo方法

  GetInfo({ commit, state }) {
return new Promise((resolve, reject) => {
QueryUserRole().then(response => {
console.log(response) resolve(response)
}).catch(error => {
reject(error)
})
})
},

3. 新建dynamicRoutes.js:该文件中定义需要根据用户权限动态挂载显示的路由

 import Layout from '@/layout'
/**
* 动态路由,需要根据用户权限动态挂载
*/
const DynamicRoutes = [
{
path: '/system',
component: Layout,
redirect: '/system/user',
name: 'System',
meta: {
title: '系统管理',
icon: 'example',
permission: 'MENU_SYSTEM'
},
children: [
{
path: 'user',
name: 'User',
component: () => import('@/views/system/user/index'),
meta: {
title: '用户管理',
icon: 'table',
permission: 'MENU_SYSTEM_USER'
}
},
{
path: 'role',
name: 'Role',
component: () => import('@/views/system/role/index'),
meta: {
title: '角色管理',
icon: 'table',
permission: 'MENU_SYSTEM_ROLE'
}
},
{
path: 'dict',
name: 'Dict',
component: () => import('@/views/system/dict/index'),
meta: {
title: '字典管理',
icon: 'table',
permission: 'MENU_SYSTEM_DICT'
}
}
]
},
] export default DynamicRoutes

4,permission.js:该文件用于路由跳转前的权限校验,如:token校验、获取用户信息生成用户动态菜单等

 import router from './router'
import store from './store'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import { Message } from 'element-ui'
import { getToken } from '@/utils/auth' // getToken from cookie
import { loginCheck } from "@/api/login";
import asyncRouterMap from './router/dynamicRoutes' NProgress.configure({ showSpinner: false })// NProgress configuration const whiteList = ['/login'] // 不重定向白名单 //将后台传输的数据与当前路由对比生成用户所属路由
export function recursionRouter(userRouter = [], allRouter = []) {
var realRoutes = []
allRouter.forEach((v) => { userRouter.forEach((item) => {
if (v.name == item.name) { v.children = recursionRouter(item.SysLayer, v.children)
realRoutes.push(v) }
})
}) return realRoutes
}
//获取后台传输过来的用户权限
export function arrayToTree(arr, SysUpId) {
let temp = [];
let treeArr = arr;
treeArr.forEach((item, index) => {
if (item.SysUpId == SysUpId) {
if (arrayToTree(treeArr, treeArr[index].Id).length > 0) {
treeArr[index].SysLayer = arrayToTree(treeArr, treeArr[index].Id);
}
temp.push(treeArr[index]);
}
});
return temp;
}
router.beforeEach((to, from, next) => {
NProgress.start()
if (getToken()) {
if (to.path === '/login') {
next({ path: '/' })
NProgress.done() /
} else {
if (store.getters.roles.length === 0) {
store.dispatch('GetInfo').then(res => {
let Hroel = arrayToTree(res,0)
let newRole = recursionRouter(Hroel,asyncRouterMap)
router.addRoutes(newRole)
router.options.routes = newRole
//在每次刷新时校验token是否过期
loginCheck(getToken()).then(result => {
if (result.code != 200) {
store.dispatch('FedLogOut').then(() => {
Message.error(err || '登录失效请重新登录')
next({ path: '/' })
})
}
})
next()
}).catch((err) => {
store.dispatch('FedLogOut').then(() => {
Message.error(err || '登录失效请重新登录')
next({ path: '/' })
})
})
} else {
next()
}
}
} else {
if (whiteList.indexOf(to.path) !== -1) {
next()
} else {
next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
NProgress.done()
}
}
})
router.afterEach(() => {
NProgress.done() // 结束Progress
})

使用 vue-element-admin 动态路由渲染的更多相关文章

  1. Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)

    Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成) 动态表单生成 ElementUI官网引导 Element表单生成 Element动态增减表单,在线代码 关键配置 templa ...

  2. vue+iview实现动态路由和权限验证

    github上关于vue动态添加路由的例子很多,本项目参考了部分项目后,在iview框架基础上完成了动态路由的动态添加和菜单刷新.为了帮助其他需要的朋友,现分享出实现逻辑,欢迎一起交流学习. Gith ...

  3. vue前后分离动态路由和权限管理方案

    需求 需要根据不同的角色来显示不同的菜单 问题 系统是前后分离模式开发的,出现了后端接口和前端路由都需要权限管理. 思路 后端的接口肯定得验证权限 在前端做好组件名和组件的映射 前端的路由通过后端发回 ...

  4. vue element Admin - 修改浏览器标签名 + 添加tagView标签 +固定导航头部 + 添加侧边栏Logo

    1 .修改浏览器标签名称: 修改浏览器标签名称在文件:\src\settings.js   image.png 2 .修改固定头部Header和侧边栏 Logo:   image.png 1)侧边栏文 ...

  5. vue+element创建动态的form表单.以及动态生成表格的行和列

    动态创建form表单,网上有插件 (form-create) 不过我不知道它怎么用,没有使用成功,如果你使用成功了,欢迎下方留言. 最后我使用了笨方法,针对各个表单写好通用的组件,然后根据type用v ...

  6. vue系列之动态路由【原创】

    开题 最近用vue来构建了一个小项目,由于项目是以iframe的形式嵌套在别的项目中的,所以对于登录的验证就比较的麻烦,索性后端大佬们基于现在的问题提出了解决的方案,在看到他们的解决方案之前,我先画了 ...

  7. iview admin动态路由实现

    参考 https://blog.csdn.net/weixin_41538490/article/details/93749942

  8. 循序渐进VUE+Element 前端应用开发(27)--- 数据表的动态表单设计和数据存储

    在我们一些系统里面,有时候会需要一些让用户自定义的数据信息,一般这些可以使用扩展JSON进行存储,不过每个业务表的显示项目可能不一样,因此需要根据不同的表单进行设计,然后进行对应的数据存储.本篇随笔结 ...

  9. Nuxt的动态路由及路由校验入门

    其实动态路由就是带参数的路由.比如我们现在新闻模块下面有很多新闻详情页,这时候就需要动态路由的帮助了. 新闻详细页面我们在news文件夹下面新建了_id.vue的文件,以下划线为前缀的Vue文件就是动 ...

随机推荐

  1. Spring Boot2 系列教程(十二)@ControllerAdvice 的三种使用场景

    严格来说,本文并不算是 Spring Boot 中的知识点,但是很多学过 SpringMVC 的小伙伴,对于 @ControllerAdvice 却并不熟悉,Spring Boot 和 SpringM ...

  2. 《java编程思想》P160-P180(第八章部分+第九章部分)

    1.什么是多态? 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 现实中,关于多态的例子不胜枚举.比方说按下 F1 ...

  3. .NET北京俱乐部,技术的饕餮盛宴,不枉此行

    在19年年尾,我们相约于.NET北京俱乐部 DNT精英论坛暨.NET北京俱乐部是由资深.NET专家和社区活跃分子发起的技术论坛,以“分享.成长.合作.共赢”为原则,致力于打造一个领先的技术分享平台和成 ...

  4. PHP会话机制---session的基本使用

    登录网站后,在每个网页都能拿到用户信息 (1) 使用超链接传递用户名,这样太繁琐了,不建议使用 . (2) 使用数据库,每打开一个页面都查询一次用户信息表,这样网页加载速度变慢,用户体验变差. (3) ...

  5. 02 【PMP】项目管理系统、PMIS、工作授权系统、配置管理系统、变更管理

    PMBOK融会贯通:盘点八大系统<项目管理系统.PMIS.工作授权系统.配置管理系统.变更管理>   一.  PMBOK相关系统: 工作系统作为事业环境因素,提高或限制项目管理的灵活性,并 ...

  6. [Luogu3070][USACO13JAN]岛游记Island Travels

    题目描述 Farmer John has taken the cows to a vacation out on the ocean! The cows are living on N (1 < ...

  7. 百万年薪python之路 -- 闭包

    2.闭包 闭包的定义: 闭包是嵌套在函数中的函数. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用. 一句话定义就是:在嵌套函数内,对非全局变量 (且不是本层的变量)的引用 如何判断判断闭包? ...

  8. 09 python学习笔记-操作excel(九)

    python操作excel使用xlrd.xlwt和xlutils模块,xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的.这几个模块可以使用pip安装, ...

  9. spring cloud(Greenwich SR)- Eureka

    spring cloud study 本次学习基于spring cloud Greenwich SR1 版本 学习要点: Spring Boot/Spring Cloud应用开发套路 加依赖 加注解 ...

  10. AJAX异步检查,检查用户名是否存在

    AJAX异步检查,检查用户名是否存在 写法一: var xmlHttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, ...