permission.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import router, { asyncRoutes } from '@/router';
  2. import settings from './settings';
  3. import { getToken, setToken } from '@/utils/auth';
  4. import NProgress from 'nprogress';
  5. NProgress.configure({ showSpinner: false });
  6. import 'nprogress/nprogress.css';
  7. import getPageTitle from '@/utils/getPageTitle';
  8. import { useUserStore } from '@/store/user';
  9. import { usePermissionStore } from '@/store/permission';
  10. const whiteList = ['/login', '/404', '/401'];
  11. router.beforeEach(async (to, from, next) => {
  12. if (settings.isNeedNprogress)
  13. NProgress.start();
  14. document.title = getPageTitle(to.meta.title);
  15. if (!settings.isNeedLogin)
  16. setToken(settings.tmpToken);
  17. const hasToken = getToken();
  18. const userStore = useUserStore();
  19. const permissionStore = usePermissionStore();
  20. if (hasToken) {
  21. if (to.path === '/login') {
  22. next({ path: '/' });
  23. }
  24. else {
  25. const isGetUserInfo = permissionStore.isGetUserInfo;
  26. if (isGetUserInfo) {
  27. next();
  28. }
  29. else {
  30. try {
  31. let accessRoutes = [];
  32. if (settings.isNeedLogin) {
  33. const { roles } = await userStore.getInfo();
  34. accessRoutes = await permissionStore.generateRoutes(roles);
  35. }
  36. else {
  37. accessRoutes = asyncRoutes;
  38. }
  39. permissionStore.M_routes(accessRoutes);
  40. accessRoutes.forEach((route) => {
  41. router.addRoute(route);
  42. });
  43. permissionStore.M_isGetUserInfo(true);
  44. next({ ...to, replace: true });
  45. }
  46. catch (err) {
  47. await userStore.resetState();
  48. next(`/login?redirect=${to.path}`);
  49. if (settings.isNeedNprogress)
  50. NProgress.done();
  51. }
  52. }
  53. }
  54. }
  55. else {
  56. if (whiteList.indexOf(to.path) !== -1) {
  57. next();
  58. }
  59. else {
  60. next(`/login?redirect=${to.path}`);
  61. if (settings.isNeedNprogress)
  62. NProgress.done();
  63. }
  64. }
  65. });
  66. router.afterEach(() => {
  67. if (settings.isNeedNprogress)
  68. NProgress.done();
  69. });
  70. //# sourceMappingURL=permission.js.map