// entrypoints/popup/pages/Login.tsx import React, { useState, useEffect, useRef } from 'react'; import { useNavigate } from 'react-router-dom'; import { Button, Input, Message, Grid } from '@alifd/next'; const { Row, Col } = Grid export default function Login({ setIsLoggedIn }: { setIsLoggedIn: (loggedIn: boolean) => void }) { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [code, setCode] = useState(''); const [loading, setLoading] = useState(false); const [errors, setErrors] = useState<{ username?: string, password?: string, code?: string }>({}); const [keys, setKeys] = useState(''); const [validImg, setValidImg] = useState(''); const navigate = useNavigate(); useEffect(() => { evVerify() }, []) const validateForm = () => { const newErrors: { username?: string, password?: string, code?: string } = {}; if (!username.trim()) { newErrors.username = '请输入用户名'; } if (!password) { newErrors.password = '请输入密码'; } else if (password.length < 6) { newErrors.password = '密码长度至少为6位'; } if (!code.trim()) { newErrors.code = '请输入验证码'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const evVerify = () => { console.log('username') fetch('https://user.landwu.com/api/user/verify', { method: 'POST', headers: { 'Content-Type': 'application/json', } }).then(resjson => { return resjson.json(); // 正确解析 Response 为 JSON 数据 }).then(res => { const { data = {} } = res; const { data: info = {} } = data; const { key = "", img = "" } = info; setKeys(key) setValidImg(img) }) } const handleLogin = () => { if (!validateForm()) { return; } setLoading(true); try { console.log("values") const params = { username, password, code, key: keys } // 发送登录请求 fetch('https://user.landwu.com/api/user/login', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(params), }).then(response => response.json()).then(res => { const { msg = "", token = "", code } = res; if (!code) { setLoading(false); return false; } if (code == -1) { evVerify() Message.error(msg); setLoading(false); return false; } Message.success(msg); localStorage.setItem("access_token", token); localStorage.setItem('isLoggedIn', 'true'); setIsLoggedIn(true); // 跳转到首页 navigate('/'); // Cookies.set("access_token", toCode(token)); }).catch((e) => { console.log("catch") setLoading(false); }); } catch (error) { console.error('登录请求失败:', error); Message.error('网络错误,请稍后重试'); } finally { setLoading(false); } }; const handleInputChange = (field: string, value: string) => { if (field === 'username') { setUsername(value); if (errors.username) { setErrors({ ...errors, username: undefined }); } } else if (field === 'password') { setPassword(value); if (errors.password) { setErrors({ ...errors, password: undefined }); } } else if (field === 'code') { setCode(value); if (errors.code) { setErrors({ ...errors, code: undefined }); } } }; return (

登录

handleInputChange('username', value)} disabled={loading} /> {errors.username &&
{errors.username}
}
handleInputChange('password', value)} disabled={loading} /> {errors.password &&
{errors.password}
}
handleInputChange('code', value)} disabled={loading} /> {errors.code &&
{errors.code}
}
验证码

忘记密码?请联系管理员

); }