permission.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // import Vue from 'vue'
  2. import router from "./router";
  3. import request from '/src/helpers/request'
  4. import { ElMessage } from "element-plus";
  5. import { state } from "./state";
  6. // import NProgress from "nprogress"; // progress bar
  7. import "nprogress/nprogress.css"; // progress bar style
  8. import { getToken, removeToken } from "./utils/auth";
  9. // import getPageTitle from '@/utils/get-page-title'
  10. // NProgress.configure({ showSpinner: false }); // NProgress Configuration
  11. const whiteList = ["/login"]; // no redirect whitelist
  12. router.beforeEach(async (to, from, next) => {
  13. // from.query = to.query
  14. // start progress bar
  15. // NProgress.start();
  16. const hasToken = getToken();
  17. if (hasToken) {
  18. if (to.path === "/login") {
  19. // 如果有tonken直接跳转到首页
  20. next({ path: "/" });
  21. // NProgress.done();
  22. } else {
  23. const hasGetUserInfo = state.user?.speakerId;
  24. // 有名字 说明有用户信息 跳走
  25. if (hasGetUserInfo) {
  26. next();
  27. } else {
  28. try {
  29. // 异步获取用户信息
  30. const roomUid = sessionStorage.getItem('roomUid')
  31. const roomDetail = await request.get('/api-web/imLiveBroadcastRoom/queryRoom', {
  32. params: {
  33. roomUid: roomUid
  34. }
  35. })
  36. state.user = roomDetail.data
  37. next({ ...to, replace: true });
  38. } catch (error: any) {
  39. // remove token and go to login page to re-login
  40. // await store.dispatch("user/resetToken");
  41. if (error.msg) {
  42. ElMessage.error(error.msg);
  43. }
  44. removeToken();
  45. // ?redirect=${to.fullPath}
  46. next(`/login`);
  47. // NProgress.done();
  48. }
  49. }
  50. }
  51. } else {
  52. /* has no token*/
  53. if (whiteList.indexOf(to.path) !== -1) {
  54. // in the free login whitelist, go directly
  55. next();
  56. } else {
  57. // other pages that do not have permission to access are redirected to the login page.
  58. next(`/login?redirect=${to.fullPath}`);
  59. // NProgress.done();
  60. }
  61. }
  62. });
  63. router.afterEach(() => {
  64. // finish progress bar
  65. // NProgress.done();
  66. });