1
0
mirror of https://github.com/fumiama/paper-manager.git synced 2026-06-20 18:30:28 +08:00
Files
paper-manager/frontend/vben/src/router/guard/paramMenuGuard.ts
2023-03-10 17:18:32 +08:00

48 lines
1.2 KiB
TypeScript

import type { Router } from 'vue-router'
import { configureDynamicParamsMenu } from '../helper/menuHelper'
import { Menu } from '../types'
import { PermissionModeEnum } from '/@/enums/appEnum'
import { useAppStoreWithOut } from '/@/store/modules/app'
import { usePermissionStoreWithOut } from '/@/store/modules/permission'
export function createParamMenuGuard(router: Router) {
const permissionStore = usePermissionStoreWithOut()
router.beforeEach(async (to, _, next) => {
// filter no name route
if (!to.name) {
next()
return
}
// menu has been built.
if (!permissionStore.getIsDynamicAddedRoute) {
next()
return
}
let menus: Menu[] = []
if (isBackMode()) {
menus = permissionStore.getBackMenuList
} else if (isRouteMappingMode()) {
menus = permissionStore.getFrontMenuList
}
menus.forEach((item) => configureDynamicParamsMenu(item, to.params))
next()
})
}
const getPermissionMode = () => {
const appStore = useAppStoreWithOut()
return appStore.getProjectConfig.permissionMode
}
const isBackMode = () => {
return getPermissionMode() === PermissionModeEnum.BACK
}
const isRouteMappingMode = () => {
return getPermissionMode() === PermissionModeEnum.ROUTE_MAPPING
}