routerPermission.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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', '/ui', '/loginRegister/login', '/work', '/message', '/work/space/project',
  17. '/iot/device/detail', '/work/staging/project', '/work/operation/week/detail'
  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. if (to.path.indexOf('website') === -1) {
  45. /* 判断是否登录 */
  46. if (!getToken() && testBaseUrl(to.path)) return next('/loginRegister/login');
  47. /* 判断路由是否存在 */
  48. if (to.matched.length === 0) return next('/404');
  49. /* 判断是否有权限 */
  50. if (testComment(to.path)) return next('/401');
  51. /* 无项目时跳转项目列表页面 */
  52. if (getToken() && localStorage.getItem('projectId') == 0 && to.path !== '/work/space/project') {
  53. tip('暂无项目,请先添加项目');
  54. return next('/work/space/project');
  55. }
  56. }
  57. NProgress.start();
  58. next();
  59. });
  60. router.afterEach(() => {
  61. NProgress.done();
  62. });
  63. router.onError((error) => {
  64. NProgress.done();
  65. location.reload();
  66. });