"use client" import { Providers } from '@/components/providers' import { RootLayout } from '@/components/layout' import { Header } from '@/components/header' import { useEffect, useState } from 'react' import { ClientSelector } from '@/components/base/client-selector' import { Button } from '@/components/ui/button' import { getClientsStatus } from '@/api/platform' import { ClientType } from '@/lib/pb/common' import dynamic from 'next/dynamic' import { BaseSelector } from '@/components/base/selector' import { ServerSelector } from '@/components/base/server-selector' import LoadingCircle from '@/components/base/status' import { ClientStatus } from '@/lib/pb/api_master' import { useSearchParams } from 'next/navigation' import { useTranslation } from 'react-i18next'; import { Card, CardContent } from '@/components/ui/card' import { PlayCircle, StopCircle, RefreshCcw, Eraser, ExternalLink } from 'lucide-react' import { cn } from '@/lib/utils' const TerminalComponent = dynamic(() => import('@/components/base/read-write-xterm'), { ssr: false }) export default function ConsolePage() { const { t } = useTranslation(); const [clientID, setClientID] = useState(undefined) const [clear, setClear] = useState(0) const [enabled, setEnabled] = useState(false) const [timeoutID, setTimeoutID] = useState(null); const [clientType, setClientType] = useState(ClientType.FRPS) const [status, setStatus] = useState<"loading" | "success" | "error" | undefined>() const searchParams = useSearchParams() const paramClientID = searchParams.get('clientID') const paramClientType = searchParams.get('clientType') useEffect(() => { if (paramClientID) { setClientID(paramClientID) } if (paramClientType) { if (paramClientType == ClientType.FRPC.toString()) { setClientType(ClientType.FRPC) } else if (paramClientType == ClientType.FRPS.toString()) { setClientType(ClientType.FRPS) } } if (paramClientID && paramClientType) { setEnabled(true) } }, [paramClientID, paramClientType]) useEffect(() => { setClear(Math.random()) setStatus(undefined) if (!clientID) { return; } if (!enabled) { return; } const abortController = new AbortController(); setStatus("loading"); return () => { abortController.abort("unmount"); setEnabled(false); }; }, [clientID, enabled]); const handleConnect = () => { if (enabled) { setEnabled(false) setStatus('error') } else { if (timeoutID) { clearTimeout(timeoutID) } setTimeoutID(setTimeout(() => { setEnabled(true) setStatus('success') }, 10)) } } const handleRefresh = () => { if (!clientID) { return; } setClear(Math.random()); getClientsStatus({ clientIds: [clientID!], clientType: clientType }) } const handleNewWindow = () => { window.open(`/terminal?clientType=${clientType.toString()}&clientID=${clientID}`) } return ( }>
{ setClientType(value === ClientType.FRPC.toString() ? ClientType.FRPC : ClientType.FRPS) }} value={clientType.toString()} label={t('common.clientType')} className="h-8" />
{clientType === ClientType.FRPC && ( )} {clientType === ClientType.FRPS && ( )}
) }