12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /**
- * @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 {
- 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()
- })
|