user.js 5.7 KB

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