66 lines
2.3 KiB
JavaScript
66 lines
2.3 KiB
JavaScript
![]() |
import router from './router'
|
||
|
import { getToken } from '@/utils/auth' // get token from cookie
|
||
|
import { useUserStore } from '@/stores/modules/user.js'
|
||
|
import { usePermissionStore } from '@/stores/modules/permission.js'
|
||
|
|
||
|
const whiteList = ['/login', '/register', '/forget-password', '/reset-password'] // no redirect whitelist
|
||
|
router.beforeEach(async (to, from, next) => {
|
||
|
const userStore = useUserStore()
|
||
|
const permissionStore = usePermissionStore()
|
||
|
const hasToken = getToken()
|
||
|
if (hasToken) {
|
||
|
if (to.path === '/login') {
|
||
|
next({ path: '/' })
|
||
|
} else {
|
||
|
const hasRoles = userStore.roles && userStore.roles.length > 0
|
||
|
if (hasRoles && router.options.isAddDynamicMenuRoutes) {
|
||
|
if (userStore.isPassShop) {
|
||
|
if ((from.path === '/multishop/shop-process' || from.path === '/' || from.path === '/dashboard') && to.path === '/multishop/shop-process') {
|
||
|
next('/dashboard')
|
||
|
} else if (to.path === '/multishop/shop-process') {
|
||
|
next('/401')
|
||
|
}
|
||
|
} else {
|
||
|
if (to.path !== '/multishop/shop-process' && to.path !== '/401' && to.path !== '/404') {
|
||
|
next('/multishop/shop-process')
|
||
|
}
|
||
|
}
|
||
|
next()
|
||
|
} else {
|
||
|
try {
|
||
|
// 获取用户信息
|
||
|
const userInfo = await userStore.getUserInfo()
|
||
|
// 获取权限信息
|
||
|
await userStore.listPermissions()
|
||
|
let menuIds = []
|
||
|
if (!userInfo.isAdmin) {
|
||
|
// 获取菜单信息
|
||
|
menuIds = await userStore.listMenuIds()
|
||
|
}
|
||
|
const accessRoutes = await permissionStore.generateRoutes(menuIds)
|
||
|
accessRoutes.forEach(route => {
|
||
|
if (route.path[0] !== '/') {
|
||
|
route.path = `/${route.path}`
|
||
|
}
|
||
|
router.addRoute(route)
|
||
|
})
|
||
|
// eslint-disable-next-line require-atomic-updates
|
||
|
router.addRoute({ path: '/:pathMatch(.*)*', redirect: { path: '/404' } })
|
||
|
router.options.isAddDynamicMenuRoutes = true
|
||
|
next({ ...to, replace: true })
|
||
|
} catch (error) {
|
||
|
// eslint-disable-next-line no-console
|
||
|
await userStore.resetToken()
|
||
|
next(`/login?redirect=${to.path}`)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
if (whiteList.indexOf(to.path) !== -1) {
|
||
|
next()
|
||
|
} else {
|
||
|
next(`/login?redirect=${to.path}`)
|
||
|
}
|
||
|
}
|
||
|
})
|