import { defineStore } from 'pinia' import { fetchMe, loginWithSms, type AuthUser } from '@/api/auth' export const useSessionStore = defineStore('session', { state: () => ({ token: localStorage.getItem('access_token') || '', refreshToken: localStorage.getItem('refresh_token') || '', userId: Number(localStorage.getItem('user_id') || 0), phone: '', realnameStatus: 'unknown', }), actions: { async login(phone: string, code: string) { const result = await loginWithSms(phone, code) this.applySession(result.user, result.tokens.access_token, result.tokens.refresh_token) return result }, async loadMe() { const user = await fetchMe() this.applyUser(user) return user }, logout() { this.token = '' this.refreshToken = '' this.userId = 0 this.phone = '' this.realnameStatus = 'unknown' localStorage.removeItem('access_token') localStorage.removeItem('refresh_token') localStorage.removeItem('user_id') }, applySession(user: AuthUser, accessToken: string, refreshToken: string) { this.token = accessToken this.refreshToken = refreshToken this.userId = user.id localStorage.setItem('access_token', accessToken) localStorage.setItem('refresh_token', refreshToken) localStorage.setItem('user_id', String(user.id)) this.applyUser(user) }, applyUser(user: AuthUser) { this.userId = user.id localStorage.setItem('user_id', String(user.id)) this.phone = user.phone this.realnameStatus = user.realname_status }, }, })