access.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import type { GeneratorMenuAndRoutesOptions } from '@vben/access';
  2. import type { ComponentRecordType } from '@vben/types';
  3. import { generateMenusAndRoutes } from '@vben/access';
  4. import { preferences } from '@vben-core/preferences';
  5. import { message } from 'ant-design-vue';
  6. import { getAllMenus } from '#/apis';
  7. import { BasicLayout, IFrameView } from '#/layouts';
  8. import { $t } from '#/locales';
  9. const forbiddenComponent = () =>
  10. import('#/views/_essential/fallback/forbidden.vue');
  11. async function generateAccess(options: GeneratorMenuAndRoutesOptions) {
  12. const pageMap: ComponentRecordType = import.meta.glob('../views/**/*.vue');
  13. const layoutMap: ComponentRecordType = {
  14. BasicLayout,
  15. IFrameView,
  16. };
  17. return await generateMenusAndRoutes(preferences.app.accessMode, {
  18. ...options,
  19. fetchMenuListAsync: async () => {
  20. message.loading({
  21. content: `${$t('common.loadingMenu')}...`,
  22. duration: 1.5,
  23. });
  24. return await getAllMenus();
  25. },
  26. // 可以指定没有权限跳转403页面
  27. forbiddenComponent,
  28. // 如果 route.meta.menuVisibleWithForbidden = true
  29. layoutMap,
  30. pageMap,
  31. });
  32. }
  33. export { generateAccess };