permission.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { asyncRouterMap, constantRouterMap } from '@/router/index';
  2. //判断是否有权限访问该菜单
  3. function hasPermission(menus, route) {
  4. if (route.name) {
  5. let currMenu = getMenu(route.name, menus);
  6. if (currMenu!=null) {
  7. //设置菜单的标题、图标和可见性
  8. if (currMenu.title != null && currMenu.title !== '') {
  9. route.meta.title = currMenu.title;
  10. }
  11. if (currMenu.icon != null && currMenu.title !== '') {
  12. route.meta.icon = currMenu.icon;
  13. }
  14. if(currMenu.hidden!=null){
  15. route.hidden = currMenu.hidden !== 0;
  16. }
  17. if (currMenu.sort != null && currMenu.sort !== '') {
  18. route.sort = currMenu.sort;
  19. }
  20. return true;
  21. } else {
  22. route.sort = 0;
  23. if (route.hidden !== undefined && route.hidden === true) {
  24. route.sort=-1;
  25. return true;
  26. } else {
  27. return false;
  28. }
  29. }
  30. } else {
  31. return true
  32. }
  33. }
  34. //根据路由名称获取菜单
  35. function getMenu(name, menus) {
  36. for (let i = 0; i < menus.length; i++) {
  37. let menu = menus[i];
  38. if (name===menu.name) {
  39. return menu;
  40. }
  41. }
  42. return null;
  43. }
  44. //对菜单进行排序
  45. function sortRouters(accessedRouters) {
  46. for (let i = 0; i < accessedRouters.length; i++) {
  47. let router = accessedRouters[i];
  48. if(router.children && router.children.length > 0){
  49. router.children.sort(compare("sort"));
  50. }
  51. }
  52. accessedRouters.sort(compare("sort"));
  53. }
  54. //降序比较函数
  55. function compare(p){
  56. return function(m,n){
  57. let a = m[p];
  58. let b = n[p];
  59. return b - a;
  60. }
  61. }
  62. const permission = {
  63. state: {
  64. routers: constantRouterMap,
  65. addRouters: []
  66. },
  67. mutations: {
  68. SET_ROUTERS: (state, routers) => {
  69. state.addRouters = routers;
  70. state.routers = constantRouterMap.concat(routers);
  71. }
  72. },
  73. actions: {
  74. GenerateRoutes({ commit }, data) {
  75. return new Promise(resolve => {
  76. const { menus } = data;
  77. const { username } = data;
  78. const accessedRouters = asyncRouterMap.filter(v => {
  79. //admin帐号直接返回所有菜单
  80. // if(username==='admin') return true;
  81. if (hasPermission(menus, v)) {
  82. if (v.children && v.children.length > 0) {
  83. v.children = v.children.filter(child => {
  84. if (hasPermission(menus, child)) {
  85. return child
  86. }
  87. return false;
  88. });
  89. return v
  90. } else {
  91. return v
  92. }
  93. }
  94. return false;
  95. });
  96. //对菜单进行排序
  97. sortRouters(accessedRouters);
  98. commit('SET_ROUTERS', accessedRouters);
  99. resolve();
  100. })
  101. }
  102. }
  103. };
  104. export default permission;