import React, { useState } from "react"; import { Box, Button, FormControl, FormLabel, Input, VStack, Heading, Text, Link, useColorMode, InputGroup, InputRightElement, IconButton, Spinner, } from "@chakra-ui/react"; import { ViewIcon, ViewOffIcon } from "@chakra-ui/icons"; import { useNavigate } from "react-router-dom"; import { useAuth } from "../../../contexts/AuthContext"; export default function SignInCentered() { const { colorMode } = useColorMode(); const navigate = useNavigate(); const { login, isLoading } = useAuth(); // 表单状态 const [formData, setFormData] = useState({ email: "", password: "", }); // UI状态 const [showPassword, setShowPassword] = useState(false); const [errors, setErrors] = useState({}); // 处理输入变化 const handleInputChange = (e) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); // 清除对应字段的错误 if (errors[name]) { setErrors(prev => ({ ...prev, [name]: "" })); } }; // 表单验证 const validateForm = () => { const newErrors = {}; if (!formData.email) { newErrors.email = "邮箱是必填项"; } else if (!/\S+@\S+\.\S+/.test(formData.email)) { newErrors.email = "请输入有效的邮箱地址"; } if (!formData.password) { newErrors.password = "密码是必填项"; } else if (formData.password.length < 6) { newErrors.password = "密码至少需要6个字符"; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; // 处理表单提交 const handleSubmit = async (e) => { e.preventDefault(); if (!validateForm()) { return; } const result = await login(formData.email, formData.password); if (result.success) { // 登录成功,跳转到首页 navigate("/home"); } }; return ( 欢迎回来1 请输入您的凭据登录
邮箱地址 {errors.email && ( {errors.email} )} 密码 : } variant="ghost" onClick={() => setShowPassword(!showPassword)} /> {errors.password && ( {errors.password} )}
还没有账户?{" "} navigate("/auth/signup")} _hover={{ textDecoration: "underline" }} > 立即注册 忘记密码? 还没有账户?{" "} navigate('/auth/sign-up')} > 立即注册
); }