user.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import { login, logout, getInfo, isLoginVerify, getUserInfo } from '@/api/user'
  2. import { getToken, setToken, removeToken } from '@/utils/auth'
  3. import router, { resetRouter } from '@/router'
  4. import { updateLoginAllInfo, clear, accessToken } from '@/utils/localUserInfo'
  5. const state = {
  6. token: getToken(),
  7. name: '',
  8. avatar: '',
  9. introduction: '',
  10. roles: []
  11. }
  12. const mutations = {
  13. SET_TOKEN: (state, token) => {
  14. state.token = token
  15. },
  16. SET_INTRODUCTION: (state, introduction) => {
  17. state.introduction = introduction
  18. },
  19. SET_NAME: (state, name) => {
  20. state.name = name
  21. },
  22. SET_AVATAR: (state, avatar) => {
  23. state.avatar = avatar
  24. },
  25. SET_ROLES: (state, roles) => {
  26. state.roles = roles
  27. }
  28. }
  29. const actions = {
  30. // 登录
  31. login({ commit }, userInfo) {
  32. let requestData = {}
  33. let pageId = ''
  34. if (userInfo.isLoginVerify) {
  35. requestData = userInfo
  36. pageId = userInfo.pageId
  37. } else {
  38. requestData = {
  39. userName: userInfo.userName,
  40. password: userInfo.password
  41. }
  42. }
  43. return new Promise((resolve, reject) => {
  44. login(requestData, pageId).then(response => {
  45. // 更新本地accessToken
  46. updateLoginAllInfo(response.data)
  47. commit('SET_TOKEN', response.data.accessToken)
  48. setToken(response.data.accessToken)
  49. resolve()
  50. }).catch(error => {
  51. clear()
  52. reject(error)
  53. })
  54. })
  55. },
  56. isLoginVerify( { commit }, data ) {
  57. return new Promise((resolve, reject) => {
  58. isLoginVerify({userName: data.userName}).then(response => {
  59. resolve(response.data)
  60. }).catch(error => {
  61. reject(error)
  62. })
  63. })
  64. },
  65. getUserInfo({ commit }, data) {
  66. return new Promise((resolve, reject) => {
  67. getUserInfo(data).then(response => {
  68. console.log(response)
  69. resolve(response)
  70. }).catch(error => {
  71. reject(error)
  72. })
  73. })
  74. },
  75. // get user info
  76. getInfo({ commit, state }) {
  77. return new Promise((resolve, reject) => {
  78. getInfo(state.token).then(response => {
  79. const { data } = response
  80. if (!data) {
  81. reject('Verification failed, please Login again.')
  82. }
  83. const { roles, name, avatar, introduction } = data
  84. // roles must be a non-empty array
  85. if (!roles || roles.length <= 0) {
  86. reject('getInfo: roles must be a non-null array!')
  87. }
  88. commit('SET_ROLES', roles)
  89. commit('SET_NAME', name)
  90. commit('SET_AVATAR', avatar)
  91. commit('SET_INTRODUCTION', introduction)
  92. resolve(data)
  93. }).catch(error => {
  94. reject(error)
  95. })
  96. })
  97. },
  98. // user logout
  99. logout({ commit, state, dispatch }) {
  100. return new Promise((resolve, reject) => {
  101. logout(state.token).then(() => {
  102. commit('SET_TOKEN', '')
  103. commit('SET_ROLES', [])
  104. removeToken()
  105. resetRouter()
  106. // reset visited views and cached views
  107. // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
  108. dispatch('tagsView/delAllViews', null, { root: true })
  109. resolve()
  110. }).catch(error => {
  111. reject(error)
  112. })
  113. })
  114. },
  115. // remove token
  116. resetToken({ commit }) {
  117. return new Promise(resolve => {
  118. commit('SET_TOKEN', '')
  119. commit('SET_ROLES', [])
  120. removeToken()
  121. resolve()
  122. })
  123. },
  124. // dynamically modify permissions
  125. async changeRoles({ commit, dispatch }, role) {
  126. const token = role + '-token'
  127. commit('SET_TOKEN', token)
  128. setToken(token)
  129. const { roles } = await dispatch('getInfo')
  130. resetRouter()
  131. // generate accessible routes map based on roles
  132. const accessRoutes = await dispatch('permission/generateRoutes', roles, { root: true })
  133. // dynamically add accessible routes
  134. router.addRoutes(accessRoutes)
  135. // reset visited views and cached views
  136. dispatch('tagsView/delAllViews', null, { root: true })
  137. }
  138. }
  139. export default {
  140. namespaced: true,
  141. state,
  142. mutations,
  143. actions
  144. }