user.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { defineStore } from "pinia";
  2. import { ref } from "vue";
  3. import { login as apiLogin, profile, newGuest } from "@/services/api";
  4. import { useStorage } from "@vueuse/core";
  5. export const useUserStore = defineStore("user", () => {
  6. const token = useStorage("token", "");
  7. const userInfo = ref<any>({});
  8. const userManuallyLoggedOut = useStorage("userManuallyLoggedOut", false);
  9. const setToken = (newToken: string) => {
  10. token.value = newToken;
  11. };
  12. const setUserInfo = (info: any) => {
  13. userInfo.value = info;
  14. };
  15. const login = async (username: string, password: string) => {
  16. const response = await apiLogin(username, password);
  17. setToken(response.token);
  18. setUserInfo(response.user);
  19. userManuallyLoggedOut.value = false;
  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. userManuallyLoggedOut.value = true;
  30. };
  31. const createGuest = async (code?: string) => {
  32. try {
  33. const response = await newGuest(code);
  34. setToken(response.token);
  35. setUserInfo(response.user);
  36. userManuallyLoggedOut.value = false;
  37. return response;
  38. } catch (error) {
  39. console.error("创建游客账号失败", error);
  40. return null;
  41. }
  42. };
  43. return {
  44. token,
  45. userInfo,
  46. userManuallyLoggedOut,
  47. setUserInfo,
  48. login,
  49. logout,
  50. sync,
  51. createGuest,
  52. };
  53. });