permission.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import Cookies from 'js-cookie'
  2. import router from './router'
  3. import store from './store'
  4. import Vue from 'vue'
  5. import {
  6. Message
  7. } from 'element-ui'
  8. import NProgress from 'nprogress'
  9. import 'nprogress/nprogress.css'
  10. import {
  11. cookGetToken,
  12. localSetToken,
  13. getToken,
  14. removeToken
  15. } from '@/utils/auth'
  16. import {
  17. wxAuth
  18. } from '@/utils/wx-auth-two.js';
  19. NProgress.configure({
  20. showSpinner: false
  21. })
  22. function hasPermission(roles, permissionRoles) {
  23. if (roles.indexOf('admin') >= 0) return true
  24. if (!permissionRoles) return true
  25. return roles.some(role => permissionRoles.indexOf(role) >= 0)
  26. }
  27. // 免登名单
  28. const whiteList = ['/invite_new_company', '/create_company', '/login', '/loginTransfer', '/noAccess', '/loginbytoken', '/reg', '/forgetPwd', '/resetPwd', '/android', '/demo', '/swiperShow', '/autoLogin'] // no redirect whitelist
  29. const stopPath = ['/login', '/noAccess']
  30. router.beforeEach((to, from, next) => {
  31. if (Vue.$httpRequestList.length > 0) { //强行中断时才向下执行
  32. Vue.$httpRequestList.forEach(item => {
  33. item('interrupt'); //给个标志,中断请求
  34. })
  35. }
  36. if(stopPath.indexOf(to.path) !== -1){
  37. next()
  38. }else{
  39. // NProgress.start()
  40. if(cookGetToken()){
  41. if(getToken() !== cookGetToken()){
  42. store.commit('SET_DELETE_USER', {})
  43. store.commit('SET_TOKEN', cookGetToken())
  44. localStorage.setItem('Admin-Token', cookGetToken())
  45. init(to, next)
  46. }else{
  47. init(to, next)
  48. }
  49. // localSetToken(cookGetToken())
  50. // Cookies.remove('Admin-Token')
  51. }else if (getToken()) {
  52. if (!store.state.user.token) store.commit("SET_TOKEN", getToken());
  53. init(to, next)
  54. } else {
  55. if (whiteList.indexOf(to.path) !== -1 || window.location.href.indexOf('loginbytoken/') !== -1) { // 在免登录白名单,直接进入
  56. next()
  57. } else {
  58. window.location.href = process.env.BASE_API//直接重新授权
  59. // next('/login') // 否则全部重定向到登录页
  60. // NProgress.done()
  61. }
  62. }
  63. }
  64. })
  65. function init(to, next) {
  66. store.dispatch('get_point_types').then((res) => {})
  67. store.dispatch('get_site_info').then((res) => {})
  68. store.dispatch('get_employee_map').then((res) => {}) // 取得员工列表的地图
  69. store.dispatch('get_dept_tree').then((res) => {}) // 获取部门树型结构列表
  70. if (to.path === '/login') {
  71. next({
  72. path: '/'
  73. })
  74. // NProgress.done()
  75. } else {
  76. if (!store.getters.user_info.id) { // 判断当前用户是否已拉取完user_info信息
  77. store.dispatch('GetUserInfo').then(res => { // 拉取user_info
  78. // 设置title
  79. document.title = ''
  80. const mo_list = []
  81. res.data['mo_list'] = []
  82. for (const i in mo_list) {
  83. res.data['mo_list'].push(mo_list[i].code)
  84. }
  85. const roles = ['admin']
  86. store.dispatch('GenerateRoutes', {
  87. roles
  88. }).then(() => {
  89. // 增加动态权限列表,在这里发送一个请求,得到路由
  90. const addRouters = []
  91. for (const item in store.getters.addRouters) {
  92. const obj = []
  93. for (const ritem in store.getters.addRouters[item].children) {
  94. if (res.data.mo_list.indexOf(store.getters.addRouters[item].children[ritem].name) >= 0 || store.getters.addRouters[item].children[ritem].hidden === true || store.getters.addRouters[item].children[ritem].common === true) {
  95. obj.push(store.getters.addRouters[item].children[ritem])
  96. }
  97. obj.push(store.getters.addRouters[item].children[ritem])
  98. }
  99. if (obj.length > 0) {
  100. const _R = store.getters.addRouters[item]
  101. _R['children'] = obj
  102. addRouters.push(_R)
  103. }
  104. }
  105. router.addRoutes(addRouters) // 动态添加可访问路由表
  106. next({
  107. ...to,
  108. replace: true
  109. }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
  110. })
  111. }).catch((err) => {
  112. console.log('GetUserInfo-------------err')
  113. if(getToken()){
  114. next('/login')
  115. }
  116. // console.log(err)
  117. // localStorage.clear()
  118. // sessionStorage.clear()
  119. // Cookies.remove('Admin-Token')
  120. // if(err.code == 4444){
  121. // router.push({
  122. // path: '/noAccess',
  123. // query: {
  124. // msg: err.msg
  125. // }
  126. // })
  127. // }
  128. // return
  129. // console.log(err)
  130. // 登出
  131. // store.dispatch('LogOut')
  132. })
  133. } else {
  134. // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
  135. if (hasPermission(store.getters.roles, to.meta.roles)) {
  136. // removeToken()
  137. wxAuth('', next);
  138. // next()
  139. // NProgress.start()
  140. } else {
  141. next({
  142. path: '/401',
  143. replace: true,
  144. query: {
  145. noGoBack: true
  146. }
  147. })
  148. // NProgress.start()
  149. }
  150. }
  151. }
  152. }
  153. router.afterEach((to, from) => {
  154. console.log(to)
  155. // NProgress.done() // finish progress bar
  156. })