user.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { store } from '@/store'
  2. import { defineStore } from 'pinia'
  3. import { getAccessToken, removeToken } from '@/utils/auth'
  4. import { CACHE_KEY, useCache, deleteUserCache } from '@/hooks/web/useCache'
  5. import { getInfo, loginOut } from '@/api/login'
  6. const { wsCache } = useCache()
  7. interface UserVO {
  8. id: number
  9. avatar: string
  10. nickname: string
  11. deptId: number
  12. }
  13. interface UserInfoVO {
  14. // USER 缓存
  15. permissions: string[]
  16. roles: string[]
  17. isSetUser: boolean
  18. user: UserVO
  19. }
  20. export const useUserStore = defineStore('admin-user', {
  21. state: (): UserInfoVO => ({
  22. permissions: [],
  23. roles: [],
  24. isSetUser: false,
  25. user: {
  26. id: 0,
  27. avatar: '',
  28. nickname: '',
  29. deptId: 0
  30. }
  31. }),
  32. getters: {
  33. getPermissions(): string[] {
  34. return this.permissions
  35. },
  36. getRoles(): string[] {
  37. return this.roles
  38. },
  39. getIsSetUser(): boolean {
  40. return this.isSetUser
  41. },
  42. getUser(): UserVO {
  43. return this.user
  44. }
  45. },
  46. actions: {
  47. async setUserInfoAction() {
  48. if (!getAccessToken()) {
  49. this.resetState()
  50. return null
  51. }
  52. let userInfo = wsCache.get(CACHE_KEY.USER)
  53. if (!userInfo) {
  54. userInfo = await getInfo()
  55. }
  56. this.permissions = userInfo.permissions
  57. this.roles = userInfo.roles
  58. this.user = userInfo.user
  59. this.isSetUser = true
  60. wsCache.set(CACHE_KEY.USER, userInfo)
  61. wsCache.set(CACHE_KEY.ROLE_ROUTERS, userInfo.menus)
  62. },
  63. async setUserAvatarAction(avatar: string) {
  64. const userInfo = wsCache.get(CACHE_KEY.USER)
  65. // NOTE: 是否需要像`setUserInfoAction`一样判断`userInfo != null`
  66. this.user.avatar = avatar
  67. userInfo.user.avatar = avatar
  68. wsCache.set(CACHE_KEY.USER, userInfo)
  69. },
  70. async setUserNicknameAction(nickname: string) {
  71. const userInfo = wsCache.get(CACHE_KEY.USER)
  72. // NOTE: 是否需要像`setUserInfoAction`一样判断`userInfo != null`
  73. this.user.nickname = nickname
  74. userInfo.user.nickname = nickname
  75. wsCache.set(CACHE_KEY.USER, userInfo)
  76. },
  77. async loginOut() {
  78. await loginOut()
  79. removeToken()
  80. deleteUserCache() // 删除用户缓存
  81. this.resetState()
  82. },
  83. resetState() {
  84. this.permissions = []
  85. this.roles = []
  86. this.isSetUser = false
  87. this.user = {
  88. id: 0,
  89. avatar: '',
  90. nickname: '',
  91. deptId: 0
  92. }
  93. }
  94. }
  95. })
  96. export const useUserStoreWithOut = () => {
  97. return useUserStore(store)
  98. }