user.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import { login, logout, getInfo, getMenu ,getImgCode,updateUserAvatarNickname } from '@/api/user'
  2. import { getToken, setToken, removeToken } from '@/utils/auth'
  3. import router, { resetRouter } from '@/router'
  4. const state = {
  5. token: getToken(),
  6. name: '',
  7. avatar: '',
  8. introduction: '',
  9. roles: [],
  10. userid:'',
  11. role_id:''
  12. }
  13. const mutations = {
  14. SET_TOKEN: (state, token) => {
  15. state.token = token
  16. },
  17. SET_INTRODUCTION: (state, introduction) => {
  18. state.introduction = introduction
  19. },
  20. SET_NAME: (state, name) => {
  21. state.name = name
  22. },
  23. SET_AVATAR: (state, avatar) => {
  24. state.avatar = avatar
  25. },
  26. SET_ROLE_ID: (state, role_id) => {
  27. state.role_id = role_id
  28. },
  29. SET_ROLES: (state, roles) => {
  30. state.roles = roles
  31. },
  32. SET_USERID: (state, id) => {
  33. state.userid = id
  34. },
  35. // 退出登录逻辑直接放在 mutations 中
  36. LOGOUT(state) {
  37. state.token = ''
  38. state.roles = []
  39. removeToken()
  40. resetRouter()
  41. }
  42. }
  43. const actions = {
  44. // 用户登录
  45. login({ commit }, userInfo) {
  46. const { username, password, type, captcha } = userInfo
  47. return new Promise((resolve, reject) => {
  48. login({ username: username.trim(), password: password, type: type, captcha: captcha.trim() }).then(response => {
  49. const { data } = response
  50. commit('SET_TOKEN', data.token)
  51. setToken(data.token,data.exp)
  52. resolve(response)
  53. }).catch(error => {
  54. reject(error)
  55. })
  56. })
  57. },
  58. // 获取用户身份信息
  59. getInfo({ commit, state }) {
  60. return new Promise((resolve, reject) => {
  61. getInfo(state.token).then(response => {
  62. const { data } = response
  63. // if (!data) {
  64. // reject('Verification failed, please Login again.')
  65. // }
  66. // 所有用户的身份都为admin
  67. const roles = ['admin']
  68. const { real_name, avatar, introduction,role_id } = data
  69. data.roles = roles
  70. // roles must be a non-empty array
  71. // 判断是否包含权限
  72. // if (!roles || roles.length <= 0) {
  73. // reject('getInfo: roles must be a non-null array!')
  74. // }
  75. commit('SET_ROLES', roles)
  76. commit('SET_USERID', data.id)
  77. commit('SET_NAME', real_name)
  78. commit('SET_AVATAR', avatar)
  79. commit('SET_INTRODUCTION', introduction)
  80. commit('SET_ROLE_ID', role_id)
  81. resolve(data)
  82. }).catch(error => {
  83. reject(error)
  84. })
  85. })
  86. },
  87. // 获取图形验证码
  88. getImgCode() {
  89. return new Promise((resolve, reject) => {
  90. getImgCode({}).then(response => {
  91. resolve(response)
  92. }).catch(error => {
  93. reject(error)
  94. })
  95. })
  96. },
  97. // 用户退出
  98. // logout({ commit, state, dispatch }) {
  99. // return new Promise((resolve, reject) => {
  100. // logout(state.token).then(() => {
  101. // commit('SET_TOKEN', '')
  102. // commit('SET_ROLES', [])
  103. // removeToken()
  104. // resetRouter()
  105. // // 重置已经访问过的视图
  106. // // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
  107. // dispatch('tagsView/delAllViews', null, { root: true })
  108. // resolve()
  109. // }).catch(error => {
  110. // reject(error)
  111. // })
  112. // })
  113. // },
  114. // 清理token
  115. resetToken({ commit }) {
  116. return new Promise(resolve => {
  117. commit('SET_TOKEN', '')
  118. commit('SET_ROLES', [])
  119. removeToken()
  120. resolve()
  121. })
  122. },
  123. // 用户切换时重置路由
  124. async changeRoles({ commit, dispatch }, role) {
  125. const token = role + '-token'
  126. commit('SET_TOKEN', token)
  127. setToken(token)
  128. const { roles } = await dispatch('getInfo')
  129. resetRouter()
  130. // generate accessible routes map based on roles
  131. const accessRoutes = await dispatch('permission/generateRoutes', roles, { root: true })
  132. // dynamically add accessible routes
  133. router.addRoutes(accessRoutes)
  134. // reset visited views and cached views
  135. dispatch('tagsView/delAllViews', null, { root: true })
  136. },
  137. //修改用户名和密码
  138. updateUserAvatarNickname({commit},data) {
  139. return new Promise((resolve, reject) => {
  140. updateUserAvatarNickname(data).then(response => {
  141. resolve(response)
  142. }).catch(error => {
  143. reject(error)
  144. })
  145. })
  146. },
  147. }
  148. export default {
  149. namespaced: true,
  150. state,
  151. mutations,
  152. actions
  153. }