permisstion.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. //路由鉴权:鉴权,项目当中路由能不能被的权限的设置(某一个路由什么条件下可以访问、什么条件下不可以访问)
  2. import router from "@/router";
  3. import setting from "@/setting";
  4. //@ts-ignore
  5. // import nprogress from 'nprogress'
  6. //引入进度条样式
  7. // import 'nprogress/nprogress.css'
  8. // nprogress.configure({ showSpinner: false })
  9. //获取用户相关的小仓库内部token数据,去判断用户是否登录成功
  10. import useUserStore from "@/store/modules/user";
  11. import pinia from "@/store";
  12. const userStore = useUserStore(pinia);
  13. //全局守卫:项目当中任意路由切换都会触发的钩子
  14. //全局前置守卫
  15. router.beforeEach(async (to: any, _from: any, next: any) => {
  16. document.title = `${setting.title} - ${to.meta.title}`;
  17. //to:你将要访问那个路由
  18. //from:你从来个路由而来
  19. //next:路由的放行函数
  20. // nprogress.start()
  21. //获取token,去判断用户登录、还是未登录
  22. const token = userStore.token;
  23. //获取用户名字
  24. // const username = userStore.username;
  25. //用户登录判断
  26. if (token) {
  27. //登录成功,访问login,不能访问,指向首页
  28. if (to.path == "/login") {
  29. next({ path: "/" });
  30. } else {
  31. //登录成功访问其余路由(登录排除)
  32. //有用户信息
  33. // if (username) {
  34. // //放行
  35. // next();
  36. // } else {
  37. // //如果没有用户信息,在守卫这里发请求获取到了用户信息再放行
  38. // try {
  39. // //获取用户信息
  40. // await userStore.userInfo();
  41. // //放行
  42. // //万一:刷新的时候是异步路由,有可能获取到用户信息、异步路由还没有加载完毕,出现空白的效果
  43. // next({ ...to });
  44. // } catch (error) {
  45. // //token过期:获取不到用户信息了
  46. // //用户手动修改本地存储token
  47. // //退出登录->用户相关的数据清空
  48. // await userStore.userLogout();
  49. // next({ path: "/login", query: { redirect: to.path } });
  50. // }
  51. // }
  52. next();
  53. }
  54. } else {
  55. //用户未登录判断
  56. if (to.path == "/login") {
  57. next();
  58. } else {
  59. next({ path: "/login", query: { redirect: to.path } });
  60. }
  61. }
  62. });
  63. //全局后置守卫
  64. router.afterEach((_to: any, _from: any) => {
  65. // nprogress.done()
  66. });
  67. //用户未登录:可以访问login,其余路由不能访问(指向login)
  68. //用户登录成功:不可以访问login[指向首页],其余的路由可以访问