Browse Source

解决多表导出PDF有电子签名丢失问题

TonyKang 5 years ago
parent
commit
0ca7f1a977

+ 5 - 0
app/controller/report_controller.js

@@ -204,6 +204,11 @@ module.exports = app => {
             const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
             const roleRel = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_ids)) : [];
             // const roleRel = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_tpl_id)) : [];
+            roleRel.sort(function(rr1, rr2) {
+                return params.rpt_ids.indexOf(parseInt(rr1.rpt_id)) - params.rpt_ids.indexOf(parseInt(rr2.rpt_id));
+            });
+            // console.log('roleRel: ');
+            // console.log(roleRel);
             await encodeSignatureDataUri(roleRel, this.app.baseDir);
             for (const pageRst of pageRstArr) {
                 await encodeDummySignatureDataUri(pageRst, this.app.baseDir);

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

@@ -128,7 +128,9 @@ let JpcJsPDFHelper = {
                 } else {
                     private_drawImage(doc, ctx, cell, control, cell.pic);
                 }
-            } else if (cell.path) {
+            //} else if (cell.path) {
+            } else {
+                // 导出PDF时,根本不需要判断cell.path是不是null or undefined
                 let finded = false;
                 for (const rtpSignRel of signatureRelArr) {
                     if (!finded) {

+ 13 - 4
app/public/report/js/rpt_main.js

@@ -584,11 +584,20 @@ let rptControlObj = {
                         }
                         for (let idx = 0; idx < result.data.length; idx++) {
                             let pageData = result.data[idx];
-                            if (current_stage_status === 3) {
-                                rptSignatureHelper.mergeSignDate(pageData);
-                                rptSignatureHelper.mergeSignature(pageData);
+                            // if (current_stage_status === 3) {
+                            //     rptSignatureHelper.mergeSignDate(pageData);
+                            //     rptSignatureHelper.mergeSignature(pageData);
+                            // }
+                            // 备注:因多表的原因,无需merge电子签名,在下面处理
+                            const singleSignatureRelArr = [];
+                            for (let rIdx = 0; rIdx < result.signatureRelInfo.length; rIdx++) {
+                                if (result.signatureRelInfo[rIdx].rpt_id === refRptTplIds[idx]) {
+                                    singleSignatureRelArr.push(signatureRelArr[rIdx]);
+                                    break;
+                                }
                             }
-                            JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx], signatureRelArr);
+                            // JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx], signatureRelArr);
+                            JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx], singleSignatureRelArr); // 精确控制签名
                         }
                     },
                     function(failRst){

+ 39 - 0
app/reports/util/rpt_calculation_data_util.js

@@ -23,6 +23,29 @@ const RELATION_TABLES_KEYS = {
     ledger: { main_key: 'id', isTree: true, tree_pid: 'ledger_pid', tree_id: 'ledger_id', foreign_key: { tender: 'tender_id' } },
 };
 
+const change_CONST = require('../../const/change');
+const TRANSLATE_CONST = {
+    '变更令常量': {
+        '变更类型': { keys: [], values: [] },
+        '变更类别': { keys: [], values: [] },
+        '变更性质': { keys: [], values: [] },
+        '费用承担方' : { keys: [], values: [] },
+    },
+};
+
+function _iniConstProperties(constName, constDtlName, destConstProp) {
+    for (const propKey in destConstProp) {
+        // TRANSLATE_CONST[constName][constDtlName]['_' + destConstProp[propKey].value] = destConstProp[propKey].name;
+        TRANSLATE_CONST[constName][constDtlName].keys.push(destConstProp[propKey].value);
+        TRANSLATE_CONST[constName][constDtlName].values.push(destConstProp[propKey].name);
+    }
+}
+
+_iniConstProperties('变更令常量', '变更类型', change_CONST.type);
+_iniConstProperties('变更令常量', '变更类别', change_CONST.class);
+_iniConstProperties('变更令常量', '变更性质', change_CONST.quality);
+_iniConstProperties('变更令常量', '费用承担方', change_CONST.charge);
+
 class Rpt_Common {
     initialize(rpt_tpl, currentDataObj) {
         this.template = rpt_tpl;
@@ -773,6 +796,7 @@ function setupFunc(obj, ownRawObj, baseDir) {
     obj.getPreferPrecisionProperty = ext_getPreferPrecisionProperty;
     obj.getArrayProperty = ext_getArrayValues;
     obj.getBlank = ext_getBlank;
+    obj.translateConst = ext_translateConst; // 计量有些指标需要这样子来转换类型名称(即通过id得到名字)
 }
 
 function assembleFields(fieldList, rstDataArr, $PROJECT) {
@@ -1023,6 +1047,21 @@ function ext_getBlank(dataKey, dftVal) {
     return rst;
 }
 
+function ext_translateConst(constName, constDtlName, destConstKeyValArr) {
+    const rst = [];
+    if (destConstKeyValArr instanceof Array && TRANSLATE_CONST[constName] && TRANSLATE_CONST[constName][constDtlName]) {
+        for (const keyV of destConstKeyValArr) {
+            const idx = TRANSLATE_CONST[constName][constDtlName].keys.indexOf(keyV);
+            if (idx >= 0) {
+                rst.push(TRANSLATE_CONST[constName][constDtlName].values[idx]);
+            } else {
+                rst.push(null);
+            }
+        }
+    }
+    return rst;
+}
+
 function ext_getPropertyByForeignId(foreignIdVal, adHocIdKey, propKey, dftValIfNotFound) {
     const rst = [];
     // 计量需要重写