user.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import { defineStore } from 'pinia'
  2. import { store } from '@/store'
  3. import { ACCESS_TOKEN, CURRENT_USER, IM_TOKEN } from '@/store/mutation-types'
  4. import { ResultEnum } from '@/enums/httpEnum'
  5. import { getUserInfo, login, api_logout } from '@/api/system/user'
  6. import { storage } from '@/utils/storage'
  7. export interface IUserState {
  8. token: string
  9. imToken: string
  10. username: string
  11. welcome: string
  12. avatar: string
  13. permissions: any[]
  14. info: any
  15. }
  16. export const useUserStore = defineStore({
  17. id: 'app-user',
  18. state: (): IUserState => ({
  19. token: storage.get(ACCESS_TOKEN, ''),
  20. imToken: storage.get(IM_TOKEN, ''),
  21. username: '',
  22. welcome: '',
  23. avatar: '',
  24. permissions: [],
  25. info: storage.get(CURRENT_USER, {})
  26. }),
  27. getters: {
  28. getToken(): string {
  29. return this.token
  30. },
  31. getImToken(): string {
  32. return this.imToken
  33. },
  34. getAvatar(): string {
  35. return this.avatar
  36. },
  37. getNickname(): string {
  38. return this.username
  39. },
  40. getPermissions(): [any][] {
  41. return this.permissions
  42. },
  43. getUserInfo(): object {
  44. return this.info
  45. }
  46. },
  47. actions: {
  48. setToken(token: string) {
  49. this.token = token
  50. },
  51. setImToken(token: string) {
  52. this.imToken = token
  53. },
  54. setAvatar(avatar: string) {
  55. this.avatar = avatar
  56. },
  57. setPermissions(permissions: any) {
  58. this.permissions = permissions
  59. },
  60. setUserInfo(info: any) {
  61. this.info = info
  62. },
  63. // 登录
  64. async login(userInfo: any) {
  65. try {
  66. const response = (await login(userInfo)) as any
  67. const { data, code } = response
  68. if (code === ResultEnum.SUCCESS) {
  69. const ex = 7 * 24 * 60 * 60 * 1000
  70. storage.set(ACCESS_TOKEN, data.token_type + ' ' + data.access_token, ex)
  71. storage.set(CURRENT_USER, data, ex)
  72. this.setToken(data.token_type + ' ' + data.access_token)
  73. this.setImToken(data.imToken)
  74. this.setUserInfo(data)
  75. }
  76. return Promise.resolve(response)
  77. } catch (e) {
  78. return Promise.reject(e)
  79. }
  80. },
  81. // 获取用户信息
  82. GetInfo() {
  83. const that = this
  84. return new Promise((resolve, reject) => {
  85. getUserInfo()
  86. .then((res) => {
  87. const result = res.data
  88. that.setUserInfo(result)
  89. that.setAvatar(result.account.avatar)
  90. resolve(res)
  91. })
  92. .catch((error) => {
  93. reject(error)
  94. })
  95. })
  96. },
  97. // 登出
  98. async logout() {
  99. // try {
  100. // const response = (await login(userInfo)) as any
  101. // const { data, code } = response
  102. // if (code === ResultEnum.SUCCESS) {
  103. // const ex = 7 * 24 * 60 * 60 * 1000
  104. // storage.set(ACCESS_TOKEN, data.token_type + ' ' + data.access_token, ex)
  105. // storage.set(CURRENT_USER, data, ex)
  106. // this.setToken(data.token_type + ' ' + data.access_token)
  107. // this.setImToken(data.imToken)
  108. // this.setUserInfo(data)
  109. // }
  110. // return Promise.resolve(response)
  111. // } catch (e) {
  112. // return Promise.reject(e)
  113. // }
  114. try {
  115. await api_logout({})
  116. } catch {}
  117. this.setPermissions([])
  118. this.setUserInfo('')
  119. storage.remove(ACCESS_TOKEN)
  120. storage.remove(CURRENT_USER)
  121. return Promise.resolve('')
  122. }
  123. }
  124. })
  125. // Need to be used outside the setup
  126. export function useUserStoreWidthOut() {
  127. return useUserStore(store)
  128. }