75 lines
2.1 KiB
TypeScript
75 lines
2.1 KiB
TypeScript
import { hasPermission, set_next_route } from '@/utils/permission/index'
|
|
import { getChildRouteList } from '@/router/common'
|
|
import NProgress from 'nprogress'
|
|
import { getPermissionRoute } from '@/router/common'
|
|
import {
|
|
createRouter,
|
|
createWebHistory,
|
|
type NavigationGuardNext,
|
|
type RouteLocationNormalized,
|
|
type RouteRecordName,
|
|
} from 'vue-router'
|
|
import useStore from '@/stores'
|
|
import { routes } from '@/router/routes'
|
|
NProgress.configure({ showSpinner: false, speed: 500, minimum: 0.3 })
|
|
const router = createRouter({
|
|
history: createWebHistory(window.MaxKB?.prefix ? window.MaxKB?.prefix : import.meta.env.BASE_URL),
|
|
routes: routes,
|
|
})
|
|
|
|
// 路由前置拦截器
|
|
router.beforeEach(
|
|
async (to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => {
|
|
NProgress.start()
|
|
if (to.name === '404') {
|
|
next()
|
|
return
|
|
}
|
|
const { user, login } = useStore()
|
|
|
|
const notAuthRouteNameList = ['login', 'ForgotPassword', 'ResetPassword', 'Chat', 'UserLogin']
|
|
if (!notAuthRouteNameList.includes(to.name ? to.name.toString() : '')) {
|
|
if (to.query && to.query.token) {
|
|
localStorage.setItem('token', to.query.token.toString())
|
|
}
|
|
const token = login.getToken()
|
|
if (!token) {
|
|
next({
|
|
path: '/login',
|
|
})
|
|
return
|
|
}
|
|
if (!user.userInfo) {
|
|
await user.profile()
|
|
}
|
|
}
|
|
set_next_route(to)
|
|
// 判断是否有菜单权限
|
|
if (to.meta.permission ? hasPermission(to.meta.permission as any, 'OR') : true) {
|
|
if(to.name=='noPermissionD'){
|
|
const n = getPermissionRoute(routes, to)
|
|
if(n.name=='noPermission'){
|
|
next()
|
|
return
|
|
}else{
|
|
next(n)
|
|
return
|
|
}
|
|
}else{
|
|
next()
|
|
}
|
|
} else {
|
|
const n = getPermissionRoute(routes, to)
|
|
next(n)
|
|
}
|
|
},
|
|
)
|
|
router.afterEach(() => {
|
|
NProgress.done()
|
|
})
|
|
export const getChildRouteListByPathAndName = (path: any, name?: RouteRecordName | any) => {
|
|
return getChildRouteList(routes, path, name)
|
|
}
|
|
|
|
export default router
|