|
|
@ -2188,6 +2188,20 @@ |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
/* 此方法为异步轮询 用于导出数十万至百万数据量的 Excel 文件 以下为整体思路与流程: |
|
|
|
|
|
* 1.前端发起“启动导出”请求 |
|
|
|
|
|
* 请求返回一个唯一的 jobId,代表本次导出任务。 |
|
|
|
|
|
* |
|
|
|
|
|
* 2.后端异步执行导出 |
|
|
|
|
|
* 后端收到启动请求后,立刻返回 jobId,并把真正的导出逻辑放到异步线程里,写入服务器临时目录(本地磁盘、NFS、云存储等)。 |
|
|
|
|
|
* |
|
|
|
|
|
* 3.前端定时轮询任务状态 |
|
|
|
|
|
* 每隔 2 秒向后端请求 exportStatus?jobId=...,直到状态为 SUCCESS 或 FAILED。 |
|
|
|
|
|
* |
|
|
|
|
|
* 4.前端获取并下载文件 |
|
|
|
|
|
* 当 exportStatus 返回 SUCCESS 且给出下载 URL 后,前端用 axios 再次请求把文件拉下来,然后触发浏览器下载。 |
|
|
|
|
|
* 注:该方法的初衷是为了避免正常普通导出大数据量时同时sql较为复杂时,前端请求超时、失效的问题。 |
|
|
|
|
|
*/ |
|
|
async handleAsyncExport() { |
|
|
async handleAsyncExport() { |
|
|
// 1. 一开始打开 loading |
|
|
// 1. 一开始打开 loading |
|
|
this.importLoading = true; |
|
|
this.importLoading = true; |
|
|
@ -2247,7 +2261,7 @@ |
|
|
// 出错时也关 loading |
|
|
// 出错时也关 loading |
|
|
this.importLoading = false; |
|
|
this.importLoading = false; |
|
|
} |
|
|
} |
|
|
}, 2000); |
|
|
|
|
|
|
|
|
}, 2000); // 2秒轮询一次 |
|
|
|
|
|
|
|
|
} catch (e) { |
|
|
} catch (e) { |
|
|
console.error('启动异步导出失败:', e); |
|
|
console.error('启动异步导出失败:', e); |
|
|
|