From 9a153819c3366aaa7d64801f34c1f22ef797f7dc Mon Sep 17 00:00:00 2001 From: jiayang yue Date: Fri, 16 May 2025 02:22:08 +0800 Subject: [PATCH] =?UTF-8?q?2025.05.15=20=E7=89=A9=E6=96=99=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E8=AE=BE=E7=BD=AE=20=E5=AF=BC=E5=87=BA=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20=E5=AF=BC=E5=87=BA=E6=89=80=E6=9C=89=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/modules/qc/qcPartAttribute.vue | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/views/modules/qc/qcPartAttribute.vue b/src/views/modules/qc/qcPartAttribute.vue index 11c2b94..8e9a699 100644 --- a/src/views/modules/qc/qcPartAttribute.vue +++ b/src/views/modules/qc/qcPartAttribute.vue @@ -2188,6 +2188,20 @@ } }, + /* 此方法为异步轮询 用于导出数十万至百万数据量的 Excel 文件 以下为整体思路与流程: + * 1.前端发起“启动导出”请求 + * 请求返回一个唯一的 jobId,代表本次导出任务。 + * + * 2.后端异步执行导出 + * 后端收到启动请求后,立刻返回 jobId,并把真正的导出逻辑放到异步线程里,写入服务器临时目录(本地磁盘、NFS、云存储等)。 + * + * 3.前端定时轮询任务状态 + * 每隔 2 秒向后端请求 exportStatus?jobId=...,直到状态为 SUCCESS 或 FAILED。 + * + * 4.前端获取并下载文件 + * 当 exportStatus 返回 SUCCESS 且给出下载 URL 后,前端用 axios 再次请求把文件拉下来,然后触发浏览器下载。 + * 注:该方法的初衷是为了避免正常普通导出大数据量时同时sql较为复杂时,前端请求超时、失效的问题。 + */ async handleAsyncExport() { // 1. 一开始打开 loading this.importLoading = true; @@ -2247,7 +2261,7 @@ // 出错时也关 loading this.importLoading = false; } - }, 2000); + }, 2000); // 2秒轮询一次 } catch (e) { console.error('启动异步导出失败:', e);