paramMenuGuard.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import type { Router } from 'vue-router';
  2. import { configureDynamicParamsMenu } from '../helper/menuHelper';
  3. import { Menu } from '../types';
  4. import { PermissionModeEnum } from '/@/enums/appEnum';
  5. import { useAppStoreWithOut } from '/@/store/modules/app';
  6. import { usePermissionStoreWithOut } from '/@/store/modules/permission';
  7. export function createParamMenuGuard(router: Router) {
  8. const permissionStore = usePermissionStoreWithOut();
  9. router.beforeEach(async (to, _, next) => {
  10. // filter no name route
  11. if (!to.name) {
  12. next();
  13. return;
  14. }
  15. // menu has been built.
  16. if (!permissionStore.getIsDynamicAddedRoute) {
  17. next();
  18. return;
  19. }
  20. let menus: Menu[] = [];
  21. if (isBackMode()) {
  22. menus = permissionStore.getBackMenuList;
  23. } else if (isRouteMappingMode()) {
  24. menus = permissionStore.getFrontMenuList;
  25. }
  26. menus.forEach((item) => configureDynamicParamsMenu(item, to.params));
  27. next();
  28. });
  29. }
  30. const getPermissionMode = () => {
  31. const appStore = useAppStoreWithOut();
  32. return appStore.getProjectConfig.permissionMode;
  33. };
  34. const isBackMode = () => {
  35. return getPermissionMode() === PermissionModeEnum.BACK;
  36. };
  37. const isRouteMappingMode = () => {
  38. return getPermissionMode() === PermissionModeEnum.ROUTE_MAPPING;
  39. };