auth.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { login } from "../api/login";
  2. import { getAuthRouterFn } from "@/utils/getAuth";
  3. import { resetRouter } from "@/router/index";
  4. export default {
  5. namespaced: true, // 子模块一定要开启命名空间
  6. state: {
  7. userInfo: {},
  8. dynamicRouter: [],
  9. },
  10. getters: {},
  11. mutations: {
  12. SET_USERINFO(state, payload) {
  13. state.userInfo = payload;
  14. },
  15. RESET_USER_STATE(state) {
  16. state.userInfo = {};
  17. resetRouter();
  18. },
  19. SET_DYNAMIC_ROUTER(state, payload) {
  20. state.dynamicRouter = payload;
  21. },
  22. },
  23. actions: {
  24. async goLogin({ commit, dispatch }, { loginForm, router }) {
  25. try {
  26. const result = await login(loginForm);
  27. commit("SET_USERINFO", result.data);
  28. dispatch("setAddRouter", {
  29. resultRouter: result.data.permission,
  30. router,
  31. });
  32. } catch (error) {
  33. console.error("Login error:", error);
  34. }
  35. },
  36. setAddRouter({ commit }, { resultRouter, router }) {
  37. // 获取home路由
  38. const homeRoute = router.options.routes.find(
  39. (route) => route.name === "home"
  40. );
  41. // 确保home路由存在
  42. if (homeRoute) {
  43. if (!homeRoute.children) {
  44. homeRoute.children = [];
  45. }
  46. // 过滤掉动态添加的路由,保留初始状态的路由
  47. const originalChildren = homeRoute.children.filter(
  48. (route) => route.meta && !route.meta.dynamic
  49. );
  50. // 清空原有的动态子路由
  51. homeRoute.children = originalChildren;
  52. const { authRouterList } = getAuthRouterFn(resultRouter);
  53. console.log();
  54. commit("SET_DYNAMIC_ROUTER", authRouterList);
  55. authRouterList.forEach((item) => {
  56. // 动态路由的父路径设置为home
  57. homeRoute.children.push(item);
  58. });
  59. // 重新添加home路由
  60. router.addRoute(homeRoute);
  61. }
  62. // console.log("/homeRoute", homeRoute, router.getRoutes());
  63. // 添加404页面路由
  64. router.addRoute({
  65. path: "/:pathMatch(.*)*",
  66. name: "NotFound",
  67. component: () => import("@/views/error/404.vue"),
  68. meta: { hidden: true },
  69. });
  70. // 确保导航到动态添加的路由
  71. router.push("/home");
  72. },
  73. logout({ commit }) {
  74. // 重置 Vuex 状态
  75. commit("RESET_USER_STATE");
  76. // 重置路由
  77. resetRouter();
  78. },
  79. },
  80. };