From 7293d758f133926e6590387057cbb55c99f5aad8 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Sat, 3 Oct 2026 10:39:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(login):=20=E5=8B=BE=E9=80=89=E8=B7=A8?= =?UTF-8?q?=E9=A1=B5=E4=BF=9D=E7=95=99=EF=BC=8C=E5=B9=B6=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=20loadTasks=20=E7=9A=84=E5=A4=9A=E4=BD=99=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 两个自己引入的问题: - loadTasks 依赖 selectedAllMatching 会让每次翻页重建回调,进而触发 上面的 effect 重新加载标签(多余请求); - 翻页静默清空勾选会让人困惑(「选了 10 个翻页就没了」),改为 preserveSelectedRowKeys 跨页保留,删除数量在按钮上明确显示。 --- web/frontend/src/pages/LoginTasksPage.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) 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);