diff --git a/web/frontend/src/pages/LoginTasksPage.tsx b/web/frontend/src/pages/LoginTasksPage.tsx index 5bbe43c..a33c7f9 100644 --- a/web/frontend/src/pages/LoginTasksPage.tsx +++ b/web/frontend/src/pages/LoginTasksPage.tsx @@ -217,15 +217,12 @@ export default function LoginTasksPage() { }); setTasks(data.items); setTaskTotal(data.total); - // 翻页/筛选后清掉失效的勾选,避免「选中了看不见的行」。 - const visible = new Set(data.items.map((t) => t.id)); - setSelectedRowKeys((prev) => (selectedAllMatching ? prev : prev.filter((k) => visible.has(k)))); } catch { // 忽略轮询失败,下一次定时刷新会继续尝试。 } finally { tasksLoadingRef.current = false; } - }, [batchId, taskPage, taskPageSize, taskStatus, selectedAllMatching]); + }, [batchId, taskPage, taskPageSize, taskStatus]); const hasActiveTasks = useMemo( () => tasks.some((task) => ['pending', 'running'].includes(task.status)), @@ -700,6 +697,8 @@ export default function LoginTasksPage() { sticky rowSelection={{ selectedRowKeys, + // 跨页保留勾选:翻页时不清空,否则用户「选了 10 个翻页就没了」。 + preserveSelectedRowKeys: true, onChange: (keys) => { setSelectedRowKeys(keys as number[]); setSelectedAllMatching(false);