// 用户 Store:登录态、积分余额(游戏结算后实时刷新) import { defineStore } from 'pinia' import http from '../api/http' export const useUserStore = defineStore('user', { state: () => ({ token: localStorage.getItem('token') || '', user: JSON.parse(localStorage.getItem('user') || 'null'), }), getters: { // 是否已登录 loggedIn: (s) => !!s.token, // 是否超级管理员 isAdmin: (s) => s.user?.role === 1, }, actions: { // 保存登录结果 setLogin({ token, user }) { this.token = token this.user = user localStorage.setItem('token', token) localStorage.setItem('user', JSON.stringify(user)) }, // 更新用户信息(积分变化、改资料后) setUser(user) { this.user = user localStorage.setItem('user', JSON.stringify(user)) }, // 只更新积分余额(结算响应里带了最新余额) setPoints(points) { if (this.user) { this.user.points = points localStorage.setItem('user', JSON.stringify(this.user)) } }, // 从服务端刷新最新资料 async refresh() { if (!this.token) return const user = await http.get('/user/profile') this.setUser(user) }, // 退出登录 logout() { this.token = '' this.user = null localStorage.removeItem('token') localStorage.removeItem('user') }, }, })