paramMenuGuard.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. // debugger;
  10. router.beforeEach(async (to, _, next) => {
  11. // filter no name route
  12. if (!to.name) {
  13. next();
  14. return;
  15. }
  16. // menu has been built.
  17. if (!permissionStore.getIsDynamicAddedRoute) {
  18. next();
  19. return;
  20. }
  21. let menus: Menu[] = [];
  22. if (isBackMode()) {
  23. menus = permissionStore.getBackMenuList;
  24. } else if (isRouteMappingMode()) {
  25. menus = permissionStore.getFrontMenuList;
  26. }
  27. menus.forEach((item) => configureDynamicParamsMenu(item, to.params));
  28. next();
  29. });
  30. }
  31. const getPermissionMode = () => {
  32. const appStore = useAppStoreWithOut();
  33. return appStore.getProjectConfig.permissionMode;
  34. };
  35. const isBackMode = () => {
  36. return getPermissionMode() === PermissionModeEnum.BACK;
  37. };
  38. const isRouteMappingMode = () => {
  39. return getPermissionMode() === PermissionModeEnum.ROUTE_MAPPING;
  40. };