瀏覽代碼

TASK #4726、4727、4728

Tony Kang 1 年之前
父節點
當前提交
5705a609c0

+ 79 - 46
app/public/report/js/rpt_archive.js

@@ -479,44 +479,76 @@ let rptArchiveObj = {
             rst[1] = rst[1] + offsetY;
             rst[3] = rst[3] + offsetY;
             return rst;
-        }
+        };
+        const _getStampArea = (stampCell) => {
+            const rst = [0, 0, 0, 0];
+            if (stampCell && stampCell[JV.PROP_AREA]) {
+                const left = Math.round(stampCell[JV.PROP_AREA][JV.PROP_LEFT]);
+                const right = Math.round(stampCell[JV.PROP_AREA][JV.PROP_RIGHT]);
+                const top = Math.round(stampCell[JV.PROP_AREA][JV.PROP_TOP]);
+                const bottom = Math.round(stampCell[JV.PROP_AREA][JV.PROP_BOTTOM]);
+                let width = right - left,
+                    height = bottom - top;
+                rst[0] = left;
+                rst[1] = top;
+                rst[2] = rst[0] + width;
+                rst[3] = rst[1] + height;
+            }
+            rst[0] = rst[0] + offsetX;
+            rst[2] = rst[2] + offsetX;
+            rst[1] = rst[1] + offsetY;
+            rst[3] = rst[3] + offsetY;
+            return rst;
+        };
+        const _areaKeyCache = {
+            normal: 'areas',
+            company_stamp: 'company_stamp_areas',
+            private_stamp: 'private_stamp_areas'
+        };
+        const _chkAndSetArea = (sCell, actSignArea, pageIdx, signNameKey) => {
+            let idx = psInfoStr.indexOf(sCell[signNameKey]);
+            const signType = sCell.signType || 'normal';
+            const areaKey = _areaKeyCache[signType] || 'areas';
+            if (idx < 0) {
+                psInfoStr.push(sCell[signNameKey]);
+                let newPsInfo = {'name': sCell[signNameKey], areas: [], company_stamp_areas: [], private_stamp_areas: []};
+                let area = {Left: actSignArea[JV.IDX_LEFT] + offsetX, Top: actSignArea[JV.IDX_TOP] + offsetY, width: (actSignArea[JV.IDX_RIGHT] - actSignArea[JV.IDX_LEFT]), height: (actSignArea[JV.IDX_BOTTOM] - actSignArea[JV.IDX_TOP]), pages: []};
+                area.pages.push(pageIdx + 1);
+                newPsInfo[areaKey].push(area);
+                psInfo.push(newPsInfo);
+            } else {
+                let hasArea = false;
+                for (let areaItem of psInfo[idx][areaKey]) {
+                    if (areaItem.Left === actSignArea[JV.IDX_LEFT] + offsetX && areaItem.Top === actSignArea[JV.IDX_TOP] + offsetX &&
+                        areaItem.width === actSignArea[JV.IDX_RIGHT] - actSignArea[JV.IDX_LEFT] && areaItem.height === actSignArea[JV.IDX_BOTTOM] - actSignArea[JV.IDX_TOP]) {
+                        areaItem.pages.push(pageIdx + 1);
+                        hasArea = true;
+                        break;
+                    }
+                }
+                if (!hasArea) {
+                    let area = {Left: actSignArea[JV.IDX_LEFT] + offsetX, Top: actSignArea[JV.IDX_TOP] + offsetY, width: (actSignArea[JV.IDX_RIGHT] - actSignArea[JV.IDX_LEFT]), height: (actSignArea[JV.IDX_BOTTOM] - actSignArea[JV.IDX_TOP]), pages: []};
+                    area.pages.push(pageIdx + 1);
+                    psInfo[idx][areaKey].push(area);
+                }
+            }
+        };
         for(let i = 0; i < pageData.items.length; i++) {
             let page = pageData.items[i];
             for (let sCell of page.signature_cells) {
                 // sCell.signature_name 草图不用加密
                 if (sCell.signature_name.indexOf('dummy_pic') < 0) {
-                // if (sCell.signature_name !== 'dummy_pic') {
                     let control = null;
                     if (typeof sCell[JV.PROP_CONTROL] === "string") {
                         control = controls[sCell[JV.PROP_CONTROL]];
                     } else {
                         control = sCell[JV.PROP_CONTROL];
                     }
-                    let idx = psInfoStr.indexOf(sCell.signature_name);
                     let actSignArea = _getProperSignatureArea(sCell, control);
-                    if (idx < 0) {
-                        psInfoStr.push(sCell.signature_name);
-                        let newPsInfo = {'name': sCell.signature_name, areas: []};
-                        let area = {Left: actSignArea[JV.IDX_LEFT] + offsetX, Top: actSignArea[JV.IDX_TOP] + offsetY, width: (actSignArea[JV.IDX_RIGHT] - actSignArea[JV.IDX_LEFT]), height: (actSignArea[JV.IDX_BOTTOM] - actSignArea[JV.IDX_TOP]), pages: []};
-                        area.pages.push(i + 1);
-                        newPsInfo.areas.push(area);
-                        psInfo.push(newPsInfo);
-                    } else {
-                        let hasArea = false;
-                        for (let areaItem of psInfo[idx].areas) {
-                            if (areaItem.Left === actSignArea[JV.IDX_LEFT] + offsetX && areaItem.Top === actSignArea[JV.IDX_TOP] + offsetX &&
-                                areaItem.width === actSignArea[JV.IDX_RIGHT] - actSignArea[JV.IDX_LEFT] && areaItem.height === actSignArea[JV.IDX_BOTTOM] - actSignArea[JV.IDX_TOP]) {
-                                areaItem.pages.push(i + 1);
-                                hasArea = true;
-                                break;
-                            }
-                        }
-                        if (!hasArea) {
-                            let area = {Left: actSignArea[JV.IDX_LEFT] + offsetX, Top: actSignArea[JV.IDX_TOP] + offsetY, width: (actSignArea[JV.IDX_RIGHT] - actSignArea[JV.IDX_LEFT]), height: (actSignArea[JV.IDX_BOTTOM] - actSignArea[JV.IDX_TOP]), pages: []};
-                            area.pages.push(i + 1);
-                            psInfo[idx].areas.push(area);
-                        }
-                    }
+                    _chkAndSetArea(sCell, actSignArea, i, 'signature_name');
+                } else {
+                    let stampArea = _getStampArea(sCell);
+                    _chkAndSetArea(sCell, stampArea, i, 'signatureName'); // 注意:这里的判断不是signature_name(含dummy的),而是signatureName属性(之前的章信息设计导致)
                 }
             }
         }
@@ -525,27 +557,28 @@ let rptArchiveObj = {
     archiveCurrentReport: function (currentRptPageRst, currentNode, cb) {
         let picKeys = [], picCells = [], dupPicPath = [], dupPicCell = [];
         // 1. 找草图路径
-        for (let pageIdx = 0; pageIdx < currentRptPageRst.items.length; pageIdx++) {
-            // 每页
-            for (let sCellIdx = 0; sCellIdx < currentRptPageRst.items[pageIdx].signature_cells.length; sCellIdx++) {
-                let sCell = currentRptPageRst.items[pageIdx].signature_cells[sCellIdx];
-                // if (sCell.signature_name === 'dummy_pic' && sCell.path.indexOf('/sign') < 0) {
-                if (sCell.signature_name.indexOf('dummy_pic') >= 0) {
-                // if (sCell.signature_name === 'dummy_pic') {
-                    //1. 草图就不考虑重复问题,重复就重复吧;
-                    //2. 如果是dummy_pic,也不用判断是否为签名了,因为有其他的逻辑直接选择审核人,不经过签名过程,就当草图一样放过去了
-                    let picIdx = picKeys.indexOf(sCell.path);
-                    if (picIdx < 0) {
-                        picKeys.push(sCell.path);
-                        picCells.push(sCell);
-                    } else {
-                        let dPicIdx = dupPicPath.indexOf(sCell.path);
-                        if (dPicIdx < 0) {
-                            dupPicPath.push(sCell.path);
-                            dupPicCell.push([]);
-                            dPicIdx = dupPicPath.length - 1;
+        if (!PAGE_SHOW.closeArchiveSignature) {
+            for (let pageIdx = 0; pageIdx < currentRptPageRst.items.length; pageIdx++) {
+                // 每页
+                for (let sCellIdx = 0; sCellIdx < currentRptPageRst.items[pageIdx].signature_cells.length; sCellIdx++) {
+                    let sCell = currentRptPageRst.items[pageIdx].signature_cells[sCellIdx];
+                    // if (sCell.signature_name === 'dummy_pic' && sCell.path.indexOf('/sign') < 0) {
+                    if (sCell.signature_name.indexOf('dummy_pic') >= 0) {
+                        //1. 草图就不考虑重复问题,重复就重复吧;
+                        //2. 如果是dummy_pic,也不用判断是否为签名了,因为有其他的逻辑直接选择审核人,不经过签名过程,就当草图一样放过去了
+                        let picIdx = picKeys.indexOf(sCell.path);
+                        if (picIdx < 0) {
+                            picKeys.push(sCell.path);
+                            picCells.push(sCell);
+                        } else {
+                            let dPicIdx = dupPicPath.indexOf(sCell.path);
+                            if (dPicIdx < 0) {
+                                dupPicPath.push(sCell.path);
+                                dupPicCell.push([]);
+                                dPicIdx = dupPicPath.length - 1;
+                            }
+                            dupPicCell[dPicIdx].push(sCell);
                         }
-                        dupPicCell[dPicIdx].push(sCell);
                     }
                 }
             }

+ 2 - 2
app/public/report/js/rpt_main.js

@@ -1306,7 +1306,7 @@ function downloadPDFReport(pageDataArr, pageSize, rpt_names, signatureRelArr, si
     // 导出PDF真实优化代码
     let picPaths = [], dummyPicAmt = 0, dummyCells = [], dupPicPath = [], dupPicCell = [];
     // 1. 先找有没有dummy
-    for (let pageData of pageDataArr) {
+    pageDataArr.forEach((pageData, pgIdx) => {
         for (let page of pageData.items) {
             for (let dCell of page.signature_cells) {
                 if (dCell.signature_name.indexOf('dummy_pic') >= 0) {
@@ -1327,7 +1327,7 @@ function downloadPDFReport(pageDataArr, pageSize, rpt_names, signatureRelArr, si
                 }
             }
         }
-    }
+    });
     if (dummyPicAmt > 0) {
         // 2. 有则一个个请求下载图片,下载完后统一导出PDF
         $.bootstrapLoading.start();

+ 3 - 0
app/reports/rpt_component/helper/jpc_helper_discrete.js

@@ -168,6 +168,8 @@ const JpcDiscreteHelper = {
     setupSignatureFieldParam(signatureRst, signatureDateRst, signatureAuditRst, interactRst, $CURRENT_RPT, band, unitFactor, df) {
         let rst = false;
         if (JE.isSignature(df[JV.PROP_FIELD_ID], $CURRENT_RPT)) {
+            const sf = JE.F(df[JV.PROP_FIELD_ID], $CURRENT_RPT);
+            const order = sf[JV.PROP_FIELD_ORDER] || 0;
             // 这里输出到signatureRst
             if (Array.isArray(signatureRst)) {
                 const map_data_field = JE.F(df[JV.PROP_FIELD_ID], $CURRENT_RPT);
@@ -175,6 +177,7 @@ const JpcDiscreteHelper = {
                 signatureItem[JV.PROP_CONTROL] = df[[JV.PROP_CONTROL]];
                 signatureItem[JV.PROP_STYLE] = df[[JV.PROP_STYLE]];
                 signatureItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(df[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
+                signatureItem[JV.PROP_FIELD_ORDER] = order;
                 signatureRst.push(signatureItem);
                 rst = true;
             }

+ 5 - 0
app/reports/rpt_component/jpc_ex.js

@@ -462,6 +462,11 @@ JpcExSrv.prototype.createNew = function() {
         } else {
             console.log('no page result was found!');
         }
+        if (rst[JV.PROP_SIGNATURE_CELLS] && rst[JV.PROP_SIGNATURE_CELLS].length > 0) {
+            rst[JV.PROP_SIGNATURE_CELLS].sort(function(cell1, cell2) {
+                return cell1[JV.PROP_FIELD_ORDER] - cell2[JV.PROP_FIELD_ORDER];
+            });
+        }
         return rst;
     };
     // JpcEx.rte.currentRptObj = JpcResult;

+ 5 - 4
app/reports/rpt_component/jpc_field.js

@@ -2,7 +2,7 @@
 
 const JV = require('./jpc_value_define');
 const JpcField = {
-    createNew: function(rptTpl) {
+    createNew(rptTpl) {
         const JpcFieldResult = {};
         const me = this;
         JpcFieldResult[JV.NODE_DISCRETE_FIELDS] = {};
@@ -44,12 +44,12 @@ const JpcField = {
         JpcFieldResult[JV.NODE_SIGNATURE_FIELDS] = {};
         if (rptTpl[JV.NODE_SIGNATURE_FIELDS]) {
             for (let i = 0; i < rptTpl[JV.NODE_SIGNATURE_FIELDS].length; i++) {
-                me.createSignatureSingle(rptTpl[JV.NODE_SIGNATURE_FIELDS][i], JpcFieldResult[JV.NODE_SIGNATURE_FIELDS]);
+                me.createSignatureSingle(rptTpl[JV.NODE_SIGNATURE_FIELDS][i], JpcFieldResult[JV.NODE_SIGNATURE_FIELDS], i);
             }
         }
         return JpcFieldResult;
     },
-    createSingle: function(fieldNode, parentObj, rptTpl, dataNodeName, sequence) {
+    createSingle(fieldNode, parentObj, rptTpl, dataNodeName, sequence) {
         if (fieldNode && fieldNode[JV.PROP_ID]) {
             const item = {};
             item[JV.PROP_ID] = fieldNode[JV.PROP_ID];
@@ -73,7 +73,7 @@ const JpcField = {
             parentObj[JV.PROP_ID + '_' + fieldNode[JV.PROP_ID]] = item;
         }
     },
-    createSignatureSingle: function(fieldNode, parentObj) {
+    createSignatureSingle(fieldNode, parentObj, order) {
         if (fieldNode && fieldNode[JV.PROP_ID]) {
             const item = {};
             item[JV.PROP_ID] = fieldNode[JV.PROP_ID];
@@ -81,6 +81,7 @@ const JpcField = {
             item[JV.PROP_DATA_TYPE] = fieldNode[JV.PROP_DATA_TYPE];
             item[JV.PROP_PATH] = fieldNode[JV.PROP_PATH];
             item[JV.PROP_PIC_STREAM] = fieldNode[JV.PROP_PIC_STREAM];
+            item[JV.PROP_FIELD_ORDER] = order; // 签名需要这个order
             parentObj[JV.PROP_ID + '_' + fieldNode[JV.PROP_ID]] = item;
         }
     },

+ 1 - 0
app/reports/rpt_component/jpc_value_define.js

@@ -168,6 +168,7 @@ module.exports = {
     PROP_FORMAT: 'Format',
     PROP_PATH: 'Path',
     PROP_PIC_STREAM: 'Picture',
+    PROP_FIELD_ORDER: 'Order', // 这个是记录原始定义的位置,目前就签名用上
 
     PROP_SHOW_ZERO: 'ShowZero',
     PROP_EXTENSION_TYPE: 'ExtType',

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

@@ -372,7 +372,7 @@
     const BUDGET_ID = <%- budget_id %>;
     const SP_ID = '<%- sp_id %>';
     const SOURCE_TYPE = <%- source_type %>;
-    const PAGE_SHOW = {closeWatermark: 0, closeExportPdf: 0, closeExportExcel: 0, showArchive: 0, closeShowAllCustomized: 0, isTextSignature: 0};
+    const PAGE_SHOW = {closeWatermark: 0, closeExportPdf: 0, closeExportExcel: 0, showArchive: 0, closeShowAllCustomized: 0, isTextSignature: 0, closeArchiveSignature: 0};
     <% if (pageShow !== null) { %>
         <% if (parseInt(pageShow.closeWatermark) === 1) { %>
             PAGE_SHOW['closeWatermark'] = 1;
@@ -392,6 +392,9 @@
         <% if (parseInt(pageShow.isTextSignature) === 1) { %>
         PAGE_SHOW['isTextSignature'] = 1;
         <% } %>
+        <% if (parseInt(pageShow.closeArchiveSignature) === 1) { %>
+            PAGE_SHOW['closeArchiveSignature'] = 1;
+        <% } %>
     <% } %>
 
 //    PAGE_SHOW['closeWatermark'] = 0; //测试用,check in 前要屏蔽