import { ref, computed } from 'vue' import { defineStore } from 'pinia' export interface UserInfo { headerImg?: string nickName?: string userName?: string [key: string]: unknown } const STORAGE_KEY = 'poly-user' function loadStored(): { token: string; user: UserInfo } | null { try { const raw = localStorage.getItem(STORAGE_KEY) if (!raw) return null return JSON.parse(raw) as { token: string; user: UserInfo } } catch { return null } } function saveToStorage(token: string, user: UserInfo) { try { localStorage.setItem(STORAGE_KEY, JSON.stringify({ token, user })) } catch { // } } function clearStorage() { try { localStorage.removeItem(STORAGE_KEY) } catch { // } } export const useUserStore = defineStore('user', () => { const stored = loadStored() const token = ref(stored?.token ?? '') const user = ref(stored?.user ?? null) const isLoggedIn = computed(() => !!token.value && !!user.value) const avatarUrl = computed(() => user.value?.headerImg ?? '') /** 钱包余额显示,如 "0.00",可从接口更新 */ const balance = ref('0.00') function setUser(loginData: { token?: string; user?: UserInfo }) { const t = loginData.token ?? '' const u = loginData.user ?? null token.value = t user.value = u if (t && u) saveToStorage(t, u) else clearStorage() } function logout() { token.value = '' user.value = null clearStorage() } return { token, user, isLoggedIn, avatarUrl, balance, setUser, logout } })