import { Button } from "@heroui/button"; import { Input } from "@heroui/input"; import { Card, CardBody, CardHeader } from "@heroui/card"; import { useState } from "react"; import { useNavigate } from "react-router-dom"; import toast from 'react-hot-toast'; import { title } from "@/components/primitives"; import DefaultLayout from "@/layouts/default"; import { login, LoginData } from "@/api"; interface LoginForm { username: string; password: string; } export default function IndexPage() { const [form, setForm] = useState({ username: "", password: "" }); const [loading, setLoading] = useState(false); const [errors, setErrors] = useState>({}); const navigate = useNavigate(); // 验证表单 const validateForm = (): boolean => { const newErrors: Partial = {}; if (!form.username.trim()) { newErrors.username = '请输入用户名'; } if (!form.password.trim()) { newErrors.password = '请输入密码'; } else if (form.password.length < 6) { newErrors.password = '密码长度至少6位'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; // 处理输入变化 const handleInputChange = (field: keyof LoginForm, value: string) => { setForm(prev => ({ ...prev, [field]: value })); // 清除该字段的错误 if (errors[field]) { setErrors(prev => ({ ...prev, [field]: undefined })); } }; const handleLogin = async () => { if (!validateForm()) return; setLoading(true); try { const loginData: LoginData = { username: form.username.trim(), password: form.password }; const response = await login(loginData); if (response.code !== 0) { toast.error(response.msg || "登陆失败"); return; } // 检查是否需要强制修改密码 if (response.data.requirePasswordChange) { localStorage.setItem('token', response.data.token); localStorage.setItem("role_id", response.data.role_id.toString()); localStorage.setItem("name", response.data.name); // 设置admin字段 - role_id为0的是管理员 localStorage.setItem("admin", (response.data.role_id === 0).toString()); toast.success('检测到默认密码,即将跳转到修改密码页面'); // 直接跳转到修改密码页面 navigate("/change-password"); return; } // 保存登陆信息 localStorage.setItem('token', response.data.token); localStorage.setItem("role_id", response.data.role_id.toString()); localStorage.setItem("name", response.data.name); // 设置admin字段 - role_id为0的是管理员 localStorage.setItem("admin", (response.data.role_id === 0).toString()); // 登陆成功 toast.success('登陆成功'); navigate("/dashboard"); } catch (error) { console.error('登陆错误:', error); toast.error("网络错误,请稍后重试"); } finally { setLoading(false); } }; const handleKeyPress = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && !loading) { handleLogin(); } }; return (

登陆

请输入您的账号信息

handleInputChange('username', e.target.value)} onKeyDown={handleKeyPress} variant="bordered" isDisabled={loading} isInvalid={!!errors.username} errorMessage={errors.username} /> handleInputChange('password', e.target.value)} onKeyDown={handleKeyPress} variant="bordered" isDisabled={loading} isInvalid={!!errors.password} errorMessage={errors.password} />
); }