Skip to content

feat(frontend): select all documents across pages - #2590

Closed
LiangYuHai wants to merge 1 commit into
Tencent:mainfrom
LiangYuHai:feat/select-all-across-pages
Closed

feat(frontend): select all documents across pages#2590
LiangYuHai wants to merge 1 commit into
Tencent:mainfrom
LiangYuHai:feat/select-all-across-pages

Conversation

@LiangYuHai

Copy link
Copy Markdown

问题

文档列表采用无限滚动加载,cardList 只保存已加载的窗口。
表头"全选"只能选中已加载的部分,想要选中靠后的文档,
用户必须一直向下滚动直到所有页面加载完成,操作繁琐且容易遗漏。

改动

  • 勾选全选时,按当前筛选条件从后端逐页拉取全部命中的文档 id
    (page_size 取后端上限 1000),与列表筛选条件保持一致。
  • 拉取期间批量操作栏显示 loading 指示,并禁用删除/重建/标签/
    移动等操作按钮,避免对尚未拉全的选择集执行操作。
  • 通过 generation 计数处理竞态:拉取过程中用户取消全选、
    切换筛选条件或知识库时,丢弃本次拉取结果。
  • 跨页全选激活期间,列表刷新不再按可见项裁剪选择集
    (选择集本来就包含未加载窗口内的 id)。

关联

本功能让选中超过 200 个文档变得容易,依赖配套的批量提交修复:
https://github.com/Tencent/WeKnora/pull/2588(按 200 分批提交,避免后端 400)。
建议两个 PR 一并合入。

测试

  • 知识库文档超过一屏时勾选全选:自动拉取全部文档 id,
    批量操作栏计数随拉取增长直至总数。
  • 拉取过程中取消全选/切换筛选:选择集被正确清空,无残留。

The document list loads incrementally via infinite scroll, so the header
select-all checkbox could only select the loaded slice; reaching
documents further down required scrolling until every page had loaded.

Fetch all ids matching the current filters page by page (page_size
1000, the backend maximum) when select-all is checked. While fetching,
the batch action bar shows a loading indicator and disables its action
buttons so operations don't run on an incomplete selection. Cancelling
select-all, switching filters or knowledge bases mid-fetch discards
the in-flight result via a generation counter, and the selection is no
longer pruned against the loaded window while cross-page select-all is
active.
@lyingbug

Copy link
Copy Markdown
Collaborator

我不认为循环遍历全部分页是一个正确的方式

@LiangYuHai

Copy link
Copy Markdown
Author

同意,前端循环翻页拉全量 ID 不是理想方案,是在现有「批量接口只收 ids、且单次 ≤200」约束下的过渡实现。

更干净的方向我理解有两类:

1、轻量 ID 接口:例如按当前筛选一次性(或 cursor)只返回 id 列表,前端仍走现有 batch-by-ids;
2、服务端按筛选批量:batch-delete / batch-reparse 支持 select_all + filters(或等价语义),前端全选只存「匹配当前条件」,不再枚举 ID。

你这边是更倾向 1 还是 2?若认可其中一条,我可以按那个方向改;若暂时不想动后端,这个 frontend-only PR 也可以先关掉或标成 draft。

另外,#2588 是在现有 ids 契约下按 200 分片,避免超限 400,和「是否循环分页全选」是正交的。

@lyingbug

Copy link
Copy Markdown
Collaborator

倾向于2,request中新加一个标识字段,让后端来处理

@LiangYuHai

Copy link
Copy Markdown
Author

已经按方案2完善“全选”+“筛选”功能: #2685

@LiangYuHai LiangYuHai closed this Aug 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants