|
|
import router from '@/router'
|
|
|
import store from '@/store'
|
|
|
import Progress from 'nprogress'
|
|
|
import 'nprogress/nprogress.css'
|
|
|
import getPageTitle from '@/utils/pageTitle'
|
|
|
import {
|
|
|
authentication,
|
|
|
loginInterception,
|
|
|
progressBar,
|
|
|
recordRoute,
|
|
|
routesWhiteList
|
|
|
} from '@/config'
|
|
|
|
|
|
Progress.configure({
|
|
|
easing: 'ease',
|
|
|
speed: 500,
|
|
|
trickleSpeed: 200,
|
|
|
showSpinner: false
|
|
|
})
|
|
|
router.beforeResolve(async(to, from, next) => {
|
|
|
if (progressBar) Progress.start()
|
|
|
let hasToken = store.getters['user/accessToken']
|
|
|
if (!loginInterception) hasToken = true
|
|
|
if (hasToken) {
|
|
|
if (to.path === '/login') {
|
|
|
next({ path: '/' })
|
|
|
if (progressBar) Progress.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')
|
|
|
if (!permissions) {
|
|
|
await store.dispatch('user/resetAccessToken')
|
|
|
if (progressBar) Progress.done()
|
|
|
}
|
|
|
}
|
|
|
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 })
|
|
|
} catch {
|
|
|
await store.dispatch('user/resetAccessToken')
|
|
|
if (progressBar) Progress.done()
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} else { // 没有登录
|
|
|
// 先判断是否是白名单
|
|
|
if (routesWhiteList.indexOf(to.path) !== -1) {
|
|
|
next()
|
|
|
} else {
|
|
|
// 重定向到登录页
|
|
|
if (recordRoute) {
|
|
|
next(`/login?redirect=${to.path}`)
|
|
|
} else {
|
|
|
next('/login')
|
|
|
}
|
|
|
|
|
|
if (progressBar) Progress.done()
|
|
|
}
|
|
|
}
|
|
|
// 获取跳转页面名称
|
|
|
document.title = getPageTitle(to.meta.title)
|
|
|
})
|
|
|
router.afterEach(() => {
|
|
|
if (progressBar) Progress.done()
|
|
|
})
|