permission.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import router from "./router";
  2. import store from "./store";
  3. import NProgress from "nprogress"; // progress bar
  4. import "nprogress/nprogress.css"; // progress bar style
  5. import { getToken } from "@/utils/auth"; // get token from cookie
  6. import getPageTitle from "@/utils/get-page-title";
  7. NProgress.configure({ showSpinner: false }); // NProgress Configuration
  8. const whiteList = ["/login"]; // no redirect whitelist
  9. router.beforeEach(async (to, from, next) => {
  10. // start progress bar
  11. NProgress.start();
  12. // set page title
  13. document.title = getPageTitle(to.meta.title);
  14. // determine whether the user has logged in
  15. const hasToken = getToken();
  16. console.log(hasToken);
  17. if (!!hasToken && typeof hasToken == "string") {
  18. if (to.path === "/login") {
  19. // if is logged in, redirect to the home page
  20. next({ path: "/" });
  21. NProgress.done();
  22. } else {
  23. const hasRoles = store.getters.roles && store.getters.roles.length > 0;
  24. if (hasRoles) {
  25. next();
  26. } else {
  27. const roles = await store.dispatch("user/setroles");
  28. store.dispatch("GenerateRoutes", { roles }).then(() => {
  29. // 生成可访问的路由表
  30. router.options.routes = store.getters.addRouters;
  31. router.addRoutes(store.getters.addRouters); // 动态添加可访问路由表
  32. next({ ...to, replace: true }); // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
  33. });
  34. }
  35. // next()
  36. // const hasGetUserInfo = store.getters.name
  37. // if (hasGetUserInfo) {
  38. // next()
  39. // } else {
  40. // try {
  41. // // get user info
  42. // await store.dispatch('user/getInfo')
  43. // next()
  44. // } catch (error) {
  45. // // remove token and go to login page to re-login
  46. // await store.dispatch('user/resetToken')
  47. // Message.error(error || 'Has Error')
  48. // next(`/login?redirect=${to.path}`)
  49. // NProgress.done()
  50. // }
  51. // }
  52. }
  53. } else {
  54. /* has no token*/
  55. if (whiteList.indexOf(to.path) !== -1) {
  56. // in the free login whitelist, go directly
  57. next();
  58. } else {
  59. // other pages that do not have permission to access are redirected to the login page.
  60. next(`/login?redirect=${to.path}`);
  61. NProgress.done();
  62. }
  63. }
  64. });
  65. router.afterEach(() => {
  66. // finish progress bar
  67. NProgress.done();
  68. });