瀏覽代碼

暂告一段落

TonyKang 5 年之前
父節點
當前提交
b1f3144c02

+ 24 - 18
app/reports/rpt_component/helper/jpc_helper_band.js

@@ -1,28 +1,31 @@
-let JV = require('../jpc_value_define');
-let JpcCommonHelper = require('./jpc_helper_common');
+'use strict';
 
-let JpcBandHelper = {
+const JV = require('../jpc_value_define');
+const JpcCommonHelper = require('./jpc_helper_common');
+
+const JpcBandHelper = {
     getBandTypeValByString: function(bandType) {
         let rst = JV.PAGE_STATUS.indexOf(bandType);
         if (rst < 0) rst = JV.STATUS_NORMAL;
         return rst;
     },
     setBandArea: function(bands, rptTpl, pageStatus, isOnlyNormalStatus, isOnlyExStatus) {
-        let me = this;
+        const me = this;
         if (rptTpl[JV.NODE_BAND_COLLECTION]) {
-            isOnlyNormalStatus = isOnlyNormalStatus||false;
-            isOnlyExStatus = isOnlyExStatus||false;
+            isOnlyNormalStatus = isOnlyNormalStatus || false;
+            isOnlyExStatus = isOnlyExStatus || false;
 
-            let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
-            let orgArea = JpcCommonHelper.getReportArea(rptTpl, unitFactor);
+            const unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+            const orgArea = JpcCommonHelper.getReportArea(rptTpl, unitFactor);
             for (let i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
                 me.setBandPos(bands, rptTpl[JV.NODE_BAND_COLLECTION][i], orgArea, unitFactor, pageStatus, isOnlyNormalStatus, isOnlyExStatus);
             }
         }
     },
     setBandPos: function(bands, bandNode, orgArea, unitFactor, pageStatus, isOnlyNormalStatus, isOnlyExStatus) {
-        let me = this, band = bands[bandNode[JV.BAND_PROP_NAME]];
-        //0. for multi flow purpose
+        const me = this;
+        const band = bands[bandNode[JV.BAND_PROP_NAME]];
+        // 0. for multi flow purpose
         if (isOnlyNormalStatus) {
             if (bandNode.hasOwnProperty(JV.PROP_BAND_EX_ONLY) && JpcCommonHelper.getBoolean(bandNode[JV.PROP_BAND_EX_ONLY])) {
                 return;
@@ -33,12 +36,12 @@ let JpcBandHelper = {
                 return;
             }
         }
-        //1. initialize
+        // 1. initialize
         band[JV.PROP_LEFT] = orgArea[JV.IDX_LEFT];
         band[JV.PROP_TOP] = orgArea[JV.IDX_TOP];
         band[JV.PROP_RIGHT] = orgArea[JV.IDX_RIGHT];
         band[JV.PROP_BOTTOM] = orgArea[JV.IDX_BOTTOM];
-        //2. set this band
+        // 2. set this band
         if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]]) {
             switch (band[JV.BAND_PROP_ALIGNMENT]) {
                 case JV.LAYOUT_TOP:
@@ -73,20 +76,23 @@ let JpcBandHelper = {
                     }
                     orgArea[JV.IDX_RIGHT] = band.Left;
                     break;
+                default:
+                    break;
             }
-            //3. set sub-bands
+            // 3. set sub-bands
             if (bandNode[JV.BAND_PROP_SUB_BANDS]) {
-                let bandArea = [band.Left, band.Top, band.Right, band.Bottom];
+                const bandArea = [band.Left, band.Top, band.Right, band.Bottom];
                 for (let i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
                     me.setBandPos(bands, bandNode[JV.BAND_PROP_SUB_BANDS][i], bandArea, unitFactor, pageStatus, isOnlyNormalStatus, isOnlyExStatus);
                 }
             }
         }
     },
-    resetBandPos: function (bandCollection, bands, contentBand, offsetX, offsetY) {
-        let orgX = contentBand.Right, orgY = contentBand.Bottom;
+    resetBandPos: function(bandCollection, bands, contentBand, offsetX, offsetY) {
+        const orgX = contentBand.Right;
+        const orgY = contentBand.Bottom;
         function chkAndResetPos(targetBand) {
-            let band = bands[targetBand.Name];
+            const band = bands[targetBand.Name];
             if (band) {
                 if (band === contentBand) {
                     band.Bottom += offsetY;
@@ -115,7 +121,7 @@ let JpcBandHelper = {
         for (let i = 0; i < bandCollection.length; i++) {
             chkAndResetPos(bandCollection[i]);
         }
-    }
+    },
 };
 
 module.exports = JpcBandHelper;

+ 13 - 1
app/reports/rpt_component/helper/jpc_helper_discrete.js

@@ -47,9 +47,11 @@ const JpcDiscreteHelper = {
                                 }
                             } else {
                                 let value = '';
+                                let isPic = false;
                                 if (df[JV.PROP_FIELD_ID]) {
                                     // let map_data_field = JE.F(df[JV.PROP_FIELD_ID], $CURRENT_RPT);
                                     const map_data_field = JE.F(df[JV.PROP_FIELD_ID], $CURRENT_RPT);
+                                    isPic = (map_data_field.isPic !== undefined && map_data_field.isPic);
                                     if (map_data_field.DataSeq !== JV.BLANK_FIELD_INDEX) {
                                         const data = dataObj[map_data_field.DataNodeName][map_data_field.DataSeq];
                                         if (data && data.length > 0) {
@@ -85,7 +87,17 @@ const JpcDiscreteHelper = {
                                 const item = JpcCommonOutputHelper.createCommonOutputWithoutDecorate(df, value, true);
                                 // position
                                 item[JV.PROP_AREA] = JpcAreaHelper.outputArea(df[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, multiCols, multiColIdx, false, false);
-                                rst.push(item);
+                                if (isPic && item[JV.PROP_VALUE] !== undefined && item[JV.PROP_VALUE] !== null && item[JV.PROP_VALUE] !== '') {
+                                    if (Array.isArray(signatureRst)) {
+                                        const signatureItem = { signature_name: JV.SIGNATURE_NAME_DUMMY, path: null, pic: item[JV.PROP_VALUE] }; // 这里的pic数据在指标中里已经处理过了
+                                        signatureItem[JV.PROP_CONTROL] = item[[JV.PROP_CONTROL]];
+                                        signatureItem[JV.PROP_STYLE] = item[[JV.PROP_STYLE]];
+                                        signatureItem[JV.PROP_AREA] = item[JV.PROP_AREA];
+                                        signatureRst.push(signatureItem);
+                                    }
+                                } else {
+                                    rst.push(item);
+                                }
                             }
                         }
                     }

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

@@ -211,6 +211,8 @@ module.exports = {
     RUN_TYPE_BEFORE_PAGING: 'before_paging',
     RUN_TYPE_BEFORE_OUTPUT: 'before_output',
 
+    SIGNATURE_NAME_DUMMY: 'dummy_pic',
+
     PAGE_STATUS: ['EveryPage', 'FirstPage', 'LastPage', 'SegmentStart', 'SegmentEnd', 'Group', 'CrossRowEnd', 'CrossColEnd'],
 
     CONTROL_PROPS: ['Shrink', 'ShowZero', 'Horizon', 'Vertical', 'Wrap', 'VerticalForExcel', 'ShrinkFirst', 'CloseOutput'],

+ 37 - 7
app/reports/util/rpt_calculation_data_util.js

@@ -768,7 +768,19 @@ function ext_getProperty(dataKey, propKey) {
     return rst;
 }
 
-function ext_getPicProperty(dataKey, propKey, isPath) {
+function isFileExisted(file) {
+    return new Promise(function(resolve, reject) {
+        fs.access(file, err => {
+            if (err) {
+                reject(false);
+            } else {
+                resolve(true);
+            }
+        });
+    });
+}
+
+async function ext_getPicProperty(dataKey, propKey, isPath) {
     const rst = [];
     const parentObj = this;
     const dtObj = parentObj.myOwnRawDataObj[dataKey];
@@ -779,13 +791,31 @@ function ext_getPicProperty(dataKey, propKey, isPath) {
         }
         if (isPath) {
             for (let picIdx = 0; picIdx < rst.length; picIdx++) {
-                const filePath = parentObj.baseDir + '/app/' + rst[picIdx];
-                // fs.access
-                const bData = fs.readFileSync(filePath);
-                const base64Str = bData.toString('base64');
-                const datauri = 'data:image/png;base64,' + base64Str;
-                rst[picIdx] = datauri;
+                if (rst[picIdx] !== undefined && rst[picIdx] !== null && rst[picIdx] !== '') {
+                    const filePath = parentObj.baseDir + '/app/' + rst[picIdx];
+                    try {
+                        fs.accessSync(filePath, fs.constants.R_OK);
+                        const bData = fs.readFileSync(filePath);
+                        const base64Str = bData.toString('base64');
+                        const datauri = 'data:image/png;base64,' + base64Str;
+                        rst[picIdx] = datauri;
+                        // const res = await isFileExisted(filePath);
+                        // if (res) {
+                        //     const bData = fs.readFileSync(filePath);
+                        //     const base64Str = bData.toString('base64');
+                        //     const datauri = 'data:image/png;base64,' + base64Str;
+                        //     rst[picIdx] = datauri;
+                        // } else {
+                        //     rst[picIdx] = ''; // 不存在图片,则设置为空,后续的方法就不会当作图片来处理了
+                        // }
+                    } catch (err) {
+                        rst[picIdx] = ''; // 不存在图片,则设置为空,后续的方法就不会当作图片来处理了
+                        console.error(err);
+                    }
+                }
             }
+        } else {
+            // 不是路径,那么必须是image data,不用处理,正常走即可
         }
     }
     return rst;

+ 6 - 0
app/reports/util/rpt_excel_util.js

@@ -1142,7 +1142,13 @@ function checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel, s
         if (page[JV.PROP_SIGNATURE_CELLS] && page[JV.PROP_SIGNATURE_CELLS].length > 0) {
             // console.log('page index: ' + pageIdx);
             // console.log(page[JV.PROP_SIGNATURE_CELLS]);
+            let dummySignIdx = 0;
             for (const signature of page[JV.PROP_SIGNATURE_CELLS]) {
+                if (signature.signature_name === JV.SIGNATURE_NAME_DUMMY) {
+                    // 表示这是一个其他类型的非原生电子签名图,只是借用signature的处理机制,每个图都是唯一的,所以需要重新给个唯一的新signature_name
+                    signature.signature_name = signature.signature_name + '_' + pageIdx + '_' + dummySignIdx;
+                    dummySignIdx++;
+                }
                 if (signKeyArr[pageIdx].indexOf(signature.signature_name) < 0) {
                     if (signature.pic) {
                         const signPath = { path: null, pic: null };