import { Button } from '@heroui/button'; import { CardBody, CardHeader } from '@heroui/card'; import { Image } from '@heroui/image'; import { Input } from '@heroui/input'; import { useLocalStorage } from '@uidotdev/usehooks'; import { useEffect, useState } from 'react'; import { toast } from 'react-hot-toast'; import { IoKeyOutline } from 'react-icons/io5'; import { useNavigate } from 'react-router-dom'; import key from '@/const/key'; import HoverEffectCard from '@/components/effect_card'; import { title } from '@/components/primitives'; import { ThemeSwitch } from '@/components/theme-switch'; import logo from '@/assets/images/logo.png'; import WebUIManager from '@/controllers/webui_manager'; import PureLayout from '@/layouts/pure'; export default function WebLoginPage () { const urlSearchParams = new URLSearchParams(window.location.search); const token = urlSearchParams.get('token'); const navigate = useNavigate(); const [tokenValue, setTokenValue] = useState(token || ''); const [isLoading, setIsLoading] = useState(false); const [, setLocalToken] = useLocalStorage(key.token, ''); const onSubmit = async () => { if (!tokenValue) { toast.error('请输入token'); return; } setIsLoading(true); try { const data = await WebUIManager.loginWithToken(tokenValue); if (data) { setLocalToken(data); navigate('/qq_login', { replace: true }); } } catch (_error) { toast.error((error as Error).message); } finally { setIsLoading(false); } }; // 处理全局键盘事件 const handleKeyDown = (e: KeyboardEvent) => { if (e.key === 'Enter' && !isLoading) { onSubmit(); } }; useEffect(() => { document.addEventListener('keydown', handleKeyDown); // 清理函数 return () => { document.removeEventListener('keydown', handleKeyDown); }; }, [tokenValue, isLoading]); // 依赖项包含用于登录的状态 useEffect(() => { if (token) { onSubmit(); } }, []); return ( <> WebUI登录 - NapCat WebUI
logo
Web  Login 
{ e.preventDefault(); onSubmit(); }} > {/* 隐藏的用户名字段,帮助浏览器识别登录表单 */} } value={tokenValue} onChange={(e) => setTokenValue(e.target.value)} onClear={() => setTokenValue('')} />
💡 提示:请从 NapCat 启动日志中查看登录密钥
); }