mirror of
https://gitee.com/chu1204505056/vue-admin-beautiful.git
synced 2025-09-16 17:42:09 +08:00
85 lines
2.3 KiB
Vue
85 lines
2.3 KiB
Vue
/**
|
||
* @author https://vue-admin-beautiful.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 '@/config'
|
||
|
||
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')
|
||
}
|
||
accessRoutes.forEach((item) => {
|
||
router.addRoute(item)
|
||
})
|
||
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()
|
||
})
|