router.js 3.2 KB

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