"use client"; import { useCallback, useEffect, useState } from "react"; import { AdminLayout } from "@/components/layout/admin-layout"; import { PageHeader } from "@/components/layout/page-header"; import { Card } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { ErrorBanner } from "@/components/ui/error-banner"; import { PrimaryButton, SecondaryButton } from "@/components/ui/primary-button"; import { InputField } from "@/components/ui/input-field"; import { adminGetRpaStatus, adminPauseWorker, } from "@/lib/frontend/api-client"; import { useAuth } from "@/hooks/use-auth"; import type { DataPageStatus, RpaStatus } from "@/lib/frontend/types"; export default function RpaAdminPage() { const { token } = useAuth(); const [status, setStatus] = useState("loading"); const [data, setData] = useState(null); const [pauseWorkerId, setPauseWorkerId] = useState(""); const [pauseMinutes, setPauseMinutes] = useState("10"); const [pausing, setPausing] = useState(false); const [message, setMessage] = useState(null); const load = useCallback(async () => { if (!token) return; setStatus("loading"); const res = await adminGetRpaStatus("", token); if (res.code !== 0) { setStatus("error"); return; } setData(res.data); if (res.data.workers[0] && !pauseWorkerId) { setPauseWorkerId(res.data.workers[0].worker_id); } setStatus("success"); }, [token, pauseWorkerId]); useEffect(() => { void load(); const id = setInterval(() => void load(), 10_000); return () => clearInterval(id); }, [load]); const handlePause = async () => { if (!token || !pauseWorkerId) return; setPausing(true); setMessage(null); const res = await adminPauseWorker( "", token, pauseWorkerId, Number(pauseMinutes), ); setPausing(false); if (res.code !== 0) { setMessage(res.message); return; } setMessage("Worker 已暂停"); void load(); }; return ( {status === "loading" && } {status === "error" && ( void load()}>重试} > 加载 RPA 状态失败 )} {status === "success" && data && (

队列深度

{data.queue_depth}

24h RPA 成功率

{data.success_rate_24h}%

熔断状态

{data.circuit_open ? "已熔断" : "正常"}

Worker 列表

{data.workers.length === 0 ? (

暂无 Worker 心跳

) : (
    {data.workers.map((w) => (
  • {w.worker_id} {w.online ? "在线" : "离线"} {w.paused_seconds > 0 && ( 暂停中(剩余 {w.paused_seconds}s) )}
  • ))}
)}

暂停 Worker

setPauseWorkerId(e.target.value)} /> setPauseMinutes(e.target.value)} />
void handlePause()}> 暂停 Worker
{message && (

{message}

)}
)}
); }