user.ts 2.4 KB

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