import React, { useState } from 'react'; import { useNavigate } from 'react-router'; import { ArrowRightIcon, LockClosedIcon, UserIcon } from '@heroicons/react/24/outline'; import { useAuth } from '../hooks.tsx'; import { handleApiError } from '../utils.ts'; // 登录页面组件 const LoginPage: React.FC = () => { const { login } = useAuth(); const navigate = useNavigate(); const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); if (!username.trim() || !password.trim()) { setError('用户名和密码不能为空'); return; } setLoading(true); setError(null); try { await login(username, password); navigate('/'); } catch (err) { setError(handleApiError(err)); } finally { setLoading(false); } }; return (
{/* 顶部Logo和标题 */}

{window.CONFIG?.APP_NAME || '移动应用'}

登录您的账户

{/* 登录表单 */}
{error && (
{error}
)}
setUsername(e.target.value)} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" placeholder="请输入用户名" />
setPassword(e.target.value)} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" placeholder="请输入密码" />
{/* 底部文本 */}
© {new Date().getFullYear()} {window.CONFIG?.APP_NAME || '移动应用'}

保留所有权利

); }; export default LoginPage;