From 90d1e4f788ea471cffcbc1239927cda8e47d4ea1 Mon Sep 17 00:00:00 2001 From: chengkai3 Date: Sun, 28 Jun 2026 14:32:19 +0800 Subject: [PATCH] =?UTF-8?q?[feat]:[FL-208][=E4=BC=98=E5=8C=96worker?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=E9=A1=B5=E9=9D=A2]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 预取配置硬编码显示为1 2. 移除自动刷新功能,刷新按钮改为主题色 3. 移除"生成时间、执行节点、在线、离线"统计信息展示 4. 修复队列列"默认队列"重复显示问题 5. 修复执行节点列内容超长时的溢出问题 Co-Authored-By: Claude Sonnet 4.6 Co-authored-by: multica-agent --- web/src/app/admin/workers/page.tsx | 30 ++++++++++++----------------- web/src/lib/task-monitor-display.ts | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/web/src/app/admin/workers/page.tsx b/web/src/app/admin/workers/page.tsx index 2953d80..f6adbd2 100644 --- a/web/src/app/admin/workers/page.tsx +++ b/web/src/app/admin/workers/page.tsx @@ -38,6 +38,7 @@ import { getQueueDisplayName, getTaskSourceDisplay, getTaskStateDisplay, + normalizeQueueNames, } from "@/lib/task-monitor-display"; const { Text } = Typography; @@ -131,9 +132,10 @@ function renderWorkerStatusTag(status: string) { } function renderQueueTags(queueNames: string[]) { - return queueNames.length > 0 ? ( + const normalized = normalizeQueueNames(queueNames); + return normalized.length > 0 ? ( - {queueNames.map((queueName) => ( + {normalized.map((queueName) => ( {getQueueDisplayName(queueName)} @@ -163,7 +165,6 @@ export default function AdminWorkersPage() { const isMobile = useMobileDetection(); const canRead = hasPermission("celery.read") || hasPermission("celery.manage"); - const [autoRefresh, setAutoRefresh] = useState(true); const [workerKeyword, setWorkerKeyword] = useState(""); const [queueKeyword, setQueueKeyword] = useState(""); const [statusFilter, setStatusFilter] = useState<"all" | "online" | "offline">("all"); @@ -182,7 +183,7 @@ export default function AdminWorkersPage() { } return (await response.json()) as WorkerMonitorOverviewResponse; }, - refetchInterval: autoRefresh ? 5_000 : false, + refetchInterval: false, staleTime: 15_000, }); @@ -210,7 +211,7 @@ export default function AdminWorkersPage() { } return (await response.json()) as WorkerMonitorTaskOverviewResponse; }, - refetchInterval: autoRefresh ? 5_000 : false, + refetchInterval: false, staleTime: 15_000, }); @@ -221,6 +222,9 @@ export default function AdminWorkersPage() { dataIndex: "worker", key: "worker", width: 220, + ellipsis: { + showTitle: false, + }, render: (value: string) => ( {value || "-"} @@ -255,6 +259,7 @@ export default function AdminWorkersPage() { key: "prefetch_count", width: 70, align: "center", + render: () => 1, }, { title: "任务统计", @@ -586,7 +591,7 @@ export default function AdminWorkersPage() {
并发/预取 - {workerItem.concurrency}/{workerItem.prefetch_count} + {workerItem.concurrency}/1
任务 @@ -616,11 +621,7 @@ export default function AdminWorkersPage() { extra={( {overviewQuery.isFetching && } - - 自动刷新 - - - @@ -692,13 +693,6 @@ export default function AdminWorkersPage() { )} - - 生成时间:{formatDateTime(overview?.generated_at)} - 执行节点:{filteredWorkers.length}/{overview?.summary.total ?? 0} - 在线:{overview?.summary.online ?? 0} - 离线:{overview?.summary.offline ?? 0} - - {viewMode === "table" ? (
(); + const result: string[] = []; + + for (const queueName of queueNames) { + const displayName = getQueueDisplayName(queueName); + if (!seen.has(displayName)) { + seen.add(displayName); + result.push(queueName); + } + } + + return result; +} + export function formatTaskMonitorDuration(value: number | null | undefined): string { if (value === null || value === undefined || !Number.isFinite(value)) { return "-";