12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /**
- * @copyright chuzhixin 1204505056@qq.com
- * @description 路由守卫,目前两种模式:all模式与intelligence模式
- */
- import router from "@/router";
- import store from "@/store";
- import VabProgress from "nprogress";
- import "nprogress/nprogress.css";
- import getPageTitle from "@/utils/pageTitle";
- import {
- authentication,
- loginInterception,
- progressBar,
- recordRoute,
- routesWhiteList,
- } from "./settings";
- VabProgress.configure({
- easing: "ease",
- speed: 500,
- trickleSpeed: 200,
- showSpinner: false,
- });
- router.beforeResolve(async (to, from, next) => {
- if (progressBar) VabProgress.start();
- let hasToken = store.getters["user/accessToken"];
- if (!loginInterception) hasToken = true;
- if (hasToken) {
- if (to.path === "/login") {
- next({ path: "/" });
- if (progressBar) VabProgress.done();
- } else {
- const hasPermissions =
- store.getters["user/permissions"] &&
- store.getters["user/permissions"].length > 0;
- if (hasPermissions) {
- next();
- } else {
- try {
- let permissions;
- if (!loginInterception) {
- //settings.js loginInterception为false时,创建虚拟权限
- await store.dispatch("user/setPermissions", ["admin"]);
- permissions = ["admin"];
- } else {
- permissions = await store.dispatch("user/getUserInfo");
- }
- let accessRoutes = [];
- if (authentication === "intelligence") {
- accessRoutes = await store.dispatch(
- "routes/setRoutes",
- permissions
- );
- } else if (authentication === "all") {
- accessRoutes = await store.dispatch("routes/setAllRoutes");
- }
- router.addRoutes(accessRoutes);
- next({ ...to, replace: true });
- } catch {
- await store.dispatch("user/resetAccessToken");
- if (progressBar) VabProgress.done();
- }
- }
- }
- } else {
- if (routesWhiteList.indexOf(to.path) !== -1) {
- next();
- } else {
- if (recordRoute) {
- next(`/login?redirect=${to.path}`);
- } else {
- next("/login");
- }
- if (progressBar) VabProgress.done();
- }
- }
- document.title = getPageTitle(to.meta.title);
- });
- router.afterEach(() => {
- if (progressBar) VabProgress.done();
- });
|