permission.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import router from '../router'
  2. import NProgress from 'nprogress'
  3. import 'nprogress/nprogress.css'
  4. import {
  5. getToken,
  6. getComment,
  7. removeToken
  8. } from '@/uitls/auth'
  9. import store from '../store';
  10. import {
  11. Message
  12. } from 'element-ui'
  13. NProgress.configure({
  14. showSpinner: false
  15. })
  16. const baseUrl = ['/', '/401', '/404', '/loginRegister/login', '/work', '/message', '/space/project',
  17. '/iot/device/detail','/work/system/main'
  18. ];
  19. const testBaseUrl = (path) => { //判断公共路由
  20. let nowBaseUrl = ['/loginRegister/login'].filter((item) => {
  21. return (item == path && item != '/')
  22. })
  23. return nowBaseUrl.length == 0;
  24. }
  25. /* 消息提示 */
  26. const tip = (msg, type) => {
  27. let types = type || 'warning';
  28. Message({
  29. message: msg,
  30. type: types,
  31. duration: 2000
  32. });
  33. }
  34. const testComment = (path) => { //判断权限路由
  35. let comment = getComment() ? JSON.parse(getComment()) : [];
  36. let nowComment = comment.concat(baseUrl).filter((item) => {
  37. return item == path
  38. })
  39. return nowComment.length == 0;
  40. }
  41. router.beforeEach((to, from, next) => {
  42. if (getToken() && !(store.getters && store.getters.user && store.getters.user.userId) && !sessionStorage
  43. .getItem('store')) removeToken();
  44. /* 判断是否登录 */
  45. if (!getToken() && testBaseUrl(to.path)) return next('/loginRegister/login');
  46. /* 判断路由是否存在 */
  47. if (to.matched.length === 0) return next('/404');
  48. /* 判断是否有权限 */
  49. if (testComment(to.path)) return next('/401');
  50. /* 无项目时跳转项目列表页面 */
  51. if (getToken() && localStorage.getItem('projectId') == 0 && to.path !== '/space/project') {
  52. tip('暂无项目,请先添加项目');
  53. return next('/space/project');
  54. }
  55. NProgress.start();
  56. next();
  57. });
  58. router.afterEach(() => {
  59. NProgress.done();
  60. });
  61. router.onError((error) => {
  62. NProgress.done();
  63. location.reload();
  64. });