spring
昨天 d48f5076b64aeacad45c0d2cf5ad2188256948f9
src/views/basicData/product/ProductSelectDialog.vue
@@ -163,19 +163,40 @@
  loading.value = true;
  try {
    multipleSelection.value = []; // 翻页/搜索后清空选择更符合预期
    const res: any = await productModelList({
    const queryParams = {
      parentName: query.parentName.trim(),
      model: query.model.trim(),
      current: page.pageNum,
      size: page.pageSize,
    });
    const records = (res?.records || []) as any[];
    };
    const exclude = (props.excludeParentNames || []).filter(Boolean);
    // 先拉取全部数据,再统一过滤,避免“只过滤到当前页”导致漏数据
    const allRecords: any[] = [];
    const fetchSize = 200;
    let current = 1;
    let serverTotal = 0;
    while (true) {
      const res: any = await productModelList({
        ...queryParams,
        current,
        size: fetchSize,
      });
      const records = (res?.records || []) as any[];
      serverTotal = Number(res?.total || 0);
      allRecords.push(...records);
      if (records.length === 0 || allRecords.length >= serverTotal) {
        break;
      }
      current += 1;
    }
    const filtered = exclude.length
      ? records.filter((r) => !exclude.includes(String(r?.parentName ?? "")))
      : records;
    tableData.value = filtered;
    total.value = exclude.length ? filtered.length : res.total;
      ? allRecords.filter((r) => !exclude.includes(String(r?.parentName ?? "")))
      : allRecords;
    total.value = filtered.length;
    const start = (page.pageNum - 1) * page.pageSize;
    const end = start + page.pageSize;
    tableData.value = filtered.slice(start, end);
  } finally {
    loading.value = false;
  }