app.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import { sysMenu } from "../modules/login/api";
  2. import staticMenu from "../constants/staticMenu";
  3. // import localMenus from "../constants/menus-data";
  4. const state = {
  5. privilegeMap: {},
  6. privileges: [],
  7. validRoutes: [],
  8. menus: [],
  9. };
  10. const mutations = {
  11. setPrivilegeMap(state, privilegeMap) {
  12. state.privilegeMap = privilegeMap;
  13. },
  14. initStore() {
  15. state.privilegeMap = {};
  16. state.privileges = [];
  17. state.validRoutes = [];
  18. state.menus = [];
  19. },
  20. };
  21. function getPrivilegeMap(data) {
  22. const privilegeMap = {};
  23. const pageSetTypes = ["conditions", "buttons", "lists", "links"];
  24. data.forEach((item) => {
  25. privilegeMap[item.url] = [item.id];
  26. pageSetTypes.forEach((type) => {
  27. if (item[type] && item[type].length) {
  28. item[type].forEach((elem) => {
  29. privilegeMap[item.url].push(`${elem.type}_${elem.url}`.toLowerCase());
  30. });
  31. }
  32. });
  33. });
  34. return privilegeMap;
  35. }
  36. function transformMenu(list) {
  37. return list.map((item) => {
  38. return {
  39. id: item.id,
  40. parentId: item.parentId,
  41. name: item.name,
  42. type: item.type,
  43. url: item.url,
  44. };
  45. });
  46. }
  47. function getMenu(privileges) {
  48. const getChildren = (id) => {
  49. return privileges
  50. .filter((item) => item.parentId === id)
  51. .map((item) => {
  52. return { ...item };
  53. });
  54. };
  55. const menus = getChildren("-1");
  56. const validRoutes = ["Home"];
  57. const toTree = (menus) => {
  58. menus.forEach((menu) => {
  59. const children = getChildren(menu.id);
  60. if (children.length) {
  61. menu.children = children;
  62. toTree(menu.children);
  63. } else {
  64. validRoutes.push(menu.url);
  65. }
  66. });
  67. };
  68. toTree(menus);
  69. return { menus, validRoutes };
  70. }
  71. const actions = {
  72. async updatePrivilegeMap({ state, dispatch }) {
  73. const data = await sysMenu();
  74. // const data = { privileges: localMenus };
  75. const privileges = [...staticMenu, ...data.privileges];
  76. state.privilegeMap = getPrivilegeMap(privileges);
  77. state.privileges = transformMenu(privileges);
  78. const { validRoutes, menus } = getMenu(state.privileges);
  79. state.menus = menus;
  80. state.validRoutes = validRoutes;
  81. },
  82. };
  83. export default {
  84. namespaced: true,
  85. state,
  86. mutations,
  87. actions,
  88. };