user.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. import Vue from 'vue'
  2. import {
  3. getUserInfo,
  4. login,
  5. ssoLogin,
  6. logout,
  7. getDetailByAccountOrId,
  8. } from '@/api/user'
  9. import {
  10. getAccessToken,
  11. removeAccessToken,
  12. setAccessToken,
  13. } from '@/utils/accessToken'
  14. import { getUsername, removeUsername, setUsername } from '@/utils/username'
  15. import { resetRouter } from '@/router'
  16. import { title, tokenName } from '@/config'
  17. const state = () => ({
  18. accessToken: getAccessToken(),
  19. username: getUsername(),
  20. avatar: '',
  21. userId: '',
  22. account: '',
  23. userInfo: {},
  24. loginStatus: true,
  25. tenantId: '',
  26. tenantCode: '',
  27. nowTemplate: '',
  28. showCustomPage: false,
  29. templateLoading: false,
  30. calcRatio: undefined
  31. })
  32. const getters = {
  33. userId: (state) => state.userId,
  34. accessToken: (state) => state.accessToken,
  35. username: (state) => state.username,
  36. account: (state) => state.account,
  37. avatar: (state) => state.avatar,
  38. tenantId: (state) => state.tenantId,
  39. tenantCode: (state) => state.tenantCode,
  40. }
  41. const mutations = {
  42. setAccessToken(state, accessToken) {
  43. state.accessToken = accessToken
  44. setAccessToken(accessToken)
  45. },
  46. setUsername(state, username) {
  47. state.username = username
  48. setUsername(username)
  49. },
  50. setAvatar(state, avatar) {
  51. state.avatar = avatar
  52. },
  53. setUserId(state, data) {
  54. state.userId = data
  55. },
  56. setAccount(state, account) {
  57. state.account = account
  58. },
  59. setUserInfo(state, userInfo) {
  60. state.userInfo = userInfo
  61. },
  62. setLoginStatus(state, loginStatus) {
  63. state.loginStatus = loginStatus
  64. },
  65. setTenantId(state, tenantId) {
  66. state.tenantId = tenantId
  67. },
  68. setTenantCode(state, tenantCode) {
  69. state.tenantCode = tenantCode
  70. },
  71. }
  72. const actions = {
  73. // 账号密码登录
  74. async login({ commit, dispatch }, loginInfo) {
  75. const userInfo = await login(loginInfo)
  76. commit('setLoginStatus', userInfo.loginStatus)
  77. dispatch('authentication', userInfo)
  78. const hour = new Date().getHours()
  79. const thisTime =
  80. hour < 8
  81. ? '早上好'
  82. : hour <= 11
  83. ? '上午好'
  84. : hour <= 13
  85. ? '中午好'
  86. : hour < 18
  87. ? '下午好'
  88. : '晚上好'
  89. if (userInfo.loginStatus) {
  90. Vue.prototype.$baseNotify(`欢迎登录${title}`, `${thisTime}!`)
  91. }
  92. },
  93. //钉钉免登进入传参
  94. async getDingUserByCodeFun({ commit, dispatch }, user) {
  95. commit('setLoginStatus', user.loginStatus)
  96. dispatch('authentication', user)
  97. const hour = new Date().getHours()
  98. const thisTime =
  99. hour < 8
  100. ? '早上好'
  101. : hour <= 11
  102. ? '上午好'
  103. : hour <= 13
  104. ? '中午好'
  105. : hour < 18
  106. ? '下午好'
  107. : '晚上好'
  108. if (user.loginStatus) {
  109. Vue.prototype.$baseNotify(`欢迎登录${title}`, `${thisTime}!`)
  110. }
  111. },
  112. // 单点登录
  113. async ssoLogin({ dispatch }, loginInfo) {
  114. const userInfo = await ssoLogin(loginInfo)
  115. dispatch('authentication', userInfo)
  116. },
  117. // 鉴权
  118. async authentication({ commit }, userInfo) {
  119. const { username, userId } = userInfo
  120. if (username) {
  121. commit('setUsername', username)
  122. commit('setAccount', username)
  123. }
  124. if (userId) {
  125. commit('setUserId', userId)
  126. }
  127. const accessToken = userInfo[tokenName]
  128. if (accessToken) {
  129. commit('setAccessToken', accessToken)
  130. } else {
  131. Vue.prototype.$baseMessage(
  132. `登录接口异常,未正确返回${tokenName}...`,
  133. 'error'
  134. )
  135. }
  136. },
  137. async getUserInfo({ commit, dispatch }) {
  138. const info = await getUserInfo()
  139. if (!info) {
  140. Vue.prototype.$baseMessage('验证失败,请重新登录...', 'error')
  141. return false
  142. }
  143. let { id, fullname, username, photo, account, tenantId, tenantCode } = info
  144. dispatch('getUserDetail', account)
  145. if (fullname) {
  146. commit('setUserId', id)
  147. commit('setUsername', fullname)
  148. commit('setAvatar', photo)
  149. commit('setAccount', username)
  150. commit('setTenantId', tenantId)
  151. commit('setTenantCode', tenantCode)
  152. Vue.prototype.$baseUserAccount = username
  153. } else {
  154. Vue.prototype.$baseMessage('用户信息接口异常', 'error')
  155. return false
  156. }
  157. },
  158. getUserDetail({ commit }, account) {
  159. getDetailByAccountOrId(account).then((res) => {
  160. commit('setUserInfo', res)
  161. })
  162. },
  163. async logout({ dispatch }) {
  164. sessionStorage.removeItem('currentPostId')
  165. sessionStorage.removeItem('currentOrgId')
  166. await logout(state.accessToken)
  167. await dispatch('resetAccessToken')
  168. await resetRouter()
  169. },
  170. resetAccessToken({ commit }) {
  171. commit('setAccessToken', '')
  172. removeAccessToken()
  173. removeUsername()
  174. },
  175. saveTenatId({ commit }, tenantId) {
  176. commit('setTenantId', tenantId)
  177. },
  178. saveTenantCode({ commit }, tenantCode) {
  179. commit('setTenantCode', tenantCode)
  180. },
  181. }
  182. export default { state, getters, mutations, actions }