39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
import { getToken, refreshAccessToken, isNullOrWhitespace } from '@/utils'
|
|
import { addDynamicRoutes } from '@/router'
|
|
|
|
const WHITE_LIST = ['/login', '/404']
|
|
export function createPermissionGuard(router) {
|
|
router.beforeEach(async (to) => {
|
|
const token = getToken()
|
|
|
|
/** 没有token的情况 */
|
|
if (isNullOrWhitespace(token)) {
|
|
if (WHITE_LIST.includes(to.path)) return true
|
|
return { path: 'login', query: { ...to.query, redirect: to.path } }
|
|
}
|
|
|
|
/** 单点登录的情况 */
|
|
if (to.query.tk) return true
|
|
|
|
/** 有token的情况 */
|
|
if (to.path === '/login') return { path: '/' }
|
|
|
|
// 确保动态路由已加载
|
|
if (token && !router.hasRoute('Dashboard')) {
|
|
try {
|
|
await addDynamicRoutes()
|
|
// 如果当前路径不存在,重定向到工作台
|
|
if (to.path !== '/' && !router.hasRoute(to.name)) {
|
|
return { path: '/workbench' }
|
|
}
|
|
} catch (error) {
|
|
console.error('动态路由加载失败:', error)
|
|
return { path: '/login' }
|
|
}
|
|
}
|
|
|
|
refreshAccessToken()
|
|
return true
|
|
})
|
|
}
|