123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- import Vue from "vue";
- import Router from "vue-router";
- import store from "./store";
- import { SYS_ADMIN_NAME } from "@/constants/enumerate";
- import Home from "./views/Home.vue";
- import HomePage from "./views/home-page/HomePage.vue";
- import NotFound from "./views/404.vue";
- import login from "./modules/login/router";
- // module-example
- import base from "./modules/base/router";
- import exam from "./modules/exam/router";
- import print from "./modules/print/router";
- import stmms from "./modules/stmms/router";
- import analysis from "./modules/analysis/router";
- import mark from "./modules/mark/router";
- import course from "./modules/course/router";
- import target from "./modules/target/router";
- import statistics from "./modules/statistics/router";
- // card part
- import card from "./modules/card/router";
- // admin
- import admin from "./modules/admin/router";
- // tool
- import tool from "../tools/router";
- // ignore NavigationDuplicated. https://github.com/vuejs/vue-router/issues/2881
- // const originalPush = Router.prototype.push;
- // Router.prototype.push = function push(location, onResolve, onReject) {
- // if (onResolve || onReject)
- // return originalPush.call(this, location, onResolve, onReject);
- // try {
- // return originalPush.call(this, location).catch((err) => err);
- // } catch (error) {
- // console.log(error);
- // }
- // };
- // end ignore
- Vue.use(Router);
- /*
- history模式 nginx配置
- location / {
- try_files $uri $uri/ /index.html;
- }
- */
- const router = new Router({
- mode: "history",
- routes: [
- {
- path: "/",
- name: "Index",
- redirect: { name: "Login" },
- },
- {
- path: "/home/:nextRouter?",
- name: "Home",
- component: Home,
- children: [
- {
- path: "/home-page",
- name: "HomePage",
- component: HomePage,
- },
- ...base,
- ...exam,
- ...print,
- ...stmms,
- ...analysis,
- ...mark,
- ...course,
- ...target,
- ...statistics,
- ],
- },
- { ...login },
- { ...admin },
- ...card,
- ...tool,
- {
- path: "*",
- name: "NotFound",
- component: NotFound,
- meta: {
- noRequire: true,
- },
- },
- // [lazy-loaded] route level code-splitting
- // {
- // path: "/about",
- // name: "about",
- // // this generates a separate chunk (about.[hash].js) for this route
- // // which is lazy-loaded when the route is visited.
- // component: () =>
- // import(/* webpackChunkName: "about" */ "./views/About.vue")
- // }
- ],
- });
- function getRouteType(routeMatched) {
- const typeData = routeMatched.find(
- (item) => item.name === "Home" || item.name === "Admin"
- );
- return typeData ? typeData.name : null;
- }
- // route interceptor
- const whiteRoutes = ["CardRulePreview"];
- router.beforeEach(async (to, from, next) => {
- const token = Vue.ls.get("token");
- if (to.meta.noRequire) {
- next();
- return;
- }
- if (!token) {
- // 登录失效的处理
- const returnUrl = Vue.ls.get("returnUrl");
- if (returnUrl) {
- window.location.href = returnUrl;
- return;
- }
- Vue.ls.clear();
- const paramDomainCode = window.sessionStorage.getItem("paramDomainCode");
- const routeDomainCode = window.sessionStorage.getItem("routeDomainCode");
- if (paramDomainCode) {
- next({ name: "Login", query: { code: paramDomainCode } });
- } else if (routeDomainCode) {
- next({ name: "Login", params: { code: routeDomainCode } });
- } else {
- next({ name: "Login" });
- }
- return;
- }
- const fromType = getRouteType(from.matched);
- const toType = getRouteType(to.matched);
- // 只有超管才可访问Admin
- const isSuperAdmin =
- Vue.ls.get("user", { loginName: "" }).loginName === SYS_ADMIN_NAME;
- if (toType === "Admin" && !isSuperAdmin) {
- next({ name: "NotFound" });
- return;
- }
- if (!store.state.app.privileges.length || fromType !== toType) {
- if (toType === "Home") {
- await store.dispatch("app/updatePrivilegeMap", isSuperAdmin);
- } else if (toType === "Admin") {
- store.dispatch("app/updateAdminPrivilegeMap");
- } else {
- store.commit("app/initStore");
- }
- }
- // console.log(fromType, toType);
- // console.log(store.state.app.validRoutes);
- // console.log(to.name);
- if (
- !whiteRoutes.includes(to.name) &&
- !store.state.app.validRoutes.includes(to.name)
- ) {
- next({ name: "NotFound" });
- return;
- }
- const privilegeMap = store.state.app.privilegeMap;
- Vue.ls.set(
- "privilegeId",
- privilegeMap[to.name] ? privilegeMap[to.name][0] : ""
- );
- next();
- });
- export default router;
|