import { Modal, ModalContent, ModalHeader, ModalBody, Button, useDisclosure, Spinner, Table, TableBody, TableCell, TableColumn, TableHeader, TableRow, Chip, } from '@nextui-org/react'; import { QRCodeSVG } from 'qrcode.react'; import { toast } from 'sonner'; import { PlusIcon } from '@web/components/PlusIcon'; import dayjs from 'dayjs'; import { StatusDropdown } from '@web/components/StatusDropdown'; import { trpc } from '@web/utils/trpc'; import { statusMap } from '@web/constants'; import { useEffect, useState } from 'react'; const AccountPage = () => { const { isOpen, onOpen, onClose, onOpenChange } = useDisclosure(); const [count, setCount] = useState(0); const { refetch, data, isFetching } = trpc.account.list.useQuery({}); const queryUtils = trpc.useUtils(); const { mutateAsync: updateAccount } = trpc.account.edit.useMutation({}); const { mutateAsync: deleteAccount } = trpc.account.delete.useMutation({}); const { mutateAsync: addAccount } = trpc.account.add.useMutation({}); const { mutateAsync, data: loginData } = trpc.platform.createLoginUrl.useMutation({ onSuccess(data) { if (data.uuid) { setCount(60); } }, }); const { data: loginResult } = trpc.platform.getLoginResult.useQuery( { id: loginData?.uuid ?? '', }, { refetchIntervalInBackground: false, enabled: !!loginData?.uuid, async onSuccess(data) { if (data.vid && data.token) { const name = data.username!; await addAccount({ id: `${data.vid}`, name, token: data.token }); onClose(); toast.success('添加成功', { description: `用户名:${name}(${data.vid})`, }); refetch(); } else if (data.message) { toast.error(`登录失败: ${data.message}`); } }, }, ); useEffect(() => { let timerId; if (count > 0 && isOpen) { timerId = setTimeout(() => { setCount(count - 1); }, 1000); } return () => timerId && clearTimeout(timerId); }, [count, isOpen]); return (