import { type FormEvent, useState } from 'react' import { useNavigate, Link } from 'react-router-dom' import { Eye, EyeOff } from 'lucide-react' import { useAuth } from '../hooks/useAuth' import toast from '../components/ui/Toast' export default function LoginPage() { const { login } = useAuth() const navigate = useNavigate() const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [showPwd, setShowPwd] = useState(false) const [loading, setLoading] = useState(false) const [error, setError] = useState('') const handleSubmit = async (e: FormEvent) => { e.preventDefault() setError('') setLoading(true) try { await login(username, password) navigate('/', { replace: true }) } catch (err: any) { const status = err?.response?.status const detail = err?.response?.data?.detail ?? '登录失败' if (status === 423) { setError('账户已锁定,请 15 分钟后再试') } else if (status === 401) { setError('用户名或密码错误') } else { setError(detail) } } finally { setLoading(false) } } return (
{/* Logo */}
🐝 知微蜂巢
Hive Manage v3
{/* Error */} {error && (
{error}
)} {/* Form */}
setUsername(e.target.value)} placeholder="请输入用户名" required autoFocus style={{ width: '100%', height: 42, padding: '0 12px', borderRadius: 8, border: '1px solid var(--border)', background: 'var(--bg-root)', color: 'var(--text)', fontSize: 13, outline: 'none', fontFamily: 'inherit', }} />
setPassword(e.target.value)} placeholder="请输入密码" required style={{ width: '100%', height: 42, padding: '0 36px 0 12px', borderRadius: 8, border: '1px solid var(--border)', background: 'var(--bg-root)', color: 'var(--text)', fontSize: 13, outline: 'none', fontFamily: 'inherit', }} />
{/* Register link */}

还没有账号?{' '} 注册

) }