router.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import Vue from "vue";
  2. import Router from "vue-router";
  3. import Home from "./views/Home.vue";
  4. import HomePage from "./views/HomePage.vue";
  5. import NotFound from "./views/404.vue";
  6. import login from "./modules/login/router";
  7. // module-example
  8. import base from "./modules/base/router";
  9. import exam from "./modules/exam/router";
  10. import print from "./modules/print/router";
  11. import stmms from "./modules/stmms/router";
  12. import analysis from "./modules/analysis/router";
  13. import mark from "./modules/mark/router";
  14. import course from "./modules/course/router";
  15. import target from "./modules/target/router";
  16. import statistics from "./modules/statistics/router";
  17. // card part
  18. import card from "./modules/card/router";
  19. // admin
  20. import admin from "./modules/admin/router";
  21. // tool
  22. import tool from "../tools/router";
  23. // ignore NavigationDuplicated. https://github.com/vuejs/vue-router/issues/2881
  24. // const originalPush = Router.prototype.push;
  25. // Router.prototype.push = function push(location, onResolve, onReject) {
  26. // if (onResolve || onReject)
  27. // return originalPush.call(this, location, onResolve, onReject);
  28. // try {
  29. // return originalPush.call(this, location).catch((err) => err);
  30. // } catch (error) {
  31. // console.log(error);
  32. // }
  33. // };
  34. // end ignore
  35. Vue.use(Router);
  36. /*
  37. history模式 nginx配置
  38. location / {
  39. try_files $uri $uri/ /index.html;
  40. }
  41. */
  42. let router = new Router({
  43. mode: "history",
  44. routes: [
  45. {
  46. path: "/",
  47. name: "Index",
  48. redirect: { name: "Login" },
  49. },
  50. {
  51. path: "/home/:nextRouter?",
  52. name: "Home",
  53. component: Home,
  54. children: [
  55. {
  56. path: "/home-page",
  57. name: "HomePage",
  58. component: HomePage,
  59. },
  60. ...base,
  61. ...exam,
  62. ...print,
  63. ...stmms,
  64. ...analysis,
  65. ...mark,
  66. ...course,
  67. ...target,
  68. ...statistics,
  69. ],
  70. },
  71. { ...login },
  72. { ...admin },
  73. ...card,
  74. ...tool,
  75. {
  76. path: "*",
  77. name: "404",
  78. component: NotFound,
  79. },
  80. // [lazy-loaded] route level code-splitting
  81. // {
  82. // path: "/about",
  83. // name: "about",
  84. // // this generates a separate chunk (about.[hash].js) for this route
  85. // // which is lazy-loaded when the route is visited.
  86. // component: () =>
  87. // import(/* webpackChunkName: "about" */ "./views/About.vue")
  88. // }
  89. ],
  90. });
  91. // route interceptor
  92. router.beforeEach((to, from, next) => {
  93. const privilegeMap = Vue.ls.get("privilegeMap", {});
  94. Vue.ls.set(
  95. "privilegeId",
  96. privilegeMap[to.name] ? privilegeMap[to.name][0] : ""
  97. );
  98. const token = Vue.ls.get("token");
  99. if (to.meta.noRequire) {
  100. next();
  101. return;
  102. }
  103. if (!token) {
  104. // 登录失效的处理
  105. const returnUrl = Vue.ls.get("returnUrl");
  106. if (returnUrl) {
  107. window.location.href = returnUrl;
  108. return;
  109. }
  110. Vue.ls.clear();
  111. const paramDomainCode = window.sessionStorage.getItem("paramDomainCode");
  112. const routeDomainCode = window.sessionStorage.getItem("routeDomainCode");
  113. if (paramDomainCode) {
  114. next({ name: "Login", query: { code: paramDomainCode } });
  115. } else if (routeDomainCode) {
  116. next({ name: "Login", params: { code: routeDomainCode } });
  117. } else {
  118. next({ name: "Login" });
  119. }
  120. return;
  121. }
  122. next();
  123. });
  124. export default router;