附上: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. Linux 命令之 chmod

    命令格式 chmod有以下三种格式 chmod [-cfvR] MODE[,MODE]... FILE... chmod [-cfvR] OCTAL-MODE FILE... chmod [-cfvR ...

  2. Mybatis入门简版(二)

    一.Dao层开发的方式 以前dao层开发比较繁琐,写了接口还得写实现类,实际上用了Mybatis之后写实现类非常重复,都是重复的代码.那么此时改成另外一种简单形式. 遵循以下四个原则(名称.形参.返回 ...

  3. RF中for循环

    robotframework支持FOR循环语句,语法和Python的语法基本相同,但robotframework中,“FOR”关键字前面需要增加一个“:”,写成“:FOR”,其它与Python的语法相 ...

  4. [Luogu3069][USACO13JAN]牛的阵容Cow Lineup

    题目描述 Farmer John's N cows (1 <= N <= 100,000) are lined up in a row. Each cow is identified by ...

  5. TensorFlow2.0(8):误差计算——损失函数总结

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  6. java学习6-java基础类库

    1.与用户互动 2.系统相关 3.常用类 4.日期.时间类

  7. 在WPF中使用.NET Core 3.0依赖项注入和服务提供程序

    前言 我们都知道.NET Core提供了对依赖项注入的内置支持.我们通常在ASP.NET Core中使用它(从Startup.cs文件中的ConfigureServices方法开始),但是该功能不限于 ...

  8. 百万年薪python之路 -- 模拟三次账号登录锁定功能

    用代码实现三次用户登录及锁定(选做,时间充足建议做一做) 项目分析: 一.首先程序启动,显示下面内容供用户选择: 1.注册 2.登录 a.用户选择登录的时候,首先判断用户名在userinfo.txt表 ...

  9. Fiddler抓包和工作原理

    一.概述 Fiddler是一款免费且功能强大的数据包抓取软件.它通过代理的方式获取程序http通讯的数据, 可以用其检测网页和服务器的交互情况,能够记录所有客户端和服务器间的http请求, 支持监视. ...

  10. ORACLE定时备份方案

    ORACLE定时备份方案 采用ORACLE的EXP工具,实现ORACLE的备份:采用LINUX的服务crond实现定时功能. 1 编辑SH,实现备份功能 #vi oracle_backup.sh,输入 ...