user.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { defineStore } from 'pinia'
  2. import { ref } from 'vue'
  3. import type { AdminInfo } from '@/types'
  4. import {
  5. getToken,
  6. setToken,
  7. removeToken,
  8. setRefreshToken,
  9. removeRefreshToken
  10. } from '@/utils/auth'
  11. import { login, logout, getInfo } from '@/api/login'
  12. import type { LoginParams } from '@/types'
  13. export const useUserStore = defineStore('user', () => {
  14. const token = ref<string>(getToken() || '')
  15. const userInfo = ref<AdminInfo | null>(null)
  16. async function loginAction(loginForm: LoginParams) {
  17. const res = await login(loginForm)
  18. if (res.code === 200 && res.data) {
  19. // 新 API 返回 token 和 admin
  20. const { token: accessToken, refreshToken, admin } = res.data
  21. token.value = accessToken
  22. setToken(accessToken)
  23. if (refreshToken) {
  24. setRefreshToken(refreshToken)
  25. }
  26. // 设置用户信息
  27. if (admin) {
  28. userInfo.value = admin
  29. }
  30. }
  31. return res
  32. }
  33. async function getUserInfo() {
  34. const res = await getInfo()
  35. if (res.code === 200 && res.data) {
  36. userInfo.value = res.data
  37. }
  38. return res
  39. }
  40. async function logoutAction() {
  41. try {
  42. await logout()
  43. } finally {
  44. token.value = ''
  45. userInfo.value = null
  46. removeToken()
  47. removeRefreshToken()
  48. }
  49. }
  50. function resetToken() {
  51. token.value = ''
  52. userInfo.value = null
  53. removeToken()
  54. removeRefreshToken()
  55. }
  56. return {
  57. token,
  58. userInfo,
  59. loginAction,
  60. getUserInfo,
  61. logoutAction,
  62. resetToken
  63. }
  64. })