blob: a76b63871d48008151cc40867e41cdf9e7e4e6c9 [file] [log] [blame]
Krishya75e43c02025-04-05 21:16:30 +08001import React, { createContext, useContext, useState, useEffect } from 'react';
2
Krishya8f2fec82025-06-04 21:54:46 +08003export const UserContext = createContext();
Krishya75e43c02025-04-05 21:16:30 +08004
5export const UserProvider = ({ children }) => {
6 const [user, setUser] = useState(null);
7 const [loading, setLoading] = useState(true);
8
Krishya75e43c02025-04-05 21:16:30 +08009 useEffect(() => {
10 const storedUser = localStorage.getItem('user');
11 if (storedUser) {
2230100937ebec12025-06-03 21:17:04 +080012 setUser(JSON.parse(storedUser));
13 } else {
14 // 设置默认用户
15 const defaultUser = { userId: 1, username: '测试用户' };
16 localStorage.setItem('user', JSON.stringify(defaultUser));
17 setUser(defaultUser);
Krishya75e43c02025-04-05 21:16:30 +080018 }
19 setLoading(false);
20 }, []);
21
Krishya75e43c02025-04-05 21:16:30 +080022 const saveUser = (userData) => {
Krishya8f2fec82025-06-04 21:54:46 +080023 if (userData && userData.id) {
24 localStorage.setItem('user', JSON.stringify(userData));
25 setUser(userData);
26 } else {
27 console.error('无效的用户数据:', userData);
28 }
Krishya75e43c02025-04-05 21:16:30 +080029 };
30
Krishya75e43c02025-04-05 21:16:30 +080031 const logout = () => {
32 localStorage.removeItem('user');
33 setUser(null);
34 };
35
36 return (
Krishya8f2fec82025-06-04 21:54:46 +080037 <UserContext.Provider value={{ user, saveUser, logout, loading }}>
Krishya75e43c02025-04-05 21:16:30 +080038 {children}
39 </UserContext.Provider>
40 );
41};
42
Krishya8f2fec82025-06-04 21:54:46 +080043export const useUser = () => {
44 const context = useContext(UserContext);
45 if (!context) {
46 throw new Error('useUser must be used within a UserProvider');
47 }
48 return context;
49};