user.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. /**
  2. * 登录状态管理
  3. */
  4. import { formatMenus, toTreeData, formatTreeData } from 'ele-admin';
  5. import { USER_MENUS } from '@/config/setting';
  6. import { getResourcesTree } from '@/api/layout';
  7. const formatRouter = (list) => {
  8. let menuList = []; // menuType
  9. let authorities = [];
  10. const fn = (list) => {
  11. let arr = [];
  12. for (const p of list) {
  13. if (p.menuType === 2) {
  14. p.children = [];
  15. authorities.push(p);
  16. } else {
  17. if (p.children?.length) {
  18. p.children = fn(p.children);
  19. } else {
  20. p.children = [];
  21. }
  22. arr.push(p);
  23. }
  24. }
  25. return arr;
  26. };
  27. menuList = fn(list);
  28. return { menuList, authorities };
  29. };
  30. export default {
  31. namespaced: true,
  32. state: {
  33. // 当前登录用户信息
  34. info: null,
  35. // 当前登录用户的菜单
  36. menus: null,
  37. // 当前登录用户的权限
  38. authorities: [],
  39. // 当前登录用户的权限路由
  40. authoritiesRouter: [],
  41. // 当前登录用户的角色
  42. roles: []
  43. },
  44. mutations: {
  45. // 设置登录用户的信息
  46. setUserInfo (state, info) {
  47. state.info = info;
  48. },
  49. // 设置登录用户的菜单
  50. setMenus (state, menus) {
  51. state.menus = menus;
  52. },
  53. // 设置登录用户的权限
  54. setAuthorities (state, authorities) {
  55. state.authorities = authorities;
  56. },
  57. // 设置登录用户的权限路由
  58. setAuthoritiesRouter (state, authoritiesRouter) {
  59. state.authoritiesRouter = authoritiesRouter;
  60. },
  61. // 设置登录用户的角色
  62. setRoles (state, roles) {
  63. state.roles = roles;
  64. }
  65. },
  66. actions: {
  67. /**
  68. * 请求用户信息、权限、角色、菜单
  69. */
  70. // async fetchUserInfo({ commit }) {
  71. // const result = await getResourcesTree().catch(() => {});
  72. // if (!result) {
  73. // return {};
  74. // }
  75. // // 用户信息
  76. // commit('setUserInfo', result);
  77. // // 用户权限
  78. // const authorities =
  79. // result.authorities
  80. // ?.filter((d) => !!d.authority)
  81. // ?.map((d) => d.authority) ?? [];
  82. // commit('setAuthorities', authorities);
  83. // // 用户角色
  84. // const roles = result.roles?.map((d) => d.roleCode) ?? [];
  85. // commit('setRoles', roles);
  86. // // 用户菜单, 过滤掉按钮类型并转为 children 形式
  87. // const { menus, homePath } = formatMenus(
  88. // USER_MENUS ??
  89. // toTreeData({
  90. // data: result.authorities?.filter((d) => d.menuType !== 1),
  91. // idField: 'menuId',
  92. // parentIdField: 'parentId'
  93. // })
  94. // );
  95. // commit('setMenus', menus);
  96. // console.log('menus',menus, 'homePath',homePath)
  97. // return { menus, homePath };
  98. // },
  99. //动态路由
  100. async fetchUserInfo ({ commit }) {
  101. const result = await getResourcesTree().catch(() => {});
  102. const list = result.filter((i) => i.path === '/page-eam');
  103. if (!list.length) {
  104. return {};
  105. }
  106. const { menuList, authorities } = formatRouter(list[0].children);
  107. // 用户权限
  108. // const authorities =
  109. // result.authorities
  110. // ?.filter((d) => !!d.authority)
  111. // ?.map((d) => d.authority) ?? [];
  112. commit('setAuthorities', authorities);
  113. // 用户角色
  114. // const roles = result.roles?.map((d) => d.roleCode) ?? [];
  115. // commit('setRoles', roles);
  116. // 用户菜单, 过滤掉按钮类型并转为 children 形式
  117. const { menus, homePath } = formatMenus(
  118. USER_MENUS ??
  119. toTreeData({
  120. data: menuList,
  121. idField: 'id',
  122. parentIdField: 'parentId'
  123. })
  124. );
  125. // 用户路由按钮
  126. const { menus: authoritiesRouter } = formatMenus(
  127. USER_MENUS ??
  128. toTreeData({
  129. data: authorities.filter((i) => i.path),
  130. idField: 'id',
  131. parentIdField: 'parentId'
  132. })
  133. );
  134. console.log('menus--', menus);
  135. commit('setMenus', menus);
  136. commit('setAuthoritiesRouter', authoritiesRouter);
  137. // const menus = result;
  138. // const homePath = '/dashboard/workplace';
  139. return {
  140. menus,
  141. homePath,
  142. authoritiesRouter
  143. };
  144. },
  145. /**
  146. * 更新用户信息
  147. */
  148. setInfo ({ commit }, value) {
  149. commit('setUserInfo', value);
  150. },
  151. /**
  152. * 更新菜单数据
  153. */
  154. setMenus ({ commit }, value) {
  155. commit('setMenus', value);
  156. },
  157. /**
  158. * 更新菜单的badge
  159. */
  160. setMenuBadge ({ commit, state }, { path, value, color }) {
  161. const menus = formatTreeData(state.menus, (m) => {
  162. if (path === m.path) {
  163. return {
  164. ...m,
  165. meta: {
  166. ...m.meta,
  167. badge: value,
  168. badgeColor: color
  169. }
  170. };
  171. }
  172. return m;
  173. });
  174. commit('setMenus', menus);
  175. }
  176. }
  177. };