access.ts 1.2 KB

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