import { Button } from '@heroui/button'; import { CardBody, CardHeader } from '@heroui/card'; import { Image } from '@heroui/image'; import { Tab, Tabs } from '@heroui/tabs'; import { useEffect, useRef, useState } from 'react'; import { toast } from 'react-hot-toast'; import { useNavigate } from 'react-router-dom'; import logo from '@/assets/images/logo.png'; import HoverEffectCard from '@/components/effect_card'; import { title } from '@/components/primitives'; import QrCodeLogin from '@/components/qr_code_login'; import QuickLogin from '@/components/quick_login'; import type { QQItem } from '@/components/quick_login'; import { ThemeSwitch } from '@/components/theme-switch'; import QQManager from '@/controllers/qq_manager'; import PureLayout from '@/layouts/pure'; import { motion } from 'motion/react'; export default function QQLoginPage () { const navigate = useNavigate(); const [uinValue, setUinValue] = useState(''); const [isLoading, setIsLoading] = useState(false); const [qrcode, setQrcode] = useState(''); const [qqList, setQQList] = useState<(QQItem | LoginListItem)[]>([]); const [refresh, setRefresh] = useState(false); const firstLoad = useRef(true); const onSubmit = async () => { if (!uinValue) { toast.error('请选择快捷登录的QQ'); return; } setIsLoading(true); try { await QQManager.setQuickLogin(uinValue); } catch (error) { const msg = (error as Error).message; toast.error(`快速登录QQ失败: ${msg}`); } finally { setTimeout(() => { setIsLoading(false); }, 1000); } }; const onUpdateQrCode = async () => { if (firstLoad.current) setIsLoading(true); try { const data = await QQManager.checkQQLoginStatusWithQrcode(); if (firstLoad.current) { setIsLoading(false); firstLoad.current = false; } if (data.isLogin) { toast.success('QQ登录成功'); navigate('/', { replace: true }); } else { setQrcode(data.qrcodeurl); } } catch (error) { const msg = (error as Error).message; toast.error(`获取二维码失败: ${msg}`); } }; const onUpdateQQList = async () => { setRefresh(true); try { const data = await QQManager.getQQQuickLoginListNew(); setQQList(data); } catch (_error) { try { const data = await QQManager.getQQQuickLoginList(); const qqList = data.map((item) => ({ uin: item, })); setQQList(qqList); } catch (_error) { const msg = (_error as Error).message; toast.error(`获取QQ列表失败: ${msg}`); } } finally { setRefresh(false); } }; const handleSelectionChange: React.ChangeEventHandler = ( e ) => { setUinValue(e.target.value); }; useEffect(() => { const timer = setInterval(() => { onUpdateQrCode(); }, 3000); onUpdateQrCode(); onUpdateQQList(); return () => clearInterval(timer); }, []); return ( <> QQ登录 - NapCat WebUI
logo
Web  Login 
); }