user.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  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. if (!result) {
  103. return {};
  104. }
  105. const { menuList, authorities } = formatRouter(result);
  106. // 用户权限
  107. // const authorities =
  108. // result.authorities
  109. // ?.filter((d) => !!d.authority)
  110. // ?.map((d) => d.authority) ?? [];
  111. commit('setAuthorities', authorities);
  112. // 用户角色
  113. // const roles = result.roles?.map((d) => d.roleCode) ?? [];
  114. // commit('setRoles', roles);
  115. // 用户菜单, 过滤掉按钮类型并转为 children 形式
  116. const { menus, homePath } = formatMenus(
  117. USER_MENUS ??
  118. toTreeData({
  119. data: menuList,
  120. idField: 'id',
  121. parentIdField: 'parentId'
  122. })
  123. );
  124. // 用户路由按钮
  125. const { menus: authoritiesRouter } = formatMenus(
  126. USER_MENUS ??
  127. toTreeData({
  128. data: authorities.filter((i) => i.path),
  129. idField: 'id',
  130. parentIdField: 'parentId'
  131. })
  132. );
  133. console.log('menus--', menus);
  134. commit('setMenus', menus);
  135. commit('setAuthoritiesRouter', authoritiesRouter);
  136. // const menus = result;
  137. // const homePath = '/dashboard/workplace';
  138. return {
  139. menus,
  140. homePath,
  141. authoritiesRouter
  142. };
  143. },
  144. /**
  145. * 更新用户信息
  146. */
  147. setInfo ({ commit }, value) {
  148. commit('setUserInfo', value);
  149. },
  150. /**
  151. * 更新菜单数据
  152. */
  153. setMenus ({ commit }, value) {
  154. commit('setMenus', value);
  155. },
  156. /**
  157. * 更新菜单的badge
  158. */
  159. setMenuBadge ({ commit, state }, { path, value, color }) {
  160. const menus = formatTreeData(state.menus, (m) => {
  161. if (path === m.path) {
  162. return {
  163. ...m,
  164. meta: {
  165. ...m.meta,
  166. badge: value,
  167. badgeColor: color
  168. }
  169. };
  170. }
  171. return m;
  172. });
  173. commit('setMenus', menus);
  174. }
  175. }
  176. };