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 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 logo from '@/assets/images/logo.png' import QQManager from '@/controllers/qq_manager' import PureLayout from '@/layouts/pure' 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 
) }