feat(admin-web): 批量下载支持断点续传
- 下载前检查文件是否已存在 - 已存在的文件自动跳过 - 显示跳过数量和新下载数量 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
b2bace1687
commit
cd1d16fc7f
|
|
@ -224,13 +224,27 @@ export default function ContractsPage() {
|
|||
|
||||
toast.info(`开始下载 ${total} 份合同...`);
|
||||
|
||||
// 第三步:逐个下载合同到用户选择的目录
|
||||
// 第三步:逐个下载合同到用户选择的目录(支持断点续传)
|
||||
let downloaded = 0;
|
||||
let skipped = 0;
|
||||
for (const contract of contracts) {
|
||||
try {
|
||||
// 生成文件名
|
||||
const fileName = `${contract.contractNo}_${contract.userRealName || '未实名'}_${contract.treeCount}棵.pdf`;
|
||||
|
||||
// 检查文件是否已存在(断点续传)
|
||||
try {
|
||||
await dirHandle.getFileHandle(fileName, { create: false });
|
||||
// 文件已存在,跳过
|
||||
skipped++;
|
||||
downloaded++;
|
||||
setDownloadedCount(downloaded);
|
||||
setDownloadProgress(Math.round((downloaded / total) * 100));
|
||||
continue;
|
||||
} catch {
|
||||
// 文件不存在,继续下载
|
||||
}
|
||||
|
||||
// 下载 PDF
|
||||
const downloadUrl = contractService.getDownloadUrl(contract.orderNo);
|
||||
const response = await fetch(downloadUrl);
|
||||
|
|
@ -255,7 +269,11 @@ export default function ContractsPage() {
|
|||
}
|
||||
}
|
||||
|
||||
toast.success(`下载完成!成功 ${downloaded}/${total} 份`);
|
||||
if (skipped > 0) {
|
||||
toast.success(`下载完成!新下载 ${downloaded - skipped} 份,跳过已存在 ${skipped} 份`);
|
||||
} else {
|
||||
toast.success(`下载完成!成功 ${downloaded}/${total} 份`);
|
||||
}
|
||||
|
||||
// 保存当前时间作为最后下载时间
|
||||
const now = new Date().toISOString();
|
||||
|
|
@ -327,11 +345,25 @@ export default function ContractsPage() {
|
|||
|
||||
toast.info(`开始下载 ${total} 份新增合同...`);
|
||||
|
||||
// 第三步:逐个下载合同
|
||||
// 第三步:逐个下载合同(支持断点续传)
|
||||
let downloaded = 0;
|
||||
let skipped = 0;
|
||||
for (const contract of contracts) {
|
||||
try {
|
||||
const fileName = `${contract.contractNo}_${contract.userRealName || '未实名'}_${contract.treeCount}棵.pdf`;
|
||||
|
||||
// 检查文件是否已存在(断点续传)
|
||||
try {
|
||||
await dirHandle.getFileHandle(fileName, { create: false });
|
||||
skipped++;
|
||||
downloaded++;
|
||||
setDownloadedCount(downloaded);
|
||||
setDownloadProgress(Math.round((downloaded / total) * 100));
|
||||
continue;
|
||||
} catch {
|
||||
// 文件不存在,继续下载
|
||||
}
|
||||
|
||||
const downloadUrl = contractService.getDownloadUrl(contract.orderNo);
|
||||
const response = await fetch(downloadUrl);
|
||||
if (!response.ok) continue;
|
||||
|
|
@ -350,7 +382,11 @@ export default function ContractsPage() {
|
|||
}
|
||||
}
|
||||
|
||||
toast.success(`下载完成!成功 ${downloaded}/${total} 份`);
|
||||
if (skipped > 0) {
|
||||
toast.success(`下载完成!新下载 ${downloaded - skipped} 份,跳过已存在 ${skipped} 份`);
|
||||
} else {
|
||||
toast.success(`下载完成!成功 ${downloaded}/${total} 份`);
|
||||
}
|
||||
|
||||
// 更新最后下载时间
|
||||
const now = new Date().toISOString();
|
||||
|
|
|
|||
Loading…
Reference in New Issue