permission.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import config from '@/config'
  2. import storage from '@/utils/storage'
  3. import constant from '@/utils/constant'
  4. import {
  5. workMenuList
  6. } from '@/api/system/menu'
  7. const baseUrl = config.baseUrl
  8. const permission = {
  9. state: {
  10. permissions_menu: storage.get(constant.permissions_menu),
  11. permissions_btn: storage.get(constant.permissions_btn)
  12. },
  13. mutations: {
  14. SET_PERMISSIONS_MENU: (state, permissions) => {
  15. state.permissions_menu = permissions
  16. storage.set(constant.permissions_menu, permissions)
  17. },
  18. SET_PERMISSIONS_BTN: (state, permissions) => {
  19. state.permissions_btn = permissions
  20. storage.set(constant.permissions_btn, permissions)
  21. }
  22. },
  23. actions: {
  24. // 获取用户权限信息
  25. GetPermis({
  26. commit,
  27. state
  28. }) {
  29. return new Promise((resolve, reject) => {
  30. let sysId = [uni.getStorageSync('sysId')]
  31. workMenuList({
  32. sysId: sysId //平台端获取固定系统ID
  33. }).then(res => {
  34. let data = res.data;
  35. if (data && data.length > 0) {
  36. let permission=assembleRouter(data[0].menu)
  37. commit('SET_PERMISSIONS_MENU', JSON.stringify(permission.menu))
  38. commit('SET_PERMISSIONS_BTN', JSON.stringify(permission.btn))
  39. }
  40. resolve(data)
  41. }).catch(error => {
  42. reject(error)
  43. })
  44. })
  45. }
  46. }
  47. }
  48. //遍历后台传来的路由,组成路由树结构
  49. function assembleRouter (allRouterMenu) {
  50. // 收集每一项的下标
  51. const idMapping = allRouterMenu.reduce((acc, el, i) => {
  52. acc[el.id] = i;
  53. return acc;
  54. }, {});
  55. let menu = [];
  56. let btn=[];
  57. allRouterMenu.forEach(el => {
  58. // 判断根节点
  59. if (el.paterId === null || el.paterId === 0) {
  60. menu.push(el)
  61. return;
  62. }
  63. // 用映射表找到父元素
  64. const parentEl = allRouterMenu[idMapping[el.paterId]];
  65. // 把当前元素添加到父元素的`children`数组中
  66. if (parentEl&&el.type !== 3) { //非按钮,组成路由树结构
  67. parentEl.children = [...(parentEl.children || []), el];
  68. }else{
  69. btn.push(el.code)
  70. }
  71. });
  72. return {
  73. menu:menu,
  74. btn:btn
  75. }
  76. }
  77. export default permission