import { defineStore } from "pinia"; import { computed, ref } from "vue"; type IUserInfo = { id: string; email: string; displayName: string; token: string; }; const initState: IUserInfo = { id: "", email: "", displayName: "", token: "" }; export const useUserStore = defineStore( "user", () => { const userInfo = ref({ ...initState }); const setUserInfo = (val: IUserInfo) => { userInfo.value = val; }; const clearUserInfo = () => { userInfo.value.displayName = ""; userInfo.value.id = ""; userInfo.value.token = ""; }; const reset = () => { userInfo.value = { ...initState }; // 使用initState确保一致性 }; // 判断是否已登录 const isLogined = computed(() => { return !!( userInfo.value.token && // 用户令牌 userInfo.value.id && // 用户ID userInfo.value.email // 邮箱 ); }); return { userInfo, setUserInfo, clearUserInfo, isLogined, reset }; }, { persist: true } );