| | |
| | | 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 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[]; |
| | | const exclude = (props.excludeParentNames || []).filter(Boolean); |
| | | 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; |
| | | } |