Forráskód Böngészése

优化(水印)

TonyKang 4 éve
szülő
commit
ff5c0b8847

+ 48 - 3
app/controller/report_controller.js

@@ -326,9 +326,13 @@ module.exports = app => {
             for (const page of pageRst.items) {
                 page[JV.PROP_WATERMARK_CELLS] = [];
             }
+            let waterMarkStr = null;
             if (params.stage_status !== 3 && params.closeWatermark === 0) {
                 // 加水印
                 fillWaterMark([pageRst]);
+                if (params.needWaterMark) {
+                    waterMarkStr = await getWatermarkPicData(pageRst, this.app.baseDir);
+                }
             }
             // console.log(pageRst);
             // const roleRel = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_tpl_id)) : [];
@@ -351,6 +355,7 @@ module.exports = app => {
                 customDefine: rptTpl[JV.NODE_CUSTOM_DEFINE],
                 stageFlow,
                 customSelect,
+                waterMarkStr,
             };
         }
 
@@ -426,9 +431,13 @@ module.exports = app => {
                     page[JV.PROP_WATERMARK_CELLS] = [];
                 }
             }
+            let waterMarkStr = null;
             if (params.stage_status !== 3 && params.closeWatermark === 0) {
                 // 加水印
                 fillWaterMark(pageRstArr);
+                if (params.needWaterMark) {
+                    waterMarkStr = await getWatermarkPicData(pageRstArr[0], this.app.baseDir);
+                }
             }
             const stgAudit = await ctx.service.stageAudit.getStageAudit(params.stage_id, params.stage_times);
             const roleRel = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_ids, params.stage_id)) : [];
@@ -443,7 +452,7 @@ module.exports = app => {
             //     await encodeDummySignatureDataUri(pageRst, this.app.baseDir);
             // }
             // console.log(pageRstArr);
-            ctx.body = { data: pageRstArr, signatureRelInfo: roleRel, stageAudit: stgAudit };
+            ctx.body = { data: pageRstArr, signatureRelInfo: roleRel, stageAudit: stgAudit, waterMarkStr };
             ctx.status = 201;
         }
 
@@ -492,10 +501,14 @@ module.exports = app => {
                     page[JV.PROP_WATERMARK_CELLS] = [];
                 }
             }
+            let waterMarkStr = null;
             if (params.stage_status !== 3 && params.closeWatermark === 0) {
             // if (params.stage_status !== 3 && params.closeWatermark === 0 && params.option === JV.PAGING_OPTION_NORMAL) {
                 // 加水印(注意:还得看用户设置是否需要加水印)
                 fillWaterMark(pageRstArr);
+                if (params.needWaterMark) {
+                    waterMarkStr = await getWatermarkPicData(pageRstArr[0], this.app.baseDir);
+                }
             }
 
             await this.ctx.helper.recursiveMkdirSync(this.app.baseDir + '/app/public/download');
@@ -519,7 +532,7 @@ module.exports = app => {
             }
             // fsUtil.writeObjToFile(pageRstArr, 'D:/GitHome/temp/计量导出pageArr.js');
             const uuidRst = await Promise.all(runnableRst);
-            ctx.body = { data: uuidRst };
+            ctx.body = { data: uuidRst, waterMarkStr };
             ctx.status = 201;
         }
 
@@ -548,10 +561,14 @@ module.exports = app => {
                     page[JV.PROP_WATERMARK_CELLS] = [];
                 }
             }
+            let waterMarkStr = null;
             if (params.stage_status !== 3 && params.closeWatermark === 0) {
             // if (params.stage_status !== 3 && params.closeWatermark === 0 && params.option === JV.PAGING_OPTION_NORMAL) {
                 // 加水印
                 fillWaterMark(pageRstArr);
+                if (params.needWaterMark) {
+                    waterMarkStr = await getWatermarkPicData(pageRstArr[0], this.app.baseDir);
+                }
             }
             await this.ctx.helper.recursiveMkdirSync(this.app.baseDir + '/app/public/download');
             const runnableRst = [];
@@ -598,7 +615,7 @@ module.exports = app => {
             }
             runnableRst.push(getExcelByPageData(pageRstArr, params.rptName, rptRoleRelArr));
             const uuidRst = await Promise.all(runnableRst);
-            ctx.body = { data: uuidRst };
+            ctx.body = { data: uuidRst, waterMarkStr };
             ctx.status = 201;
         }
 
@@ -1269,6 +1286,34 @@ async function encodeDummySignatureDataUri(pageRst, baseDir) {
     }
 }
 
+async function getWatermarkPicData(pageRst, baseDir) {
+    let rst = '';
+    if (pageRst) {
+        for (const page of pageRst.items) {
+            for (const signature of page[JV.PROP_WATERMARK_CELLS]) {
+                if (signature.path !== '') {
+                    const filePath = baseDir + '/app' + signature.path;
+                    try {
+                        const res = await isFileExisted(filePath);
+                        if (res) {
+                            const bData = fs.readFileSync(filePath);
+                            const base64Str = bData.toString('base64');
+                            rst = 'data:image/png;base64,' + base64Str;
+                            break;
+                        } else {
+                            console.log('文件不存在:' + filePath);
+                        }
+                    } catch (err) {
+                        console.error(err);
+                    }
+                }
+                if (rst !== null) break;
+            }
+        }
+    }
+    return rst;
+}
+
 async function createExportRequestJob(ctx) {
     const params = JSON.parse(ctx.request.body.params);
     // const uuidArr = params.uuidArr;

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

@@ -475,6 +475,7 @@ let JpcCanvasOutput = {
                 if (page.watermark_cells && page.watermark_cells.length > 0) {
                     for (let k = 0; k < page.watermark_cells.length; k++) {
                         let cell = page.watermark_cells[k];
+                        cell.pic = COMMON_WATER_MARK_PIC_DATA;
                         private_drawSignatureCell(cell, fonts, styles, controls, newPageMergeBand);
                     }
                 }

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

@@ -103,6 +103,7 @@ let JpcJsPDFHelper = {
                 }
                 if (PAGE_SHOW['closeWatermark'] === 0) {
                     for (let cell of page.watermark_cells) {
+                        cell.pic = COMMON_WATER_MARK_PIC_DATA;
                         _drawWatermark(doc, ctx, cell, controls);
                     }
                 }

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

@@ -353,11 +353,17 @@ let zTreeOprObj = {
     },
     requestNormalReport: function (params) {
         let me = zTreeOprObj;
+        if (COMMON_WATER_MARK_PIC_DATA === null || COMMON_WATER_MARK_PIC_DATA === '') {
+            params.needWaterMark = true;
+        } else {
+            params.needWaterMark = false;
+        }
         $.bootstrapLoading.start();
         CommonAjax.postXsrfEx("/tender/report_api/getReport", params, 300000, true, getCookie('csrfToken'),
             function(result){
                 $.bootstrapLoading.end();
                 let pageRst = result.data;
+                if (params.needWaterMark) COMMON_WATER_MARK_PIC_DATA = result.waterMarkStr;
                 STAGE_AUDIT = result.stageAudit;
                 STAGE_AUDIT_ORG = result.stageAuditOrg;
                 STAGE_FLOW = result.stageFlow;
@@ -684,10 +690,16 @@ let rptControlObj = {
                 await rptCustomObj.getCustomSelect(params);
                 delete params.orientation; // 打印时有勾选的话,不需要提供方向
                 $.bootstrapLoading.start();
+                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, WAIT_TIME_EXPORT, true, getCookie('csrfToken'),
                     function(result){
                         // closeWaitingView();
                         $.bootstrapLoading.end();
+                        if (params.needWaterMark) COMMON_WATER_MARK_PIC_DATA = result.waterMarkStr;
                         STAGE_AUDIT = result.stageAudit;
                         let pageSize = rptControlObj.getCurrentPageSize();
                         for (const signatureRel of result.signatureRelInfo) {

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

@@ -13,12 +13,18 @@ let rptPrintHelper = {
             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 = [];
                     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++) {
@@ -58,6 +64,7 @@ let rptPrintHelper = {
                     sessionStorage.orientation = rptControlObj.getCurrentOrientation();
                     sessionStorage.scaleFactor = 1;
                     sessionStorage.closeWaterMark = getCloseWatermark();
+                    sessionStorage.waterMarkStr = COMMON_WATER_MARK_PIC_DATA;
                     if (sessionStorage.pageSize === 'A3') {
                         window.open('/printReport/A3');
                     } else {
@@ -118,6 +125,7 @@ let rptPrintHelper = {
             }
             if (closeWaterMark === 0) {
                 for (let cell of page.watermark_cells) {
+                    cell.pic = sessionStorage.waterMarkStr;
                     svgPageArr.push(buildSignatureCellSvg(cell, styles, controls, page[JV.PROP_PAGE_MERGE_BORDER], pagesData[JV.BAND_PROP_MERGE_BAND],
                         offsetX - actAreaOffsetX, offsetY - actAreaOffsetY, adjustY, canvas, isHtoV, pixelSize, actAreaArr[idx]));
                 }

+ 7 - 1
app/view/report/index.ejs

@@ -235,7 +235,9 @@
         // rptCustomObj.initTenderTreeForCross(tenders, category);
     });
 </script>
-
+<script type="text/javascript">
+    let COMMON_WATER_MARK_PIC_DATA = null;
+</script>
 <script type="text/javascript">  autoFlashHeight();</script>
 <script type="text/javascript" src="/public/jspdf/jspdf.min.js"></script>
 <script src="/public/js/datepicker/datepicker.min.js"></script>
@@ -263,6 +265,10 @@
 <script type="text/javascript" src="/public/report/js/rpt_signature.js"></script>
 <script type="text/javascript" src="/public/report/js/rpt_jspdf.js"></script>
 
+<!--
+-->
+<script type="text/javascript" src="/public/report/js/rpt_custom.js"></script>
+
 
 <script type="text/javascript">
     let TOP_TREE_NODES = <%- rpt_tpl_data %>;