Browse Source

打印交互方式调整(动态加载草图,不用SessionStorage保存报表数据,用户选择打印时机)

TonyKang 4 years ago
parent
commit
91e5ccaa24

+ 7 - 3
app/controller/report_controller.js

@@ -342,7 +342,9 @@ module.exports = app => {
             // console.log('after role stage!');
             // console.log(roleRel);
             await encodeSignatureDataUri(roleRel, this.app.baseDir);
-            await encodeDummySignatureDataUri(pageRst, this.app.baseDir); // 注意草图数据量问题!
+            if (params.getPicFlag) {
+                await encodeDummySignatureDataUri(pageRst, this.app.baseDir); // 注意草图数据量问题!
+            }
             const stageFlow = await ctx.service.stageAudit.getAuditGroupByListWithOwner(params.stage_id, params.stage_times);
 
             // console.log('encodeSignatureDataUri!');
@@ -448,8 +450,10 @@ module.exports = app => {
             // console.log('roleRel: ');
             // console.log(roleRel);
             await encodeSignatureDataUri(roleRel, this.app.baseDir);
-            for (const pageRst of pageRstArr) {
-                await encodeDummySignatureDataUri(pageRst, this.app.baseDir); // 注意草图数据量问题!
+            if (params.getPicFlag) {
+                for (const pageRst of pageRstArr) {
+                    await encodeDummySignatureDataUri(pageRst, this.app.baseDir); // 注意草图数据量问题!
+                }
             }
             // console.log(pageRstArr);
             ctx.body = { data: pageRstArr, signatureRelInfo: roleRel, stageAudit: stgAudit, waterMarkStr };

+ 1 - 0
app/public/report/js/rpt_main.js

@@ -687,6 +687,7 @@ let rptControlObj = {
             const signatureRelArr = [];
             if (refRptTplIds.length > 0) {
                 let params = rptControlObj.creatCommonExportParam(refRptTplIds);
+                params.getPicFlag = true; //专门针对草图项,只有此项为true,才需要把草图信息带过来,预览及打印动态加载草图 // 纠结:但这样还是解决不了效率问题,得另外想交互方式
                 await rptCustomObj.getCustomSelect(params);
                 delete params.orientation; // 打印时有勾选的话,不需要提供方向
                 $.bootstrapLoading.start();

+ 58 - 0
app/public/report/js/rpt_preview_common.js

@@ -4,6 +4,59 @@
 
 let G_OFFSET_X = 0, G_OFFSET_Y = 0;
 function printPageLoading() {
+    let params = JSON.parse(sessionStorage.report_params);
+    let _current_stage_status = parseInt(sessionStorage.current_stage_status);
+    let closeWaterMark = parseInt(sessionStorage.closeWaterMark);
+    let scaleFactor = 1;
+    CommonAjax.postXsrfEx("/tender/report_api/getMultiReports", params, 60000, true, getCookie('csrfToken'),
+        function(result){
+            const signatureRelArr = [];
+            // sessionStorage.waterMarkStr = result.waterMarkStr;
+            if (params.needWaterMark) sessionStorage.waterMarkStr = result.waterMarkStr;
+            for (const signatureRel of result.signatureRelInfo) {
+                signatureRelArr.push(JSON.parse(signatureRel.rel_content));
+            }
+            // if (params.needWaterMark) COMMON_WATER_MARK_PIC_DATA = result.waterMarkStr;
+            for (let idx = 0; idx < result.data.length; idx++) {
+                let singleSignatureRelArr = [];
+                for (let rIdx = 0; rIdx < result.signatureRelInfo.length; rIdx++) {
+                    if (result.signatureRelInfo[rIdx].rpt_id === refRptTplIds[idx]) {
+                        singleSignatureRelArr = signatureRelArr[rIdx]; // 有些报表可能没有签名
+                        break;
+                    }
+                }
+                if (_current_stage_status === 3) {
+                    rptSignatureHelper.mergeSignDate(result.data[idx], singleSignatureRelArr, false);
+                    rptSignatureHelper.mergeSignature(result.data[idx], singleSignatureRelArr);
+                    rptSignatureHelper.mergeSignAudit(result.data[idx], singleSignatureRelArr, result.stageAudit);
+                }
+            }
+            let multiRptData = result.data;
+            for (let idx = 0; idx < multiRptData.length; idx++) {
+                let pageData = multiRptData[idx];
+                if (idx === 0) {
+                    $(document).attr("title", pageData[JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
+                }
+                let orgPixelSize = getPixelSize(pageData);
+                let actArea = getActualArea(pageData);
+                let svgArr = rptPrintHelper.buildSvgArr(pageData, actArea, G_OFFSET_X, G_OFFSET_Y, closeWaterMark);
+                let orientation = "纵向";
+                showPreviewData(svgArr, actArea, scaleFactor, sessionStorage.pageSize, orientation, orgPixelSize);
+            }
+            // window.print();
+        },
+        function(failRst){
+            // sessionStorage.currentPageData = null;
+            console.log(failRst);
+        },
+        function(exceptionRst){
+            // sessionStorage.currentPageData = null;
+            console.log(exceptionRst);
+        }
+    );
+}
+
+function printPageLoading_bk() {
     if (sessionStorage.multiRptsData) {
         let multiRptData = JSON.parse(sessionStorage.multiRptsData);
         let scaleFactor = parseInt(sessionStorage.scaleFactor);
@@ -127,3 +180,8 @@ function printPageClosing() {
     //
 }
 
+function printPage() {
+    $("#print_preview_div")[0].style.display = 'none';
+    window.print();
+}
+

+ 28 - 0
app/public/report/js/rpt_print.js

@@ -18,6 +18,34 @@ let rptPrintHelper = {
             } else {
                 params.needWaterMark = false;
             }
+            delete sessionStorage.currentPageData; //删除
+            sessionStorage.report_params = JSON.stringify(params);
+            sessionStorage.current_stage_status = current_stage_status;
+            sessionStorage.closeWaterMark = getCloseWatermark();
+            sessionStorage.pageSize = rptControlObj.getCurrentPageSize();
+            sessionStorage.waterMarkStr = COMMON_WATER_MARK_PIC_DATA;
+            if (sessionStorage.pageSize === 'A3') {
+                window.open('/printReport/A3');
+            } else {
+                window.open('/printReport/A4');
+            }
+        }
+    },
+    preview_bk: async function () {
+        if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
+            let refRptTplIds = [];
+            rptControlObj.getTplIdsCommon(refRptTplIds, null);
+            let params = rptControlObj.creatCommonExportParam(refRptTplIds);
+            await rptCustomObj.getCustomSelect(params);
+            let chkNodes = zTreeOprObj.treeObj.getCheckedNodes(true);
+            if (chkNodes.length > 0) {
+                delete params.orientation; // 打印时有勾选的话,不需要提供方向
+            }
+            if (COMMON_WATER_MARK_PIC_DATA === null || COMMON_WATER_MARK_PIC_DATA === '') {
+                params.needWaterMark = true;
+            } else {
+                params.needWaterMark = false;
+            }
             CommonAjax.postXsrfEx("/tender/report_api/getMultiReports", params, 60000, true, getCookie('csrfToken'),
                 function(result){
                     const signatureRelArr = [];

+ 12 - 0
app/view/report/rpt_print.ejs

@@ -4,10 +4,16 @@
     <meta charset="UTF-8">
     <title></title>
     <script src="/public/js/jquery/jquery-3.2.1.min.js"></script>
+    <script type="text/javascript" src="/public/js/common_ajax.js"></script>
     <script type="text/javascript" src="/public/report/js/jpc_output_value_define.js"></script>
     <script type="text/javascript" src="/public/report/js/jpc_output.js"></script>
     <script type="text/javascript" src="/public/report/js/rpt_print.js"></script>
+    <script type="text/javascript" src="/public/report/js/rpt_signature.js"></script>
     <script type="text/javascript" src="/public/report/js/rpt_preview_common.js"></script>
+    <!--
+    <link rel="stylesheet" href="/public/css/bootstrap/bootstrap.min.css">
+    -->
+
     <link rel="shortcut icon" href="/public/images/favicon.ico">
 </head>
 <style type="text/css">
@@ -51,6 +57,12 @@
 -->
 <body onload="printPageLoading()" onbeforeunload="printPageClosing()">
     <canvas id="chkCanvas" style="display:none"></canvas>
+    <div class="panel-body" id="print_preview_div" style="display:block">
+        <button class="btn btn-outline-primary btn-sm" type="button" onclick="printPage()">
+            <i class="fa fa-print"></i>
+            打印 <span id="checkCountPrint" class="badge badge-primary"></span>
+        </button>
+    </div>
 </body>
 <SCRIPT type="text/javascript">
 </SCRIPT>

+ 8 - 0
app/view/report/rpt_printA3.ejs

@@ -4,9 +4,11 @@
     <meta charset="UTF-8">
     <title></title>
     <script src="/public/js/jquery/jquery-3.2.1.min.js"></script>
+    <script type="text/javascript" src="/public/js/common_ajax.js"></script>
     <script type="text/javascript" src="/public/report/js/jpc_output_value_define.js"></script>
     <script type="text/javascript" src="/public/report/js/jpc_output.js"></script>
     <script type="text/javascript" src="/public/report/js/rpt_print.js"></script>
+    <script type="text/javascript" src="/public/report/js/rpt_signature.js"></script>
     <script type="text/javascript" src="/public/report/js/rpt_preview_common.js"></script>
     <link rel="shortcut icon" href="/public/images/favicon.ico">
 </head>
@@ -35,6 +37,12 @@
 </style>
 <body onload="printPageLoading()" onbeforeunload="printPageClosing()">
     <canvas id="chkCanvas" style="display:none"></canvas>
+    <div class="panel-body" id="print_preview_div" style="display:block">
+        <button class="btn btn-outline-primary btn-sm" type="button" onclick="printPage()">
+            <i class="fa fa-print"></i>
+            打印 <span id="checkCountPrint" class="badge badge-primary"></span>
+        </button>
+    </div>
 </body>
 <SCRIPT type="text/javascript">
 </SCRIPT>