瀏覽代碼

导出excel开放签名 + 水印

TonyKang 4 年之前
父節點
當前提交
d31bd23c4d

+ 17 - 2
app/controller/report_controller.js

@@ -280,7 +280,7 @@ module.exports = app => {
             for (const page of pageRst.items) {
                 page[JV.PROP_WATERMARK_CELLS] = [];
             }
-            if (params.stage_status !== 3) {
+            if (params.stage_status !== 3 && params.closeWatermark === 0) {
                 // 加水印
                 fillWaterMark([pageRst]);
             }
@@ -380,7 +380,7 @@ module.exports = app => {
                     page[JV.PROP_WATERMARK_CELLS] = [];
                 }
             }
-            if (params.stage_status !== 3) {
+            if (params.stage_status !== 3 && params.closeWatermark === 0) {
                 // 加水印
                 fillWaterMark(pageRstArr);
             }
@@ -435,6 +435,12 @@ module.exports = app => {
             const roleRelArr = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_ids, params.stage_id)) : [];
             // const roleRel = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_tpl_id)) : [];
             const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
+            // console.log('params.stage_status: ' + params.stage_status);
+            if (params.stage_status !== 3 && params.closeWatermark === 0) {
+                // 加水印(注意:还得看用户设置是否需要加水印)
+                fillWaterMark(pageRstArr);
+            }
+
             await this.ctx.helper.recursiveMkdirSync(this.app.baseDir + '/app/public/download');
 
             const runnableRst = [];
@@ -472,6 +478,15 @@ module.exports = app => {
             }
             const roleRelArr = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_ids, params.stage_id)) : [];
             const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
+            for (const pageRst of pageRstArr) {
+                for (const page of pageRst.items) {
+                    page[JV.PROP_WATERMARK_CELLS] = [];
+                }
+            }
+            if (params.stage_status !== 3 && params.closeWatermark === 0) {
+                // 加水印
+                fillWaterMark(pageRstArr);
+            }
             await this.ctx.helper.recursiveMkdirSync(this.app.baseDir + '/app/public/download');
             const runnableRst = [];
             let rptRoleRelArr = [];

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

@@ -537,6 +537,7 @@ let rptControlObj = {
         rst.stage_times = getStageTimes();
         rst.material_order = getMaterialOrder();
         rst.custCfg = CUST_CFG;
+        rst.closeWatermark = rptControlObj.getCloseWatermark();
 
         return rst;
     },

+ 48 - 5
app/reports/util/rpt_excel_util.js

@@ -502,6 +502,18 @@ function preAnalyzePos(pageData, sheetData, xPos, yPos, yMultiPos) {
             cell = theShtData[JV.PROP_SIGNATURE_AUDIT_CELLS][i];
             private_set_cell_pos(cell, theXPos, theYPos);
         }
+        for (let i = 0; i < theShtData[JV.PROP_WATERMARK_CELLS].length; i++) {
+            cell = theShtData[JV.PROP_WATERMARK_CELLS][i];
+            // private_set_cell_pos(cell, theXPos, theYPos);
+            let cellControl;
+            if (typeof cell[JV.PROP_CONTROL] === 'string') {
+                cellControl = pageData[JV.NODE_CONTROL_COLLECTION][cell[JV.PROP_CONTROL]];
+            } else {
+                cellControl = cell[JV.PROP_CONTROL];
+            }
+            const area = getProperSignatureArea(cell, cellControl);
+            private_set_cell_pos2(area, theXPos, theYPos);
+        }
     };
     xPos.push(0);
     if (sheetData) {
@@ -1129,6 +1141,12 @@ function writeDrawing(pageData, sheetData, subSignKeyArr) {
                 startPicIdx++;
             }
         }
+        for (const sCell of sheetData[JV.PROP_WATERMARK_CELLS]) {
+            if (subSignKeyArr.indexOf(sCell.signature_name) >= 0) {
+                private_setSheetDrawingCellData(sCell, yPos, startPicIdx, 0);
+                startPicIdx++;
+            }
+        }
     } else {
         // total data in one sheet
         let rowOffset = 0;
@@ -1142,6 +1160,12 @@ function writeDrawing(pageData, sheetData, subSignKeyArr) {
                     startPicIdx++;
                 }
             }
+            for (const sCell of shtItemData[JV.PROP_WATERMARK_CELLS]) {
+                if (subSignKeyArr.indexOf(sCell.signature_name) >= 0) {
+                    private_setSheetDrawingCellData(sCell, tmpPos, startPicIdx, rowOffset);
+                    startPicIdx++;
+                }
+            }
             rowOffset += tmpPos.length - 2;
         }
     }
@@ -1242,9 +1266,9 @@ function createDummySignatureCell(pageData) {
     }
 }
 
-function checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel, signSheetIdxArr) {
+function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel, signSheetIdxArr) {
     // 备注:电子签名是以图形的方式处理,一页可以有多个签名,多页的签名基本是引用同样的图片,在这里先处理一下,后期统一引用。
-    //      另:以后的图片(在电子签名(signature_cells)以外的图片)会单独处理(如计算草图等)
+    //      另:以后的图片(在电子签名(signature_cells)以外的图片)会单独处理(如计算草图、水印等)
     let rst = false;
     let chkRoles = [];
     if (roleRel instanceof Array) {
@@ -1306,6 +1330,19 @@ function checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel, s
                 }
             }
         }
+        if (page[JV.PROP_WATERMARK_CELLS] && page[JV.PROP_WATERMARK_CELLS].length > 0) {
+            // 水印,单独处理
+            const waterMarkCell = page[JV.PROP_WATERMARK_CELLS][0];
+            // console.log('waterMarkCell');
+            // console.log(waterMarkCell);
+            const signPath = { path: null, pic: null };
+            signPathArr[pageIdx].push(signPath);
+            signPath.pic = waterMarkCell.pic;
+            signPath.path = waterMarkCell.path;
+            signKeyArr[pageIdx].push(waterMarkCell.signature_name);
+            rst = true;
+            signSheetIdxArr[pageIdx] = true;
+        }
     }
     return rst;
 }
@@ -1330,7 +1367,7 @@ module.exports = {
         const signSheetIdxArr = []; // 确定哪些sheet有签名(在多表导出的时候,有些表可能没有签名,但其他的表有签名)
         // console.log('in exportExcel!');
         // console.log(roleRel);
-        // const hasSignature = (roleRel !== null) ? checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel, signSheetIdxArr) : false;
+        // const hasSignature = (roleRel !== null) ? _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel, signSheetIdxArr) : false;
         let thisRoleRel = [];
         if (roleRel !== null && roleRel !== undefined) {
             thisRoleRel = roleRel;
@@ -1338,8 +1375,8 @@ module.exports = {
         resetDummuySignature(pageData, thisRoleRel); // 把草图转换一下roleRel
         // console.log(thisRoleRel);
 
-        const hasSignature = false; // 暂时不支持电子签名、草图导出excel
-        // const hasSignature = checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, thisRoleRel, signSheetIdxArr); // 因草图的关系,thisRoleRel是否为null就不是充要的条件
+        // const hasSignature = false; // 暂时不支持电子签名、草图导出excel
+        const hasSignature = _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, thisRoleRel, signSheetIdxArr); // 因草图的关系,thisRoleRel是否为null就不是充要的条件
         // console.log('signKeyArr');
         // console.log(signKeyArr);
         // console.log('signPathArr');
@@ -1641,6 +1678,12 @@ module.exports = {
                         pageItem[JV.PROP_SIGNATURE_AUDIT_CELLS].push(pageDataArray[i].items[j][JV.PROP_SIGNATURE_AUDIT_CELLS][k]);
                     }
                 }
+                pageItem[JV.PROP_WATERMARK_CELLS] = [];
+                for (let j = 0; j < pageDataArray[i].items.length; j++) {
+                    for (let k = 0; k < pageDataArray[i].items[j][JV.PROP_WATERMARK_CELLS].length; k++) {
+                        pageItem[JV.PROP_WATERMARK_CELLS].push(pageDataArray[i].items[j][JV.PROP_WATERMARK_CELLS][k]);
+                    }
+                }
                 newPagePos[i][JV.NODE_PAGE_SIZE] = pageDataArray[i][JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE];
                 pageItem[JV.PAGE_SPECIAL_MERGE_POS] = newPagePos[i];
                 newPageData.items.push(pageItem);

+ 2 - 0
app/view/report/index.ejs

@@ -277,6 +277,8 @@
     <% } %>
     <% } %>
 
+//    PAGE_SHOW['closeWatermark'] = 0; //测试用,check in 前要屏蔽
+
     const CUST_TREE_NODES = <%- cust_tpl_data %>;
     if (!(CUST_TREE_NODES.customize instanceof Array)) {
         CUST_TREE_NODES.customize = [];