user.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 } from '@/api/login'
  6. const { wsCache } = useCache()
  7. interface UserVO {
  8. id: number
  9. avatar: string
  10. nickname: string
  11. }
  12. interface UserInfoVO {
  13. permissions: string[]
  14. roles: string[]
  15. isSetUser: boolean
  16. user: UserVO
  17. }
  18. export const useUserStore = defineStore('admin-user', {
  19. state: (): UserInfoVO => ({
  20. permissions: [],
  21. roles: [],
  22. isSetUser: false,
  23. user: {
  24. id: 0,
  25. avatar: '',
  26. nickname: ''
  27. }
  28. }),
  29. getters: {
  30. getPermissions(): string[] {
  31. return this.permissions
  32. },
  33. getRoles(): string[] {
  34. return this.roles
  35. },
  36. getIsSetUser(): boolean {
  37. return this.isSetUser
  38. },
  39. getUser(): UserVO {
  40. return this.user
  41. }
  42. },
  43. actions: {
  44. async setUserInfoAction() {
  45. if (!getAccessToken()) {
  46. this.resetState()
  47. return null
  48. }
  49. let userInfo = wsCache.get(CACHE_KEY.USER)
  50. if (!userInfo) {
  51. userInfo = await getInfoApi()
  52. }
  53. this.permissions = userInfo.permissions
  54. this.roles = userInfo.roles
  55. this.user = userInfo.user
  56. this.isSetUser = true
  57. wsCache.set(CACHE_KEY.USER, userInfo)
  58. },
  59. loginOut() {
  60. removeToken()
  61. wsCache.clear()
  62. this.resetState()
  63. },
  64. resetState() {
  65. this.permissions = []
  66. this.roles = []
  67. this.isSetUser = false
  68. this.user = {
  69. id: 0,
  70. avatar: '',
  71. nickname: ''
  72. }
  73. }
  74. }
  75. })
  76. export const useUserStoreWithOut = () => {
  77. return useUserStore(store)
  78. }