import React, { createContext, useContext, useEffect, useState } from 'react'; import { getToken } from '@/services/http'; import { getUserInfo, UserInfo } from '@/services/user'; interface AuthContextType { isLoggedIn: boolean; user: UserInfo | null; loading: boolean; refreshUser: () => Promise; logout: () => void; } const AuthContext = createContext({ isLoggedIn: false, user: null, loading: true, refreshUser: async () => {}, logout: () => {}, }); export function AuthProvider({ children }: { children: React.ReactNode }) { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); const refreshUser = async () => { try { const token = getToken(); if (token) { const info = await getUserInfo(); setUser(info); } else { setUser(null); } } catch (error) { console.error('获取用户信息失败:', error); setUser(null); } }; const logout = () => { setUser(null); // 清除token在http服务中处理 }; useEffect(() => { const init = async () => { await refreshUser(); setLoading(false); }; init(); }, []); return ( {children} ); } export const useAuth = () => useContext(AuthContext);