You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.2 KiB

2 years ago
import type { Router } from 'vue-router'
import { configureDynamicParamsMenu } from '../helper/menuHelper'
import type { Menu } from '../types'
2 years ago
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()
2 years ago
router.beforeEach((to, _, next) => {
2 years ago
// filter no name route
if (!to.name) {
next()
return
}
// menu has been built.
if (!permissionStore.getIsDynamicAddedRoute) {
next()
return
}
let menus: Menu[] = []
if (isBackMode())
2 years ago
menus = permissionStore.getBackMenuList
else if (isRouteMappingMode())
2 years ago
menus = permissionStore.getFrontMenuList
menus.forEach(item => configureDynamicParamsMenu(item, to.params))
2 years ago
next()
})
}
function getPermissionMode() {
2 years ago
const appStore = useAppStoreWithOut()
return appStore.getProjectConfig.permissionMode
}
function isBackMode() {
2 years ago
return getPermissionMode() === PermissionModeEnum.BACK
}
function isRouteMappingMode() {
2 years ago
return getPermissionMode() === PermissionModeEnum.ROUTE_MAPPING
}