permission.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /**
  2. * 全站权限配置
  3. *
  4. */
  5. import router from './router/router'
  6. import store from '@/store'
  7. import {getStore} from '@/util/store'
  8. import {validatenull} from '@/util/validate'
  9. import NProgress from 'nprogress' // progress bar
  10. import 'nprogress/nprogress.css' // progress bar style
  11. NProgress.configure({showSpinner: false})
  12. const lockPage = store.getters.website.lockPage // 锁屏页
  13. router.beforeEach((to, from, next) => {
  14. // 缓冲设置
  15. if (to.meta.keepAlive === true && store.state.tags.tagList.some(ele => {
  16. return ele.value === to.fullPath
  17. })) {
  18. to.meta.$keepAlive = true
  19. } else {
  20. NProgress.start()
  21. if (to.meta.keepAlive === true && validatenull(to.meta.$keepAlive)) {
  22. to.meta.$keepAlive = true
  23. } else {
  24. to.meta.$keepAlive = false
  25. }
  26. }
  27. const meta = to.meta || {}
  28. if (store.getters.access_token) {
  29. if (store.getters.isLock && to.path != lockPage) {
  30. next({path: lockPage})
  31. } else if (to.path === '/login') {
  32. next({path: '/'})
  33. } else {
  34. if (store.getters.roles.length === 0) {
  35. store.dispatch('GetUserInfo').then(() => {
  36. next({...to, replace: true})
  37. }).catch(() => {
  38. store.dispatch('FedLogOut').then(() => {
  39. next({path: '/login'})
  40. })
  41. })
  42. } else {
  43. const value = to.query.src || to.fullPath
  44. const label = to.query.name || to.name
  45. if (meta.isTab !== false && !validatenull(value) && !validatenull(label)) {
  46. store.commit('ADD_TAG', {
  47. label: label,
  48. value: value,
  49. params: to.params,
  50. query: to.query,
  51. group: router.$avueRouter.group || []
  52. })
  53. }
  54. next()
  55. }
  56. }
  57. } else {
  58. if (meta.isAuth === false) {
  59. next()
  60. } else {
  61. next('/login')
  62. }
  63. }
  64. })
  65. router.afterEach(() => {
  66. NProgress.done()
  67. const title = store.getters.tag.label
  68. router.$avueRouter.setTitle(title)
  69. })