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 (
共{data?.items.length || 0}个账号
ID 用户名 状态 更新时间 操作 暂无数据} isLoading={isFetching} loadingContent={} > {data?.items.map((item) => { const isBlocked = data?.blocks.includes(item.id); return ( {item.id} {item.name} {isBlocked ? ( 今日小黑屋 ) : ( {statusMap[item.status].label} )} {dayjs(item.updatedAt).format('YYYY-MM-DD')} { updateAccount({ id: item.id, data: { status: value }, }).then(() => { toast.success('更新成功!'); refetch(); }); }} > ); }) || []}
{ onOpenChange(); await queryUtils.platform.getLoginResult.cancel(); }} > {() => ( <> 添加读书账号
{loginData ? (
{loginResult?.message && (
{loginResult?.message}
)}
微信扫码登录{' '} {!loginResult?.message && count > 0 && ( ({count}s) )}
) : (
二维码加载中
)}
)}
); }; export default AccountPage;