123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import { asyncRouterMap, constantRouterMap } from '@/router/index';
- //判断是否有权限访问该菜单
- function hasPermission(menus, route) {
- if (route.name) {
- let currMenu = getMenu(route.name, menus);
- if (currMenu!=null) {
- //设置菜单的标题、图标和可见性
- if (currMenu.title != null && currMenu.title !== '') {
- route.meta.title = currMenu.title;
- }
- if (currMenu.icon != null && currMenu.title !== '') {
- route.meta.icon = currMenu.icon;
- }
- if(currMenu.hidden!=null){
- route.hidden = currMenu.hidden !== 0;
- }
- if (currMenu.sort != null && currMenu.sort !== '') {
- route.sort = currMenu.sort;
- }
- return true;
- } else {
- route.sort = 0;
- if (route.hidden !== undefined && route.hidden === true) {
- route.sort=-1;
- return true;
- } else {
- return false;
- }
- }
- } else {
- return true
- }
- }
- //根据路由名称获取菜单
- function getMenu(name, menus) {
- for (let i = 0; i < menus.length; i++) {
- let menu = menus[i];
- if (name===menu.name) {
- return menu;
- }
- }
- return null;
- }
- //对菜单进行排序
- function sortRouters(accessedRouters) {
- for (let i = 0; i < accessedRouters.length; i++) {
- let router = accessedRouters[i];
- if(router.children && router.children.length > 0){
- router.children.sort(compare("sort"));
- }
- }
- accessedRouters.sort(compare("sort"));
- }
- //降序比较函数
- function compare(p){
- return function(m,n){
- let a = m[p];
- let b = n[p];
- return b - a;
- }
- }
- const permission = {
- state: {
- routers: constantRouterMap,
- addRouters: []
- },
- mutations: {
- SET_ROUTERS: (state, routers) => {
- state.addRouters = routers;
- state.routers = constantRouterMap.concat(routers);
- }
- },
- actions: {
- GenerateRoutes({ commit }, data) {
- return new Promise(resolve => {
- const { menus } = data;
- const { username } = data;
- const accessedRouters = asyncRouterMap.filter(v => {
- //admin帐号直接返回所有菜单
- // if(username==='admin') return true;
- if (hasPermission(menus, v)) {
- if (v.children && v.children.length > 0) {
- v.children = v.children.filter(child => {
- if (hasPermission(menus, child)) {
- return child
- }
- return false;
- });
- return v
- } else {
- return v
- }
- }
- return false;
- });
- //对菜单进行排序
- sortRouters(accessedRouters);
- commit('SET_ROUTERS', accessedRouters);
- resolve();
- })
- }
- }
- };
- export default permission;
|