生产管理系统 - 登录,二维码功能集成

This commit is contained in:
2025-10-31 11:49:11 +08:00
parent 2fa64e66c9
commit 46ff61eaed
11 changed files with 1867 additions and 185 deletions

View File

@@ -0,0 +1,70 @@
'use client';
import React, { createContext, useContext, useState, ReactNode } from 'react';
interface User {
id: string;
username: string;
realName: string;
email?: string;
phone?: string;
enterpriseId?: string;
}
interface AuthContextType {
user: User | null;
login: (user: User) => void;
logout: () => void;
isAuthenticated: boolean;
}
const AuthContext = createContext<AuthContextType | undefined>(undefined);
interface AuthProviderProps {
children: ReactNode;
}
export function AuthProvider({ children }: AuthProviderProps) {
const [user, setUser] = useState<User | null>(null);
const login = (userData: User) => {
setUser(userData);
// 存储到 localStorage
localStorage.setItem('user', JSON.stringify(userData));
};
const logout = () => {
setUser(null);
localStorage.removeItem('user');
};
// 初始化时检查 localStorage
React.useEffect(() => {
const storedUser = localStorage.getItem('user');
if (storedUser) {
try {
setUser(JSON.parse(storedUser));
} catch (error) {
console.error('Failed to parse stored user data:', error);
localStorage.removeItem('user');
}
}
}, []);
const value: AuthContextType = {
user,
login,
logout,
isAuthenticated: !!user,
};
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
}
export function useAuth() {
const context = useContext(AuthContext);
if (context === undefined) {
throw new Error('useAuth must be used within an AuthProvider');
}
return context;
}