user.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /**
  2. * @author chuzhixin 1204505056@qq.com
  3. * @description 登录、获取用户信息、退出登录、清除accessToken逻辑,不建议修改
  4. */
  5. import { getUserInfo, login, logout } from '@/api/user'
  6. import {
  7. getAccessToken,
  8. removeAccessToken,
  9. setAccessToken,
  10. } from '@/utils/accessToken'
  11. import { title, tokenName } from '@/config'
  12. import { message, notification } from 'ant-design-vue'
  13. const state = () => ({
  14. accessToken: getAccessToken(),
  15. username: '',
  16. avatar: '',
  17. })
  18. const getters = {
  19. accessToken: (state) => state.accessToken,
  20. username: (state) => state.username,
  21. avatar: (state) => state.avatar,
  22. }
  23. const mutations = {
  24. /**
  25. * @author chuzhixin 1204505056@qq.com
  26. * @description 设置accessToken
  27. * @param {*} state
  28. * @param {*} accessToken
  29. */
  30. setAccessToken(state, accessToken) {
  31. state.accessToken = accessToken
  32. setAccessToken(accessToken)
  33. },
  34. /**
  35. * @author chuzhixin 1204505056@qq.com
  36. * @description 设置用户名
  37. * @param {*} state
  38. * @param {*} username
  39. */
  40. setUsername(state, username) {
  41. state.username = username
  42. },
  43. /**
  44. * @author chuzhixin 1204505056@qq.com
  45. * @description 设置头像
  46. * @param {*} state
  47. * @param {*} avatar
  48. */
  49. setAvatar(state, avatar) {
  50. state.avatar = avatar
  51. },
  52. }
  53. const actions = {
  54. /**
  55. * @author chuzhixin 1204505056@qq.com
  56. * @description 登录拦截放行时,设置虚拟角色
  57. * @param {*} { commit, dispatch }
  58. */
  59. setVirtualRoles({ commit, dispatch }) {
  60. dispatch('acl/setFull', true, { root: true })
  61. commit('setAvatar', 'https://i.gtimg.cn/club/item/face/img/2/15922_100.gif')
  62. commit('setUsername', 'admin(未开启登录拦截)')
  63. },
  64. /**
  65. * @author chuzhixin 1204505056@qq.com
  66. * @description 登录
  67. * @param {*} { commit }
  68. * @param {*} userInfo
  69. */
  70. async login({ commit }, userInfo) {
  71. const { data } = await login(userInfo)
  72. const accessToken = data
  73. if (accessToken) {
  74. commit('setAccessToken', accessToken)
  75. const hour = new Date().getHours()
  76. const thisTime =
  77. hour < 8
  78. ? '早上好'
  79. : hour <= 11
  80. ? '上午好'
  81. : hour <= 13
  82. ? '中午好'
  83. : hour < 18
  84. ? '下午好'
  85. : '晚上好'
  86. title
  87. notification.open({
  88. // message: `欢迎登录${title}`,
  89. message: `登录成功`,
  90. description: `${thisTime}!`,
  91. })
  92. } else {
  93. message.error(`登录接口异常,未正确返回${tokenName}...`)
  94. }
  95. },
  96. /**
  97. * @author chuzhixin 1204505056@qq.com
  98. * @description 获取用户信息接口 这个接口非常非常重要,如果没有明确底层前逻辑禁止修改此方法,错误的修改可能造成整个框架无法正常使用
  99. * @param {*} { commit, dispatch, state }
  100. * @returns
  101. */
  102. async getUserInfo({ commit, dispatch, state }) {
  103. const { data } = await getUserInfo(state.accessToken)
  104. if (!data) {
  105. message.error(`验证失败,请重新登录...`)
  106. return false
  107. }
  108. // let { username, avatar, roles, ability } = data
  109. let { permissions, roles, user, ability } = data
  110. permissions
  111. let { avatar , userName} = user
  112. if (userName && roles && Array.isArray(roles)) {
  113. dispatch('acl/setRole', roles, { root: true })
  114. if (ability && ability.length > 0)
  115. dispatch('acl/setAbility', ability, { root: true })
  116. commit('setUsername', userName)
  117. commit('setAvatar', avatar)
  118. } else {
  119. message.error('用户信息接口异常')
  120. }
  121. },
  122. /**
  123. * @author chuzhixin 1204505056@qq.com
  124. * @description 退出登录
  125. * @param {*} { dispatch }
  126. */
  127. async logout({ dispatch }) {
  128. await logout(state.accessToken)
  129. await dispatch('resetAll')
  130. },
  131. /**
  132. * @author chuzhixin 1204505056@qq.com
  133. * @description 重置accessToken、roles、ability、router等
  134. * @param {*} { commit, dispatch }
  135. */
  136. async resetAll({ dispatch }) {
  137. await dispatch('setAccessToken', '')
  138. await dispatch('acl/setFull', false, { root: true })
  139. await dispatch('acl/setRole', [], { root: true })
  140. await dispatch('acl/setAbility', [], { root: true })
  141. removeAccessToken()
  142. },
  143. /**
  144. * @author chuzhixin 1204505056@qq.com
  145. * @description 设置token
  146. */
  147. setAccessToken({ commit }, accessToken) {
  148. commit('setAccessToken', accessToken)
  149. },
  150. }
  151. export default { state, getters, mutations, actions }