user.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. }
  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. wsCache.set(CACHE_KEY.ROLE_ROUTERS, userInfo.menus)
  59. },
  60. async loginOut() {
  61. await loginOutApi()
  62. removeToken()
  63. wsCache.clear()
  64. this.resetState()
  65. },
  66. resetState() {
  67. this.permissions = []
  68. this.roles = []
  69. this.isSetUser = false
  70. this.user = {
  71. id: 0,
  72. avatar: '',
  73. nickname: ''
  74. }
  75. }
  76. }
  77. })
  78. export const useUserStoreWithOut = () => {
  79. return useUserStore(store)
  80. }