user.js 959 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { defineStore } from 'pinia'
  2. import { ref } from 'vue'
  3. import { login as apiLogin, profile } from '@/services/api'
  4. import { useStorage } from '@vueuse/core'
  5. import { useTeamStore } from '@/stores/team'
  6. export const useUserStore = defineStore('user', () => {
  7. const token = useStorage('token', '')
  8. const userInfo = ref({})
  9. const teamStore = useTeamStore()
  10. const setToken = (newToken) => {
  11. token.value = newToken
  12. }
  13. const setUserInfo = (info) => {
  14. userInfo.value = info
  15. }
  16. const login = async (username, password) => {
  17. const response = await apiLogin(username, password)
  18. setToken(response.token)
  19. setUserInfo(response.user)
  20. return response
  21. }
  22. const sync = async () => {
  23. const response = await profile()
  24. setUserInfo(response)
  25. }
  26. const logout = () => {
  27. token.value = ''
  28. userInfo.value = {}
  29. teamStore.reset()
  30. }
  31. return {
  32. token,
  33. userInfo,
  34. login,
  35. logout,
  36. sync
  37. }
  38. })