"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 { SecondaryButton } from "@/components/ui/primary-button"; import { adminGetQueueStats } from "@/lib/frontend/api-client"; import { useAuth } from "@/hooks/use-auth"; import type { DataPageStatus, QueueStats } from "@/lib/frontend/types"; const BULL_BOARD_PATH = "/api/admin/queues"; export default function QueuesAdminPage() { const { token } = useAuth(); const [status, setStatus] = useState("loading"); const [stats, setStats] = useState(null); const [boardReady, setBoardReady] = useState(false); const load = useCallback(async () => { if (!token) return; setStatus("loading"); const res = await adminGetQueueStats("", token); if (res.code !== 0) { setStatus("error"); return; } setStats(res.data); setStatus("success"); }, [token]); useEffect(() => { void load(); const id = setInterval(() => void load(), 10_000); return () => clearInterval(id); }, [load]); useEffect(() => { if (!token) { setBoardReady(false); return; } const encoded = encodeURIComponent(token); document.cookie = `bull_board_auth=${encoded}; path=${BULL_BOARD_PATH}; max-age=3600; SameSite=Lax`; setBoardReady(true); return () => { document.cookie = `bull_board_auth=; path=${BULL_BOARD_PATH}; max-age=0`; setBoardReady(false); }; }, [token]); return ( {status === "loading" && } {status === "error" && ( void load()}>重试} > 加载队列统计失败 )} {status === "success" && stats && (

队列深度

{stats.depth}

等待中

{stats.waiting}

执行中

{stats.active}

延迟

0 ? "text-warning" : "" }`} > {stats.delayed}

失败

0 ? "text-error" : "" }`} > {stats.failed}

)} {!boardReady && } {boardReady && (