Commit 8e389145 authored by Data Governance Dev's avatar Data Governance Dev

feat(web3): 分页查询 orchestrator + 中断按钮 + 进度 + appendMode 行追加

把单次同步 runQuery 替换成分页 + 并发 worker 模式:

DataQualityView.vue 重写查询逻辑:
  onQuery()
    1) POST /start → COUNT + 编译规则 + 拿 session_id + total_pages
    2) PAGE_CONCURRENCY=3 个 worker 并发抢 queue([1..total_pages]),
       每个 worker /page 拉到 → appendPage() 按页号升序拼进 rows
    3) 收尾聚合 lastResult + toast

  onCancel()
    - /cancel 摘 session(best-effort)
    - AbortController.abort() 让在飞的 fetch 立即 reject
    - resetQueryStatus() 清空 sessionId / rows / lastResult / queryError

  进度展示:task-info-bar 顶部「查询中 N/M 页 · 命中 K 条」
  onBeforeUnmount:cancel + abort,避免组件销毁后 fetch 还在飞

ResultTable.vue 新增 appendMode prop:
  watch(() => props.rows.length, () => {
    if (!props.appendMode) currentPage.value = 1
  })
  默认 false 保持原行为(rows 替换 → 回第 1 页);
  append 模式下 rows 增量追加不重置页码

ResultTable 新增 row-key 模式:父组件传 rowKey 函数,
用后端注入的 __row_index 做稳定 key(append 模式下保证 Vue DOM 复用正确)

PAGE_SIZE = 500(与后端默认对齐)

无单测(前端无测试基础设施,手动 e2e 验证见 work-logs/2026-08-21.md)
parent 5fc62e5b
......@@ -143,6 +143,9 @@ const props = defineProps({
defaultPageSize: { type: Number, default: 5 },
// 行 key:默认用 index;父组件可传 (row, i) => string 走更稳定的 key(如 row.id)
rowKey: { type: Function, default: (_row, i) => i },
// 分页 append 模式(2026-08-21):默认 false(rows 整体替换 → length 变化回到第 1 页)
// 设为 true 时 rows.length 变化不重置页码 —— 用于「分页拉取 + 增量追加」场景
appendMode: { type: Boolean, default: false },
})
const emit = defineEmits(['page-change'])
......@@ -171,7 +174,10 @@ const rangeStart = computed(() => props.rows.length === 0 ? 0 : (currentPage.val
const rangeEnd = computed(() => Math.min(currentPage.value * pageSize.value, props.rows.length))
// rows 长度变化 → 回到第 1 页(避免翻页中途被切走,停在空页)
watch(() => props.rows.length, () => { currentPage.value = 1 })
// 2026-08-21:append 模式下不重置 —— 新页到达时用户已经看过的页别被强制拉回首屏
watch(() => props.rows.length, () => {
if (!props.appendMode) currentPage.value = 1
})
function onPageSizeChange() {
currentPage.value = 1
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment