附上: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. 实体对象属性和值转为键值对Dictionary

    实体对象转为Dictionary键值对 /// <summary> /// 实体转键值对 /// </summary> /// <typeparam name=" ...

  2. 安装高可用Hadoop生态 (四) 安装Spark

    4.    安装Spark 4.1. 准备目录 -bin-without-hadoop.tgz -C /opt/cloud/packages/ -bin-without-hadoop /opt/clo ...

  3. AppBoxFuture: 服务模型的在线调试

      框架内的服务模型(ServiceModel)用于处理各类业务逻辑(如最简单的CRUD操作),在设计时以类似于伪代码的形式存在,发布时后端会通过Roslyn转换并编译为运行时代码.为了方便开发者更简 ...

  4. [NOIp2011] luogu P1313 计算系数

    继续水博客,待会回去上术学. 题目描述 给定一个多项式 (by+ax)k(by+ax)^k(by+ax)k ,请求出多项式展开后 xn×ymx^n \times y^mxn×ym 项的系数. Solu ...

  5. ArrayList源码解析(二)

    欢迎转载,转载烦请注明出处,谢谢. https://www.cnblogs.com/sx-wuyj/p/11177257.html 自己学习ArrayList源码的一些心得记录. 继续上一篇,Arra ...

  6. AppBoxFuture: 服务模型的在线调试与性能监测

      框架内的服务模型(ServiceModel)用于处理各类业务逻辑(如最简单的CRUD操作),在设计时以类似于伪代码的形式存在,发布时后端会通过Roslyn转换并编译为运行时代码.为了方便开发者作者 ...

  7. 13.Linux文件查找-find命令

    find 命令的基本语法如下: 命令 路径 选项 表达式 动作 find [path...] [options] [expression] [action] 查找 地区 妹纸 18-25岁 约? (1 ...

  8. 【原创】docker在Ubuntu下1小时快速学习

    前言 由于工作原因,很多情况下需要快速学习新的知识,针对docker如果从头到尾看相关书籍学习会非常慢,所以整理了下docker的常用操作,只要跟着本文学习操作,一小时就能掌握docker大部最常用分 ...

  9. vue 代码迁移的坑

    由于开发需要,开发过程中总会遇到由于代码调试.svn/git上传等过程中,总会出现代码迁移文件的需求,很多时候,迁移过后总会出现一些大大小小的问题, 首先,需要迁移文件内有没有系统自动隐藏的文件(例如 ...

  10. Newman基本使用

    简介 Newman 是 Postman 推出的一个 nodejs 库,直接来说就是 Postman 的json文件可以在命令行执行的插件. Newman 可以方便地运行和测试集合,并用之构造接口自动化 ...