فهرست منبع

解决浏览器在批量导出PDF的数量限制

TonyKang 4 سال پیش
والد
کامیت
129239df10
1فایلهای تغییر یافته به همراه24 افزوده شده و 16 حذف شده
  1. 24 16
      app/public/report/js/rpt_main.js

+ 24 - 16
app/public/report/js/rpt_main.js

@@ -657,6 +657,8 @@ let rptControlObj = {
                         for (const signatureRel of result.signatureRelInfo) {
                             signatureRelArr.push(JSON.parse(signatureRel.rel_content));
                         }
+                        downloadPDFReport(result.data, pageSize, rpt_names, signatureRelArr, result.signatureRelInfo, refRptTplIds, STAGE_AUDIT);
+                        /*
                         for (let idx = 0; idx < result.data.length; idx++) {
                             let pageData = result.data[idx];
                             // if (current_stage_status === 3) {
@@ -676,6 +678,7 @@ let rptControlObj = {
                             // JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx], signatureRelArr);
                             JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx], singleSignatureRelArr, STAGE_AUDIT); // 精确控制签名
                         }
+                        //*/
                     },
                     function(failRst){
                         // closeWaitingView();
@@ -804,6 +807,27 @@ let rptControlObj = {
     }
 };
 
+function downloadPDFReport(pageDataArr, pageSize, rpt_names, signatureRelArr, signatureRelInfo, refRptTplIds, STAGE_AUDIT) {
+    rptControlObj.currentDownloadIdx = 0;
+    const private_download = function() {
+        if (rptControlObj.currentDownloadIdx < pageDataArr.length) {
+            let singleSignatureRelArr = [];
+            for (let rIdx = 0; rIdx < signatureRelInfo.length; rIdx++) {
+                if (signatureRelInfo[rIdx].rpt_id === refRptTplIds[idx]) {
+                    singleSignatureRelArr = signatureRelArr[rIdx]; // 有些报表可能没有签名
+                    break;
+                }
+            }
+            let pageData = pageDataArr[rptControlObj.currentDownloadIdx];
+            let rptName = rpt_names[rptControlObj.currentDownloadIdx];
+            rptControlObj.currentDownloadIdx++;
+            JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rptName, singleSignatureRelArr, STAGE_AUDIT); // 精确控制签名
+            if (rptControlObj.currentDownloadIdx < pageDataArr.length) setTimeout(private_download, 2000);
+        }
+    }
+    private_download();
+}
+
 function downloadReport(urls) {
     //考虑到多个报表下载,一些浏览器(如chrome)不允许一下子下载多个文件,得缓缓处理,统一在这处理
     rptControlObj.currentDownloadUrl = null;
@@ -819,22 +843,6 @@ function downloadReport(urls) {
     private_download();
 }
 
-// function dynamicLoadJs(url, callback) {
-//     let head = document.getElementsByTagName('head')[0];
-//     let script = document.createElement('script');
-//     script.type = 'text/javascript';
-//     script.src = url;
-//     if(callback) {
-//         script.onload = script.onreadystatechange = function () {
-//             if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete"){
-//                 callback();
-//                 script.onload = script.onreadystatechange = null;
-//             }
-//         };
-//     }
-//     head.appendChild(script);
-// }
-
 function dynamicLoadJs(url, type, callback) {
     let head = document.getElementsByTagName('head')[0];
     let script = document.createElement('script');