'use client'; 
 | 
  
 | 
import React, { createContext, useContext, useState, useEffect } from 'react'; 
 | 
import ApiService from '@/utils/api'; 
 | 
  
 | 
interface User { 
 | 
  id: number; 
 | 
  username: string; 
 | 
  email: string; 
 | 
  // 根据实际用户信息结构添加其他字段 
 | 
} 
 | 
  
 | 
interface UserContextType { 
 | 
  user: User | null; 
 | 
  setUser: (user: User | null) => void; 
 | 
  isLoading: boolean; 
 | 
  logout: () => void; 
 | 
} 
 | 
  
 | 
const UserContext = createContext<UserContextType | undefined>(undefined); 
 | 
  
 | 
export function UserProvider({ children }: { children: React.ReactNode }) { 
 | 
  const [user, setUser] = useState<User | null>(null); 
 | 
  const [isLoading, setIsLoading] = useState(true); 
 | 
  
 | 
  useEffect(() => { 
 | 
    const initializeUser = async () => { 
 | 
      const token = localStorage.getItem('token'); 
 | 
      if (token) { 
 | 
        try { 
 | 
          const response = await ApiService.get<User>('/users/info'); 
 | 
          if (response.code === 200) { 
 | 
            setUser(response.data); 
 | 
          } 
 | 
        } catch (error) { 
 | 
          console.error('Failed to fetch user info:', error); 
 | 
          localStorage.removeItem('token'); // 如果获取用户信息失败,清除token 
 | 
        } 
 | 
      } 
 | 
      setIsLoading(false); 
 | 
    }; 
 | 
  
 | 
    initializeUser(); 
 | 
  }, []); 
 | 
  
 | 
  const logout = () => { 
 | 
    setUser(null); 
 | 
    localStorage.removeItem('token'); 
 | 
  }; 
 | 
  
 | 
  return ( 
 | 
    <UserContext.Provider value={{ user, setUser, isLoading, logout }}> 
 | 
      {children} 
 | 
    </UserContext.Provider> 
 | 
  ); 
 | 
} 
 | 
  
 | 
export function useUser() { 
 | 
  const context = useContext(UserContext); 
 | 
  if (context === undefined) { 
 | 
    throw new Error('useUser must be used within a UserProvider'); 
 | 
  } 
 | 
  return context; 
 | 
}  
 |