1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import { useUserStore } from '/admin/stores/modules/user'
- import { getAuthToken, removeAuthToken, setPageTitle } from '/admin/support/helper'
- import progress from '/admin/support/progress'
- import { WhiteListPage } from '/admin/enum/app'
- import { Router, RouteRecordRaw } from 'vue-router'
- import { usePermissionsStore } from '/admin/stores/modules/user/permissions'
- import { Menu } from '/admin/types/Menu'
- import { toRaw } from 'vue'
- const guard = (router: Router) => {
-
- const whiteList: string[] = [WhiteListPage.LOGIN_PATH, WhiteListPage.NOT_FOUND_PATH]
- router.beforeEach(async (to, from, next) => {
-
- setPageTitle(to.meta.title as unknown as string)
-
- progress.start()
-
- const authToken = getAuthToken()
-
- if (authToken) {
-
- if (to.path === WhiteListPage.LOGIN_PATH) {
- next({ path: '/' })
- } else {
- const userStore = useUserStore()
-
- if (userStore.getId) {
- next()
- } else {
- try {
-
- await userStore.getUserInfo()
-
- if (userStore.getPermissions !== undefined) {
-
- const permissionStore = usePermissionsStore()
-
- const asyncRoutes = permissionStore.getAsyncMenusFrom(toRaw(userStore.getPermissions))
- asyncRoutes.forEach((route: Menu) => {
- router.addRoute(route as unknown as RouteRecordRaw)
- })
-
- router.addRoute({
- path: '/:pathMatch(.*)*',
- redirect: '/404',
- })
- }
- next({ ...to, replace: true })
- } catch (e) {
- removeAuthToken()
- next({ path: `${WhiteListPage.LOGIN_PATH}?redirect=/${to.path}` })
- }
- }
- }
- progress.done()
- } else {
-
- if (whiteList.indexOf(to.path) !== -1) {
- next()
- } else {
- next({ path: WhiteListPage.LOGIN_PATH })
- }
- progress.done()
- }
- })
- router.afterEach(() => {
- progress.done()
- })
- }
- export default guard
|