user.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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: localStorage.getItem('info') || null,
  35. // 当前登录用户的菜单
  36. menus: null,
  37. // 当前登录用户的权限
  38. authorities: [],
  39. // 当前登录用户的权限路由
  40. authoritiesRouter: [],
  41. // 当前登录用户的角色
  42. roles: []
  43. },
  44. mutations: {
  45. // 设置登录用户的信息
  46. setUserInfo (state, info) {
  47. localStorage.setItem('info', JSON.stringify(info));
  48. console.log('setUserInfo');
  49. state.info = info;
  50. },
  51. // 设置登录用户的菜单
  52. setMenus (state, menus) {
  53. state.menus = menus;
  54. },
  55. // 设置登录用户的权限
  56. setAuthorities (state, authorities) {
  57. state.authorities = authorities;
  58. },
  59. // 设置登录用户的权限路由
  60. setAuthoritiesRouter (state, authoritiesRouter) {
  61. state.authoritiesRouter = authoritiesRouter;
  62. },
  63. // 设置登录用户的角色
  64. setRoles (state, roles) {
  65. state.roles = roles;
  66. }
  67. },
  68. actions: {
  69. /**
  70. * 请求用户信息、权限、角色、菜单
  71. */
  72. // async fetchUserInfo({ commit }) {
  73. // const result = await getResourcesTree().catch(() => {});
  74. // if (!result) {
  75. // return {};
  76. // }
  77. // // 用户信息
  78. // commit('setUserInfo', result);
  79. // // 用户权限
  80. // const authorities =
  81. // result.authorities
  82. // ?.filter((d) => !!d.authority)
  83. // ?.map((d) => d.authority) ?? [];
  84. // commit('setAuthorities', authorities);
  85. // // 用户角色
  86. // const roles = result.roles?.map((d) => d.roleCode) ?? [];
  87. // commit('setRoles', roles);
  88. // // 用户菜单, 过滤掉按钮类型并转为 children 形式
  89. // const { menus, homePath } = formatMenus(
  90. // USER_MENUS ??
  91. // toTreeData({
  92. // data: result.authorities?.filter((d) => d.menuType !== 1),
  93. // idField: 'menuId',
  94. // parentIdField: 'parentId'
  95. // })
  96. // );
  97. // commit('setMenus', menus);
  98. // console.log('menus',menus, 'homePath',homePath)
  99. // return { menus, homePath };
  100. // },
  101. //动态路由
  102. async fetchUserInfo ({ commit }) {
  103. const result = await getResourcesTree().catch(() => {});
  104. const list = result.filter((i) => i.path === '/page-wms');
  105. if (!list.length) {
  106. return {};
  107. }
  108. const { menuList, authorities } = formatRouter(list[0].children);
  109. // 用户权限
  110. // const authorities =
  111. // result.authorities
  112. // ?.filter((d) => !!d.authority)
  113. // ?.map((d) => d.authority) ?? [];
  114. commit('setAuthorities', authorities);
  115. // 用户角色
  116. // const roles = result.roles?.map((d) => d.roleCode) ?? [];
  117. // commit('setRoles', roles);
  118. // 用户菜单, 过滤掉按钮类型并转为 children 形式
  119. const { menus, homePath } = formatMenus(
  120. USER_MENUS ??
  121. toTreeData({
  122. data: menuList,
  123. idField: 'id',
  124. parentIdField: 'parentId'
  125. })
  126. );
  127. // 用户路由按钮
  128. const { menus: authoritiesRouter } = formatMenus(
  129. USER_MENUS ??
  130. toTreeData({
  131. data: authorities.filter((i) => i.path),
  132. idField: 'id',
  133. parentIdField: 'parentId'
  134. })
  135. );
  136. console.log('menus--', menus);
  137. commit('setMenus', menus);
  138. commit('setAuthoritiesRouter', authoritiesRouter);
  139. // const menus = result;
  140. // const homePath = '/dashboard/workplace';
  141. return {
  142. menus,
  143. homePath,
  144. authoritiesRouter
  145. };
  146. },
  147. /**
  148. * 更新用户信息
  149. */
  150. setInfo ({ commit }, value) {
  151. commit('setUserInfo', value);
  152. },
  153. /**
  154. * 更新菜单数据
  155. */
  156. setMenus ({ commit }, value) {
  157. commit('setMenus', value);
  158. },
  159. /**
  160. * 更新菜单的badge
  161. */
  162. setMenuBadge ({ commit, state }, { path, value, color }) {
  163. const menus = formatTreeData(state.menus, (m) => {
  164. if (path === m.path) {
  165. return {
  166. ...m,
  167. meta: {
  168. ...m.meta,
  169. badge: value,
  170. badgeColor: color
  171. }
  172. };
  173. }
  174. return m;
  175. });
  176. commit('setMenus', menus);
  177. }
  178. }
  179. };