permission.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import { constantRoutes } from '@/router'
  2. import { validatenull } from '@/utils/validate'
  3. import { postJson } from '@/api/common'
  4. import Layout from '@/layout'
  5. import Cookies from 'js-cookie'
  6. function buildRouter(aMenu) {
  7. const aRouter = []
  8. aMenu.forEach(item => {
  9. if (!validatenull(item.component)) {
  10. const oRouter = {
  11. meta: { 'title': '', 'icon': '' },
  12. children: []
  13. }
  14. if (item.component !== 'Iframe') {
  15. if (item.component === 'Layout') {
  16. oRouter.component = Layout
  17. } else {
  18. oRouter.component = require('@/views/' + item.component + '.vue').default
  19. }
  20. oRouter.name = item.path
  21. oRouter.id = item.id || null
  22. if (item.redirect !== '') {
  23. oRouter.redirect = item.redirect || null
  24. oRouter.path = '/' + item.path
  25. } else {
  26. oRouter.path = item.path
  27. }
  28. oRouter.meta.icon = item.icon
  29. oRouter.meta.title = item.title
  30. oRouter.meta.noCache = true
  31. if(item.menu_type == 1){
  32. oRouter.children = validatenull(item.children) ? [] : buildRouter(item.children)
  33. aRouter.push(oRouter)
  34. }
  35. }
  36. }
  37. })
  38. return aRouter
  39. }
  40. /**
  41. * Use meta.role to determine if the current user has permission
  42. * @param roles
  43. * @param route
  44. */
  45. function hasPermission(roles, route) {
  46. if (route.meta && route.meta.roles) {
  47. return roles.some(role => route.meta.roles.includes(role))
  48. } else {
  49. return true
  50. }
  51. }
  52. /**
  53. * Filter asynchronous routing tables by recursion
  54. * @param routes asyncRoutes
  55. * @param roles
  56. */
  57. export function filterAsyncRoutes(routes, roles) {
  58. const res = []
  59. routes.forEach(route => {
  60. const tmp = { ...route }
  61. if (hasPermission(roles, tmp)) {
  62. if (tmp.children) {
  63. tmp.children = filterAsyncRoutes(tmp.children, roles)
  64. }
  65. res.push(tmp)
  66. }
  67. })
  68. return res
  69. }
  70. const state = {
  71. routes: [],
  72. addRoutes: [],
  73. data1: {
  74. name: 'getmenu',
  75. idname: 'id',
  76. parammaps: { id: -1 }
  77. }
  78. }
  79. const mutations = {
  80. SET_ROUTES: (state, routes) => {
  81. state.addRoutes = routes
  82. state.routes = constantRoutes.concat(routes)
  83. }
  84. }
  85. const actions = {
  86. generateRoutes({ commit }, roles) {
  87. return new Promise((resolve, reject) => {
  88. //
  89. let url = 'api/v1/system/user/permissions'
  90. let data = {}
  91. postJson(url,data).then(response => {
  92. if(response.code == 200){
  93. sessionStorage.setItem('buttonList', JSON.stringify(response.data.menu_buttons_path)) //所有按钮
  94. sessionStorage.setItem('pastureList', JSON.stringify(response.data.pasture_list)) //所属牧场
  95. if(response.data.pasture_list.length>0){
  96. Cookies.set('pastureId', response.data.pasture_list[0].id)
  97. }else{
  98. Cookies.set('pastureId', 0)
  99. }
  100. const menus = response.data.menu_list
  101. if (menus.length === 0) {
  102. reject('menus data is null')
  103. }
  104. const accessedRoutes = buildRouter(menus)
  105. accessedRoutes.push({ path: '*', redirect: '/404', hidden: true })
  106. sessionStorage.setItem('menuList', JSON.stringify(accessedRoutes))
  107. commit('SET_ROUTES', accessedRoutes)
  108. resolve(accessedRoutes)
  109. }else{
  110. const menus = []
  111. if (menus.length == 0) {
  112. reject('当前用户角色未分配页面权限,无法登录')
  113. }
  114. const accessedRoutes = buildRouter(menus)
  115. accessedRoutes.push({ path: '*', redirect: '/404', hidden: true })
  116. commit('SET_ROUTES', accessedRoutes)
  117. resolve(accessedRoutes)
  118. }
  119. })
  120. })
  121. }
  122. }
  123. export default {
  124. namespaced: true,
  125. state,
  126. mutations,
  127. actions
  128. }