permission.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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 Cookies from 'js-cookie'
  7. import { getToken } from '@/utils/auth'
  8. NProgress.configure({ showSpinner: false }) // NProgress Configuration
  9. const whiteList = ['/login', '/resetpassword', '/help', '/echarts', '/login2'] // no redirect whitelist
  10. // eslint-disable-next-line prettier/prettier
  11. router.beforeEach(async(to, from, next) => {
  12. // start progress bar
  13. NProgress.start()
  14. // set page title
  15. // determine whether the user has logged in
  16. // const hasToken = getToken()
  17. const hasToken = store.getters.id || getToken()
  18. let isWeChat = Cookies.get('isWeChat')
  19. if (to.query.courseid !== '' && to.query.courseid !== undefined) {
  20. console.log(to.query.courseid)
  21. isWeChat = '1'
  22. await store.commit('SET_COURSEID', to.query.courseid)
  23. }
  24. if (to.query.testid !== '' && to.query.testid !== undefined) {
  25. isWeChat = '1'
  26. await store.commit('SET_TESTID', to.query.testid)
  27. }
  28. const shareCourseId =
  29. window.location.href.indexOf('?shareCourseId=') !== -1
  30. ? window.location.href.split('?shareCourseId=')[1].toString()
  31. : ''
  32. if (shareCourseId) {
  33. isWeChat = '1'
  34. await store.commit('SET_SHARECOURSEID', shareCourseId)
  35. }
  36. if (hasToken) {
  37. if (to.path === '/login' || to.path === '/login2') {
  38. // if is logged in, redirect to the home page
  39. store.commit('user/SET_ID', hasToken)
  40. if (isWeChat === '1') {
  41. const courseId = store.getters.courseId
  42. const testId = store.getters.testId
  43. const shareCourseId = store.getters.shareCourseId
  44. await store.commit('SET_TESTID', '')
  45. await store.commit('SET_COURSEID', '')
  46. await store.commit('SET_SHARECOURSEID', '')
  47. if (courseId) {
  48. next({
  49. path: '/courseDetail',
  50. query: { courseid: courseId, userid: hasToken },
  51. replace: true
  52. })
  53. } else if (testId) {
  54. next({ path: '/testDetail', query: { courseid: testId, userid: hasToken }, replace: true })
  55. } else if (shareCourseId) {
  56. next({
  57. path: '/courseDetail',
  58. query: { courseid: shareCourseId, urlType: 1, userid: hasToken },
  59. replace: true
  60. })
  61. } else {
  62. next({ path: '/' })
  63. }
  64. } else {
  65. next('/appStoreCopy')
  66. }
  67. NProgress.done()
  68. } else {
  69. const userinfo = store.getters.userinfo && Object.keys(store.getters.userinfo).length > 0
  70. console.log('store.getters', store.getters)
  71. console.log('userinfo', userinfo)
  72. // console.log('to', {...to} )
  73. if (userinfo) {
  74. next()
  75. } else {
  76. try {
  77. // 获取用户信息
  78. const data = await store.dispatch('user/getInfo')
  79. await store.commit('user/SET_USERINFO', data)
  80. const courseId = store.getters.courseId
  81. const testId = store.getters.testId
  82. const shareCourseId = store.getters.shareCourseId
  83. await store.commit('SET_TESTID', '')
  84. await store.commit('SET_COURSEID', '')
  85. await store.commit('SET_SHARECOURSEID', '')
  86. // // 根据角色生成可访问的路线图
  87. if (courseId) {
  88. next({ ...to, query: { courseid: courseId, userid: hasToken }, replace: true })
  89. } else if (testId) {
  90. next({ ...to, query: { courseid: testId, userid: hasToken }, replace: true })
  91. } else if (shareCourseId) {
  92. next({
  93. path: '/courseDetail',
  94. query: { courseid: shareCourseId, urlType: 1, userid: hasToken },
  95. replace: true
  96. })
  97. } else {
  98. next({ ...to, replace: true })
  99. }
  100. } catch (error) {
  101. // remove token and go to login page to re-login
  102. // await store.dispatch('user/resetToken')
  103. // Notify({ type: 'danger', message: error || '发生异常' })
  104. next(`/login?redirect=${to.path}`)
  105. NProgress.done()
  106. }
  107. }
  108. }
  109. } else {
  110. // next()
  111. /* has no token*/
  112. if (whiteList.indexOf(to.path) !== -1) {
  113. // in the free login whitelist, go directly
  114. next()
  115. } else {
  116. const courseId = store.getters.courseId
  117. const testId = store.getters.testId
  118. const shareCourseId = store.getters.shareCourseId
  119. // 检查是否是微信授权回调
  120. if (courseId || testId || shareCourseId) {
  121. next(`/login2?redirect=${to.path}`)
  122. NProgress.done()
  123. } else if (window.location.href.indexOf('login') !== -1 && window.location.href.indexOf('login2') === -1) {
  124. // 微信授权回调,允许访问
  125. next('/login')
  126. NProgress.done()
  127. } else {
  128. // // other pages that do not have permission to access are redirected to the login page.
  129. next(`/login2?redirect=${to.path}`)
  130. NProgress.done()
  131. }
  132. }
  133. }
  134. })
  135. router.afterEach(() => {
  136. // finish progress bar
  137. NProgress.done()
  138. })