| | |
| | | /** |
| | | * @author chuzhixin 1204505056@qq.com (不想保留author可删除) |
| | | * @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 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 '@/config' |
| | | } from "@/config"; |
| | | |
| | | VabProgress.configure({ |
| | | easing: 'ease', |
| | | 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 (progressBar) VabProgress.start(); |
| | | let hasToken = store.getters["user/accessToken"]; |
| | | |
| | | if (!loginInterception) hasToken = true |
| | | if (!loginInterception) hasToken = true; |
| | | |
| | | if (hasToken) { |
| | | if (to.path === '/login') { |
| | | next({ path: '/' }) |
| | | if (progressBar) VabProgress.done() |
| | | if (to.path === "/login") { |
| | | next({ path: "/" }); |
| | | if (progressBar) VabProgress.done(); |
| | | } else { |
| | | const hasPermissions = |
| | | store.getters['user/permissions'] && |
| | | store.getters['user/permissions'].length > 0 |
| | | store.getters["user/permissions"] && |
| | | store.getters["user/permissions"].length > 0; |
| | | if (hasPermissions) { |
| | | next() |
| | | next(); |
| | | } else { |
| | | try { |
| | | let permissions |
| | | let permissions; |
| | | if (!loginInterception) { |
| | | //settings.js loginInterception为false时,创建虚拟权限 |
| | | await store.dispatch('user/setPermissions', ['admin']) |
| | | permissions = ['admin'] |
| | | await store.dispatch("user/setPermissions", ["admin"]); |
| | | permissions = ["admin"]; |
| | | } else { |
| | | permissions = await store.dispatch('user/getUserInfo') |
| | | 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') |
| | | let accessRoutes = []; |
| | | if (authentication === "intelligence") { |
| | | accessRoutes = await store.dispatch( |
| | | "routes/setRoutes", |
| | | permissions |
| | | ); |
| | | } else if (authentication === "all") { |
| | | accessRoutes = await store.dispatch("routes/setAllRoutes"); |
| | | } |
| | | accessRoutes.forEach((item) => { |
| | | router.addRoute(item) |
| | | }) |
| | | next({ ...to, replace: true }) |
| | | router.addRoute(item); |
| | | }); |
| | | next({ ...to, replace: true }); |
| | | } catch { |
| | | await store.dispatch('user/resetAccessToken') |
| | | if (progressBar) VabProgress.done() |
| | | await store.dispatch("user/resetAccessToken"); |
| | | if (progressBar) VabProgress.done(); |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | if (routesWhiteList.indexOf(to.path) !== -1) { |
| | | next() |
| | | next(); |
| | | } else { |
| | | if (recordRoute) { |
| | | next(`/login?redirect=${to.path}`) |
| | | next(`/login?redirect=${to.path}`); |
| | | } else { |
| | | next('/login') |
| | | next("/login"); |
| | | } |
| | | |
| | | if (progressBar) VabProgress.done() |
| | | if (progressBar) VabProgress.done(); |
| | | } |
| | | } |
| | | document.title = getPageTitle(to.meta.title) |
| | | }) |
| | | document.title = getPageTitle(to.meta.title); |
| | | }); |
| | | router.afterEach(() => { |
| | | if (progressBar) VabProgress.done() |
| | | }) |
| | | if (progressBar) VabProgress.done(); |
| | | }); |