import { defineStore } from 'pinia' export const useUserStore = defineStore('user', { state: () => ({ token: typeof window !== 'undefined' ? localStorage.getItem('rt_token') || '' :'', userInfo: typeof window !== 'undefined' ? JSON.parse(localStorage.getItem('userInfo') || '{}') : {}, roles: typeof window !== 'undefined' ? JSON.parse(localStorage.getItem('roles') || '[]') : [], // 新增:会话级标记(是否已拉取过用户信息,不持久化,刷新自动重置) isUserInfoFetched: false }), getters: { isLogin: (state) => !!state.token, // 必须有 hasRole: (state) => (role) => state.roles.includes(role), // 必须有 }, actions: { // 确保该方法存在:设置用户信息 setUserInfo(userInfo) { this.userInfo = userInfo; if (typeof window !== 'undefined') { localStorage.setItem('userInfo', JSON.stringify(userInfo)); // 持久化到本地 } }, // 确保该方法存在:设置权限角色 setRoles(roleList) { this.roles = roleList; if (typeof window !== 'undefined') { localStorage.setItem('roles', JSON.stringify(roleList)); // 持久化到本地 } }, // 新增:更新用户信息拉取标记 setUserInfoFetched(status) { this.isUserInfoFetched = status; }, resetStore() { // 必须有:退出登录清除状态 this.token = '' this.userInfo = {} this.roles = [] if (typeof window !== 'undefined') { localStorage.removeItem('rt_token') localStorage.removeItem('userInfo') localStorage.removeItem('roles') } }, setToken(token) { this.token = token if (typeof window !== 'undefined') { localStorage.setItem('rt_token', token) } }, // 其他setUserInfo/setRoles方法... }, })