import { defineStore } from 'pinia' import { ref, computed } from 'vue' import { authService, authUtils } from '@/services/auth' import type { User } from '@/types' import type { UserInfo, LoginRequest } from '@/types/auth' export const useUserStore = defineStore('user', () => { // 用户状态 const user = ref(null) const userInfo = ref(null) const token = ref('') const isLoading = ref(false) const isLoggedIn = computed(() => !!token.value && (!!user.value || !!userInfo.value)) // 方法 const setUser = (userData: User) => { user.value = userData } const setToken = (tokenValue: string) => { token.value = tokenValue // 存储到localStorage if (tokenValue) { localStorage.setItem('token', tokenValue) } else { localStorage.removeItem('token') } } const setUserInfo = (userInfoData: UserInfo | null) => { userInfo.value = userInfoData // 存储到localStorage if (userInfoData) { localStorage.setItem('userInfo', JSON.stringify(userInfoData)) } else { localStorage.removeItem('userInfo') } } // 新的登录方法,支持认证服务 const loginWithAuth = async (loginData: LoginRequest) => { isLoading.value = true try { const data = await authService.login(loginData) setToken(data.accessToken) setUserInfo(data.userInfo) return data } catch (error: any) { throw error } finally { isLoading.value = false } } const login = async (credentials: { username: string; password: string }) => { try { // TODO: 调用登录API // const response = await authApi.login(credentials) // setToken(response.data.token) // setUser(response.data.user) // 临时模拟登录 setToken('mock-token') setUser({ id: '1', username: credentials.username, email: 'user@example.com', nickname: '用户', createTime: new Date().toISOString(), updateTime: new Date().toISOString() }) return true } catch (error) { console.error('Login failed:', error) return false } } const logout = async () => { try { await authService.logout() } catch (error) { console.error('Logout error:', error) } finally { // 清除状态和本地存储 user.value = null userInfo.value = null setToken('') authUtils.clearAuth() } } const updateProfile = (profileData: Partial) => { if (user.value) { user.value = { ...user.value, ...profileData } // TODO: 调用更新API } } // 初始化用户状态 const initUser = () => { const savedToken = authUtils.getToken() const savedUserInfo = authUtils.getUserInfo() console.log('初始化用户状态:', { savedToken: !!savedToken, savedUserInfo }) if (savedToken) { setToken(savedToken) } if (savedUserInfo) { setUserInfo(savedUserInfo) } console.log('用户状态初始化完成:', { token: !!token.value, userInfo: userInfo.value, isLoggedIn: isLoggedIn.value }) } // 刷新用户信息 const refreshUserInfo = async () => { if (!token.value) return try { const response = await authService.getUserInfo() if (response.success) { userInfo.value = response.data authUtils.setUserInfo(response.data) } } catch (error) { console.error('Refresh user info error:', error) } } return { // 状态 user, userInfo, token, isLoading, isLoggedIn, // 方法 setUser, setToken, setUserInfo, login, loginWithAuth, logout, updateProfile, initUser, refreshUserInfo } })