TonyKang преди 5 години
родител
ревизия
8db0883218

+ 8 - 5
app/controller/report_controller.js

@@ -28,14 +28,16 @@ module.exports = app => {
                 let stage_id = -1;
                 let stage_order = -1;
                 let stage_times = -1;
+                let stage_status = -1;
                 const treeNodes = await ctx.service.rptTreeNode.getNodesByProjectId([-1, tender.data.project_id]);
                 const custCfg = await ctx.service.rptCustomizeCfg.getCustomizeCfgByUserId('Administrator');
-                const stageList = await ctx.service.stage.getValidStageShort(tender.id);
+                const stageList = await ctx.service.stage.getValidStagesShort(tender.id);
                 // console.log(maxStageAmt[0].maxAmt);
                 if (stage !== null && stage !== undefined) {
                     stage_id = stage.id;
                     stage_order = stage.order;
                     stage_times = stage.times;
+                    stage_status = stage.status;
                 }
                 const renderData = {
                     tender: tender.data,
@@ -47,6 +49,7 @@ module.exports = app => {
                     stg_id: stage_id,
                     stg_order: stage_order,
                     stg_times: stage_times,
+                    stg_status: stage_status,
                     stage_list: JSON.stringify(stageList),
                     tenderMenu,
                     preUrl: '/tender/' + tender.id,
@@ -132,12 +135,12 @@ async function getReportData(ctx, params, filters) {
                 runnableKey.push('stage_bills_final');
                 break;
             case 'stage':
-                // runnableRst.push(ctx.service.stageBillsFinal.getFinalDataEx(params.tender_id, params.stage_order));
-                // runnableKey.push('pay');
+                runnableRst.push(ctx.service.stage.getStageById(params.stage_id));
+                runnableKey.push('stage');
                 break;
             case 'stage_pay':
-                // runnableRst.push(ctx.service.stageBillsFinal.getFinalDataEx(params.tender_id, params.stage_order));
-                // runnableKey.push('stage_pay');
+                runnableRst.push(ctx.service.stagePay.getAuditorStageData(params.stage_id, params.stage_times, params.stage_order));
+                runnableKey.push('stage_pay');
                 break;
             default:
                 break;

+ 16 - 37
app/public/report/js/jpc_output.js

@@ -12,14 +12,6 @@ let JpcCanvasOutput = {
         ctx.clearRect(0,0, canvas.width, canvas.height);
         ctx.restore();
     },
-    resetFonts: function(rptFonts) {
-        let me = JpcCanvasOutput;
-        if (me.scaleFactor !== 1) {
-            for (let key in rptFonts) {
-                rptFonts[key]["FontHeight"] = me.scaleFactor * rptFonts[key]["FontHeight"];
-            }
-        }
-    },
     drawToCanvas : function(pageObj, canvas, pageIdx) {
         let me = this;
         let ctx = canvas.getContext("2d");
@@ -127,6 +119,7 @@ let JpcCanvasOutput = {
                 if (dftFontItalic && dftFontItalic === 'T') {
                     dftOthers = dftOthers + "italic ";
                 }
+                dftFontHeight = me.scaleFactor * dftFontHeight;
                 ctx.font = dftOthers + dftFontHeight + "px " + font[JV.PROP_NAME];
             }
             let inner_setupControl = function (inArea, inFontHeight, inOutput) {
@@ -148,6 +141,7 @@ let JpcCanvasOutput = {
             }
 
             function private_drawUnderline(underLineVal) {
+                let me = this;
                 //A. 暂不支持角度; B. 坐标已经translate
                 //1. 计算下划线的相关坐标
                 let width = ctx.measureText(underLineVal).width;
@@ -182,7 +176,7 @@ let JpcCanvasOutput = {
                     ctx.translate(0,0.5);
                 }
                 ctx.beginPath();
-                ctx.moveTo(startX, startY);
+                ctx.moveTo(startX * me.scaleFactor, startY * me.scaleFactor);
                 ctx.lineWidth = 1;
                 ctx.strokeStyle = "BLACK";
                 ctx.lineTo(endX, endY);
@@ -190,6 +184,8 @@ let JpcCanvasOutput = {
                 // ctx.restore();
             }
 
+            output[0] = output[0] * me.scaleFactor;
+            output[1] = output[1] * me.scaleFactor;
             ctx.save();
             ctx.translate(output[0], output[1]);
             // if (font[JV.FONT_PROPS[5]] === 'T' && parseInt(font.FontAngle) === 0) {
@@ -287,10 +283,8 @@ let JpcCanvasOutput = {
                     }
                 }
                 for (let i = 0; i < values.length; i++) {
-                    // area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (height / values.length) + me.offsetY;
-                    // area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (height / values.length) + me.offsetY;
                     area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (ah / values.length) + me.offsetY + restTopH;
-                    area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (ah / values.length) + me.offsetY + restTopH;
+                    area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (ah / values.length) + me.offsetY + restBottomH;
                     if (values[i] === null || values[i] === undefined || values[i] === 'null') {
                         values[i] = "";
                     }
@@ -299,6 +293,7 @@ let JpcCanvasOutput = {
             }
         }
         function private_drawLine(cell, ctx, style, styleBorderDest, startP, destP, mergedBand, styles, isNeedMergeBand) {
+            let me = JpcCanvasOutput;
             ctx.beginPath();
             let destStyle = style;
             if (mergedBand) {
@@ -306,11 +301,11 @@ let JpcCanvasOutput = {
                     destStyle = styles[mergedBand[JV.PROP_STYLE][JV.PROP_ID]];
                 }
             }
-            ctx.moveTo(cell[JV.PROP_AREA][startP[0]] + me.offsetX, cell[JV.PROP_AREA][startP[1]] + me.offsetY);
+            ctx.moveTo((cell[JV.PROP_AREA][startP[0]] + me.offsetX) * me.scaleFactor, (cell[JV.PROP_AREA][startP[1]] + me.offsetY) * me.scaleFactor);
             if (destStyle[styleBorderDest] && parseFloat(destStyle[styleBorderDest][JV.PROP_LINE_WEIGHT]) !== 0.0) {
                 ctx.lineWidth = 1.0 * destStyle[styleBorderDest][JV.PROP_LINE_WEIGHT];
                 ctx.strokeStyle = destStyle[styleBorderDest][JV.PROP_COLOR];
-                ctx.lineTo(cell[JV.PROP_AREA][destP[0]] + me.offsetX, cell[JV.PROP_AREA][destP[1]] + me.offsetY);
+                ctx.lineTo((cell[JV.PROP_AREA][destP[0]] + me.offsetX) * me.scaleFactor, (cell[JV.PROP_AREA][destP[1]] + me.offsetY) * me.scaleFactor);
             }
             ctx.stroke();
         }
@@ -347,17 +342,6 @@ let JpcCanvasOutput = {
             }
             return rst;
         }
-        function private_resetArea(area) {
-            area[JV.PROP_LEFT] = me.scaleFactor * area[JV.PROP_LEFT];
-            area[JV.PROP_RIGHT] = me.scaleFactor * area[JV.PROP_RIGHT];
-            area[JV.PROP_TOP] = me.scaleFactor * area[JV.PROP_TOP];
-            area[JV.PROP_BOTTOM] = me.scaleFactor * area[JV.PROP_BOTTOM];
-        }
-        function private_resetCellFont(cell) {
-            if (typeof cell.font !== "string") {
-                cell.font["FontHeight"] = me.scaleFactor * cell.font["FontHeight"];
-            }
-        }
 
         if (pageObj && pageObj.items.length > 0 && canvas && pageObj.items.length >= pageIdx) {
             let page = pageObj.items[pageIdx - 1],
@@ -372,13 +356,8 @@ let JpcCanvasOutput = {
                 newPageMergeBand[JV.PROP_TOP] = page[JV.PROP_PAGE_MERGE_BORDER][JV.PROP_TOP];
                 newPageMergeBand[JV.PROP_BOTTOM] = page[JV.PROP_PAGE_MERGE_BORDER][JV.PROP_BOTTOM];
             }
-            private_resetArea(newPageMergeBand);
             for (let j = 0; j < page.cells.length; j++) {
                 let cell = page.cells[j];
-                if (me.scaleFactor !== 1) {
-                    private_resetCellFont(cell);
-                    private_resetArea(cell[JV.PROP_AREA]);
-                }
                 private_drawCell(cell, fonts, styles, controls, newPageMergeBand);
             }
         }
@@ -392,17 +371,17 @@ let JpcCanvasOutput = {
         ctx.beginPath();
         ctx.translate(0.5,0.5);
         ctx.lineWidth = 1;
-        ctx.moveTo(me.offsetX, me.offsetY);
-        ctx.lineTo(size[0] + me.offsetX, me.offsetY);
-        ctx.lineTo(size[0] + me.offsetX, size[1] + me.offsetY);
-        ctx.lineTo(me.offsetX, size[1] + me.offsetY);
-        ctx.lineTo(me.offsetX, me.offsetY);
+        ctx.moveTo(me.offsetX * me.scaleFactor, me.offsetY * me.scaleFactor);
+        ctx.lineTo((size[0] + me.offsetX) * me.scaleFactor, me.offsetY * me.scaleFactor);
+        ctx.lineTo((size[0] + me.offsetX) * me.scaleFactor, (size[1] + me.offsetY) * me.scaleFactor);
+        ctx.lineTo(me.offsetX * me.scaleFactor, (size[1] + me.offsetY) * me.scaleFactor);
+        ctx.lineTo(me.offsetX * me.scaleFactor, me.offsetY * me.scaleFactor);
         ctx.stroke();
         ctx.restore();
 
         ctx.fillStyle="black";
-        ctx.fillRect(size[0] + me.offsetX,10 + me.offsetY,10,size[1]);
-        ctx.fillRect(10 + me.offsetX,size[1] + me.offsetY,size[0],10);
+        ctx.fillRect((size[0] + me.offsetX) * me.scaleFactor, (10 + me.offsetY) * me.scaleFactor, 10 * me.scaleFactor, size[1] * me.scaleFactor);
+        ctx.fillRect((10 + me.offsetX) * me.scaleFactor, (size[1] + me.offsetY) * me.scaleFactor, size[0] * me.scaleFactor, 10 * me.scaleFactor);
     },
     getReportSizeInPixel: function(rptTpl, resolution) {
         let rst = [8.27, 11.69];

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

@@ -58,9 +58,6 @@ let zTreeOprObj = {
             $("#export_div").find("span").each(function(cIdx,elementSpan){
                 elementSpan.innerText = cnt;
             });
-            $("#print_div").find("span").each(function(cIdx,elementSpan){
-                elementSpan.innerText = cnt;
-            });
         }
     },
     getReportTemplateTree: function() {
@@ -267,6 +264,19 @@ let zTreeOprObj = {
             }
         );
     },
+    scaleReport: function (accScale) {
+        let me = zTreeOprObj;
+        let canvas = document.getElementById("rptCanvas");
+        if (accScale !== 0) {
+            JpcCanvasOutput.scaleFactor += accScale;
+            if (JpcCanvasOutput.scaleFactor < 0.5) JpcCanvasOutput.scaleFactor = 0.5;
+            if (JpcCanvasOutput.scaleFactor > 1.5) JpcCanvasOutput.scaleFactor = 1.5;
+        } else {
+            JpcCanvasOutput.scaleFactor = 1;
+        }
+        document.getElementById("btnNormalScale").innerText = (JpcCanvasOutput.scaleFactor * 100) + '%';
+        me.showPage(me.currentPage, canvas);
+    },
     requestPrjFolderCommon: function () {
         // let me = zTreeOprObj;
         // hintBox.waitBox();

+ 68 - 61
app/reports/rpt_component/helper/jpc_helper_discrete.js

@@ -1,16 +1,18 @@
-let JV = require('../jpc_value_define');
-let JE = require('../jpc_rte');
-let JpcTextHelper = require('./jpc_helper_text');
-let JpcCommonOutputHelper = require('./jpc_helper_common_output');
-let JpcAreaHelper = require('./jpc_helper_area');
-let JpcFieldHelper = require('./jpc_helper_field');
+'use strict';
 
-let JpcDiscreteHelper = {
-    outputDiscreteInfo: function (discreteArray, bands, dataObj, unitFactor, pageStatus, segIdx, multiCols, multiColIdx, $CURRENT_RPT, customizeCfg) {
-        let rst = [];
+const JV = require('../jpc_value_define');
+const JE = require('../jpc_rte');
+const JpcTextHelper = require('./jpc_helper_text');
+const JpcCommonOutputHelper = require('./jpc_helper_common_output');
+const JpcAreaHelper = require('./jpc_helper_area');
+const JpcFieldHelper = require('./jpc_helper_field');
+
+const JpcDiscreteHelper = {
+    outputDiscreteInfo: function(discreteArray, bands, dataObj, unitFactor, pageStatus, segIdx, multiCols, multiColIdx, $CURRENT_RPT, customizeCfg) {
+        const rst = [];
         if (discreteArray && dataObj) {
             for (let i = 0; i < discreteArray.length; i++) {
-                let band = bands[discreteArray[i][JV.PROP_BAND_NAME]];
+                const band = bands[discreteArray[i][JV.PROP_BAND_NAME]];
                 if (band && pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] === true) {
                     if (discreteArray[i][JV.PROP_TEXT]) {
                         rst.push(JpcTextHelper.outputText(discreteArray[i][JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, multiCols, multiColIdx));
@@ -21,49 +23,54 @@ let JpcDiscreteHelper = {
                         }
                     }
                     if (discreteArray[i][JV.PROP_DISCRETE_FIELDS]) {
-                        let flexiblePrecisionRefObj = null, flexibleRefField = null;
+                        let flexiblePrecisionRefObj = null;
+                        let flexibleRefField = null;
                         for (let j = 0; j < discreteArray[i][JV.PROP_DISCRETE_FIELDS].length; j++) {
-                            let df = discreteArray[i][JV.PROP_DISCRETE_FIELDS][j];
-                            let value = "";
-                            if (df[JV.PROP_FIELD_ID]) {
-                                // let map_data_field = JE.F(df[JV.PROP_FIELD_ID], $CURRENT_RPT);
-                                let map_data_field = JE.F(df[JV.PROP_FIELD_ID], $CURRENT_RPT);
-                                if (map_data_field.DataSeq !== JV.BLANK_FIELD_INDEX) {
-                                    let data = dataObj[map_data_field.DataNodeName][map_data_field.DataSeq];
-                                    if (data && data.length > 0) {
-                                        if (data.length > segIdx) {
-                                            value = data[segIdx];
-                                        } else {
-                                            value = data[0];
+                            const df = discreteArray[i][JV.PROP_DISCRETE_FIELDS][j];
+                            if (JE.isSignature(df[JV.PROP_FIELD_ID], $CURRENT_RPT)) {
+                                //
+                            } else {
+                                let value = '';
+                                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);
+                                    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) {
+                                            if (data.length > segIdx) {
+                                                value = data[segIdx];
+                                            } else {
+                                                value = data[0];
+                                            }
                                         }
+                                    } else {
+                                        if (map_data_field[JV.PROP_AD_HOC_DATA] && map_data_field[JV.PROP_AD_HOC_DATA].length > 0) {
+                                            value = map_data_field[JV.PROP_AD_HOC_DATA][0];
+                                        } else value = '';
                                     }
-                                } else {
-                                    if (map_data_field[JV.PROP_AD_HOC_DATA] && map_data_field[JV.PROP_AD_HOC_DATA].length > 0) {
-                                        value = map_data_field[JV.PROP_AD_HOC_DATA][0]
-                                    } else value = "";
-                                }
-                                if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {
-                                    let pre_ref_data = null;
-                                    if (flexiblePrecisionRefObj === null) {
-                                        flexiblePrecisionRefObj = {};
-                                        flexibleRefField = JE.F(map_data_field[JV.PROP_PRECISION][JV.PROP_FLEXIBLE_REF_FILED_ID], $CURRENT_RPT);
-                                        pre_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq]; //这里的引用指标必须得存在,哪怕不显示,也要存放在指标集合中!
-                                        for (let decimalObj of map_data_field.flexiblePrecisionRefObj) {
-                                            flexiblePrecisionRefObj["refUnit_" + decimalObj.unit] = decimalObj.decimal;
+                                    if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {
+                                        let pre_ref_data = null;
+                                        if (flexiblePrecisionRefObj === null) {
+                                            flexiblePrecisionRefObj = {};
+                                            flexibleRefField = JE.F(map_data_field[JV.PROP_PRECISION][JV.PROP_FLEXIBLE_REF_FILED_ID], $CURRENT_RPT);
+                                            pre_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq]; // 这里的引用指标必须得存在,哪怕不显示,也要存放在指标集合中!
+                                            for (const decimalObj of map_data_field.flexiblePrecisionRefObj) {
+                                                flexiblePrecisionRefObj['refUnit_' + decimalObj.unit] = decimalObj.decimal;
+                                            }
                                         }
+                                        JpcFieldHelper.resetFlexibleFormat(df, pre_ref_data, flexiblePrecisionRefObj, segIdx, customizeCfg);
+                                    } else {
+                                        JpcFieldHelper.resetFormat(df, map_data_field, customizeCfg);
                                     }
-                                    JpcFieldHelper.resetFlexibleFormat(df, pre_ref_data, flexiblePrecisionRefObj, segIdx, customizeCfg);
-                                } else {
-                                    JpcFieldHelper.resetFormat(df, map_data_field, customizeCfg);
+                                } else if (df[JV.PROP_PARAM_ID]) {
+                                    const param = JE.P(df[JV.PROP_PARAM_ID], $CURRENT_RPT);
+                                    value = param[JV.PROP_DFT_VALUE];
                                 }
-                            } else if (df[JV.PROP_PARAM_ID]) {
-                                let param = JE.P(df[JV.PROP_PARAM_ID], $CURRENT_RPT);
-                                value = param[JV.PROP_DFT_VALUE];
+                                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);
                             }
-                            let 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);
                         }
                     }
                 }
@@ -71,10 +78,10 @@ let JpcDiscreteHelper = {
         }
         return rst;
     },
-    outputPreviewDiscreteInfo: function (discreteArray, bands, unitFactor, pageStatus) {
-        let rst = [];
+    outputPreviewDiscreteInfo: function(discreteArray, bands, unitFactor, pageStatus) {
+        const rst = [];
         for (let i = 0; i < discreteArray.length; i++) {
-            let band = bands[discreteArray[i][JV.PROP_BAND_NAME]];
+            const band = bands[discreteArray[i][JV.PROP_BAND_NAME]];
             if (band && pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] === true) {
                 if (discreteArray[i][JV.PROP_TEXT]) {
                     rst.push(JpcTextHelper.outputText(discreteArray[i][JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));
@@ -86,13 +93,13 @@ let JpcDiscreteHelper = {
                 }
                 if (discreteArray[i][JV.PROP_DISCRETE_FIELDS]) {
                     for (let j = 0; j < discreteArray[i][JV.PROP_DISCRETE_FIELDS].length; j++) {
-                        let df = discreteArray[i][JV.PROP_DISCRETE_FIELDS][j];
-                        let value = "";
+                        const df = discreteArray[i][JV.PROP_DISCRETE_FIELDS][j];
+                        let value = '';
                         if (df[JV.PROP_DFT_VALUE]) {
                             value = df[JV.PROP_DFT_VALUE];
                         }
-                        let item = JpcCommonOutputHelper.createCommonOutputWithoutDecorate(df, value, null);
-                        //position
+                        const item = JpcCommonOutputHelper.createCommonOutputWithoutDecorate(df, value, null);
+                        // position
                         item[JV.PROP_AREA] = JpcAreaHelper.outputArea(df[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
                         rst.push(item);
                     }
@@ -102,8 +109,8 @@ let JpcDiscreteHelper = {
         }
         return rst;
     },
-    outputPreviewSumInfoOutput: function (band, unitFactor, tab) {
-        let rst = [];
+    outputPreviewSumInfoOutput: function(band, unitFactor, tab) {
+        const rst = [];
         if (tab[JV.PROP_TEXT]) {
             rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));
         }
@@ -114,19 +121,19 @@ let JpcDiscreteHelper = {
         }
         if (tab[JV.PROP_SUM_FIELDS]) {
             for (let i = 0; i < tab[JV.PROP_SUM_FIELDS].length; i++) {
-                let tab_field = tab[JV.PROP_SUM_FIELDS][i];
+                const tab_field = tab[JV.PROP_SUM_FIELDS][i];
                 if (!(tab_field[JV.PROP_HIDDEN])) {
                     // rst.push(me.outputTabField(band, tab_field, null, -1, -1, 1, 0, 1, 0, unitFactor, true, controls, 0));
-                    let value = "";
-                    let item = JpcCommonOutputHelper.createCommonOutputWithoutDecorate(tab_field, value, null);
-                    //position
+                    const value = '';
+                    const item = JpcCommonOutputHelper.createCommonOutputWithoutDecorate(tab_field, value, null);
+                    // position
                     item[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
                     rst.push(item);
                 }
             }
         }
         return rst;
-    }
+    },
 }
 
-module.exports = JpcDiscreteHelper;
+module.exports = JpcDiscreteHelper;

+ 28 - 10
app/reports/rpt_component/jpc_field.js

@@ -1,8 +1,10 @@
-let JV = require('./jpc_value_define');
-let JpcField = {
+'use strict';
+
+const JV = require('./jpc_value_define');
+const JpcField = {
     createNew: function(rptTpl) {
-        let JpcFieldResult = {};
-        let me = this;
+        const JpcFieldResult = {};
+        const me = this;
         JpcFieldResult[JV.NODE_DISCRETE_FIELDS] = {};
         if (rptTpl[JV.NODE_FIELD_MAP] && rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {
             for (let i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS].length; i++) {
@@ -24,7 +26,7 @@ let JpcField = {
         JpcFieldResult[JV.NODE_NO_MAPPING_FIELDS] = {};
         if (rptTpl[JV.NODE_NO_MAPPING_FIELDS]) {
             for (let i = 0; i < rptTpl[JV.NODE_NO_MAPPING_FIELDS].length; i++) {
-                me.createSingle(rptTpl[JV.NODE_NO_MAPPING_FIELDS][i], JpcFieldResult[JV.NODE_NO_MAPPING_FIELDS], rptTpl, "NA", JV.BLANK_FIELD_INDEX);
+                me.createSingle(rptTpl[JV.NODE_NO_MAPPING_FIELDS][i], JpcFieldResult[JV.NODE_NO_MAPPING_FIELDS], rptTpl, 'NA', JV.BLANK_FIELD_INDEX);
             }
         }
         JpcFieldResult[JV.NODE_MASTER_FIELDS_EX] = {};
@@ -39,12 +41,17 @@ let JpcField = {
                 me.createSingle(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS_EX][i], JpcFieldResult[JV.NODE_DETAIL_FIELDS_EX], rptTpl, JV.DATA_DETAIL_DATA_EX, i);
             }
         }
-        //NODE_MASTER_FIELDS_EX
+        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]);
+            }
+        }
         return JpcFieldResult;
     },
     createSingle: function(fieldNode, parentObj, rptTpl, dataNodeName, sequence) {
         if (fieldNode && fieldNode[JV.PROP_ID]) {
-            let item = {};
+            const item = {};
             item[JV.PROP_ID] = fieldNode[JV.PROP_ID];
             item[JV.PROP_NAME] = fieldNode[JV.PROP_NAME];
             item[JV.PROP_DATA_TYPE] = fieldNode[JV.PROP_DATA_TYPE];
@@ -60,9 +67,20 @@ let JpcField = {
             }
             item.DataNodeName = dataNodeName;
             item.DataSeq = sequence;
-            parentObj[JV.PROP_ID + "_" + fieldNode[JV.PROP_ID]] = item;
+            parentObj[JV.PROP_ID + '_' + fieldNode[JV.PROP_ID]] = item;
+        }
+    },
+    createSignatureSingle: function(fieldNode, parentObj) {
+        if (fieldNode && fieldNode[JV.PROP_ID]) {
+            const item = {};
+            item[JV.PROP_ID] = fieldNode[JV.PROP_ID];
+            item[JV.PROP_NAME] = fieldNode[JV.PROP_NAME];
+            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];
+            parentObj[JV.PROP_ID + '_' + fieldNode[JV.PROP_ID]] = item;
         }
-    }
+    },
 };
 
-module.exports = JpcField;
+module.exports = JpcField;

+ 16 - 8
app/reports/rpt_component/jpc_param.js

@@ -1,26 +1,34 @@
-let JV = require('./jpc_value_define');
-let JpcParam = {
+'use strict';
+
+const JV = require('./jpc_value_define');
+const JpcParam = {
     createNew: function(rptTpl) {
-        let JpcParamResult = {};
-        let me = this;
+        const JpcParamResult = {};
+        JpcParamResult[JV.NODE_DYNAMIC_DATE_PARAMS] = {};
+        const me = this;
         if (rptTpl[JV.NODE_DISCRETE_PARAMS]) {
             for (let i = 0; i < rptTpl[JV.NODE_DISCRETE_PARAMS].length; i++) {
                 me.createSingle(rptTpl[JV.NODE_DISCRETE_PARAMS][i], JpcParamResult, rptTpl, i);
             }
         }
+        if (rptTpl[JV.NODE_DYNAMIC_DATE_PARAMS]) {
+            for (let i = 0; i < rptTpl[JV.NODE_DYNAMIC_DATE_PARAMS].length; i++) {
+                me.createSingle(rptTpl[JV.NODE_DYNAMIC_DATE_PARAMS][i], JpcParamResult[JV.NODE_DYNAMIC_DATE_PARAMS], rptTpl, i);
+            }
+        }
         return JpcParamResult;
     },
     createSingle: function(paramNode, parentObj, rptTpl, sequence) {
         if (paramNode && paramNode[JV.PROP_ID]) {
-            let item = {};
+            const item = {};
             item[JV.PROP_ID] = paramNode[JV.PROP_ID];
             item[JV.PROP_NAME] = paramNode[JV.PROP_NAME];
             item[JV.PROP_DATA_TYPE] = paramNode[JV.PROP_DATA_TYPE];
             if (paramNode[JV.PROP_DFT_VALUE]) item[JV.PROP_DFT_VALUE] = paramNode[JV.PROP_DFT_VALUE];
             item.DataSeq = sequence;
-            parentObj[JV.PROP_ID + "_" + paramNode[JV.PROP_ID]] = item;
+            parentObj[JV.PROP_ID + '_' + paramNode[JV.PROP_ID]] = item;
         }
-    }
+    },
 };
 
-module.exports = JpcParam;
+module.exports = JpcParam;

+ 51 - 31
app/reports/rpt_component/jpc_rte.js

@@ -1,46 +1,52 @@
+'use strict';
+
 /**
  * Created by Tony on 2016/12/28.
  */
-let strUtil = require('../public/stringUtil');
-let JV = require('./jpc_value_define');
-let JE = {
+const strUtil = require('../public/stringUtil');
+const JV = require('./jpc_value_define');
+const JE = {
     $STR_UTIL: strUtil,
     F: function(fID, $CURRENT_RPT) {
         let rst = null;
-        if ($CURRENT_RPT && ($CURRENT_RPT.fields[JV.NODE_DETAIL_FIELDS][JV.PROP_ID + "_" + fID])) {
-            rst = $CURRENT_RPT.fields[JV.NODE_DETAIL_FIELDS][JV.PROP_ID + "_" + fID];
-        } else if ($CURRENT_RPT && ($CURRENT_RPT.fields[JV.NODE_MASTER_FIELDS][JV.PROP_ID + "_" + fID])) {
-            rst = $CURRENT_RPT.fields[JV.NODE_MASTER_FIELDS][JV.PROP_ID + "_" + fID];
-        } else if ($CURRENT_RPT && ($CURRENT_RPT.fields[JV.NODE_MASTER_FIELDS_EX][JV.PROP_ID + "_" + fID])) {
-            rst = $CURRENT_RPT.fields[JV.NODE_MASTER_FIELDS_EX][JV.PROP_ID + "_" + fID];
-        } else if ($CURRENT_RPT && ($CURRENT_RPT.fields[JV.NODE_DETAIL_FIELDS_EX][JV.PROP_ID + "_" + fID])) {
-            rst = $CURRENT_RPT.fields[JV.NODE_DETAIL_FIELDS_EX][JV.PROP_ID + "_" + fID];
-        } else if ($CURRENT_RPT && ($CURRENT_RPT.fields[JV.NODE_DISCRETE_FIELDS][JV.PROP_ID + "_" + fID])) {
-            rst = $CURRENT_RPT.fields[JV.NODE_DISCRETE_FIELDS][JV.PROP_ID + "_" + fID];
-        } else if ($CURRENT_RPT && ($CURRENT_RPT.fields[JV.NODE_NO_MAPPING_FIELDS][JV.PROP_ID + "_" + fID])) {
-            rst = $CURRENT_RPT.fields[JV.NODE_NO_MAPPING_FIELDS][JV.PROP_ID + "_" + fID];
-        } else {
-            rst = {msg: "the Field-ID is not valid, no result could be found!"};
+        if ($CURRENT_RPT) {
+            if ($CURRENT_RPT.fields[JV.NODE_DETAIL_FIELDS][JV.PROP_ID + '_' + fID]) {
+                rst = $CURRENT_RPT.fields[JV.NODE_DETAIL_FIELDS][JV.PROP_ID + '_' + fID];
+            } else if ($CURRENT_RPT.fields[JV.NODE_MASTER_FIELDS][JV.PROP_ID + '_' + fID]) {
+                rst = $CURRENT_RPT.fields[JV.NODE_MASTER_FIELDS][JV.PROP_ID + '_' + fID];
+            } else if ($CURRENT_RPT.fields[JV.NODE_MASTER_FIELDS_EX][JV.PROP_ID + '_' + fID]) {
+                rst = $CURRENT_RPT.fields[JV.NODE_MASTER_FIELDS_EX][JV.PROP_ID + '_' + fID];
+            } else if ($CURRENT_RPT.fields[JV.NODE_DETAIL_FIELDS_EX][JV.PROP_ID + '_' + fID]) {
+                rst = $CURRENT_RPT.fields[JV.NODE_DETAIL_FIELDS_EX][JV.PROP_ID + '_' + fID];
+            } else if ($CURRENT_RPT.fields[JV.NODE_DISCRETE_FIELDS][JV.PROP_ID + '_' + fID]) {
+                rst = $CURRENT_RPT.fields[JV.NODE_DISCRETE_FIELDS][JV.PROP_ID + '_' + fID];
+            } else if ($CURRENT_RPT.fields[JV.NODE_NO_MAPPING_FIELDS][JV.PROP_ID + '_' + fID]) {
+                rst = $CURRENT_RPT.fields[JV.NODE_NO_MAPPING_FIELDS][JV.PROP_ID + '_' + fID];
+            } else if ($CURRENT_RPT.fields[JV.NODE_SIGNATURE_FIELDS][JV.PROP_ID + '_' + fID]) {
+                rst = $CURRENT_RPT.fields[JV.NODE_SIGNATURE_FIELDS][JV.PROP_ID + '_' + fID];
+            } else {
+                rst = { msg: 'the Field-ID is not valid, no result could be found!' };
+            }
         }
         return rst;
     },
     P: function(pID, $CURRENT_RPT) {
         let rst = null;
-        if ($CURRENT_RPT && ($CURRENT_RPT.params[JV.PROP_ID + "_" + pID])) {
-            rst = $CURRENT_RPT.params[JV.PROP_ID + "_" + pID];
+        if ($CURRENT_RPT && ($CURRENT_RPT.params[JV.PROP_ID + '_' + pID])) {
+            rst = $CURRENT_RPT.params[JV.PROP_ID + '_' + pID];
         } else {
-            rst = {msg: "the Param-ID is not valid, no result was found!"};
+            rst = { msg: 'the Param-ID is not valid, no result was found!' };
         }
         return rst;
     },
-    getCurrentPage: function ($CURRENT_RPT) {
+    getCurrentPage: function($CURRENT_RPT) {
         let rst = 0;
         if ($CURRENT_RPT) {
             rst = $CURRENT_RPT.runTimePageData.currentPage;
         }
         return rst;
     },
-    getTotalPage: function ($CURRENT_RPT) {
+    getTotalPage: function($CURRENT_RPT) {
         let rst = 0;
         if ($CURRENT_RPT) {
             rst = $CURRENT_RPT.totalPages;
@@ -49,7 +55,7 @@ let JE = {
     },
     getFieldDataLen: function(field, dataObj) {
         let rst = 0;
-        if (field.DataNodeName === "NA") {
+        if (field.DataNodeName === 'NA') {
             if (!field[JV.PROP_AD_HOC_DATA]) {
                 field[JV.PROP_AD_HOC_DATA] = [];
             }
@@ -65,8 +71,8 @@ let JE = {
         }
         return rst;
     },
-    setFieldValue: function (field, dataObj, valIdx, newValue) {
-        if (field.DataNodeName === "NA") {
+    setFieldValue: function(field, dataObj, valIdx, newValue) {
+        if (field.DataNodeName === 'NA') {
             if (!field[JV.PROP_AD_HOC_DATA]) {
                 field[JV.PROP_AD_HOC_DATA] = [];
             }
@@ -81,9 +87,9 @@ let JE = {
             dataObj[field.DataNodeName][field.DataSeq][valIdx] = newValue;
         }
     },
-    getFieldValue: function (field, dataObj, valIdx, newVal) {
+    getFieldValue: function(field, dataObj, valIdx, newVal) {
         let rst = null;
-        if (field.DataNodeName === "NA") {
+        if (field.DataNodeName === 'NA') {
             if (!field[JV.PROP_AD_HOC_DATA]) {
                 field[JV.PROP_AD_HOC_DATA] = [];
             }
@@ -112,8 +118,8 @@ let JE = {
         if (rst === null || rst === undefined) rst = newVal;
         return rst;
     },
-    removeFieldValue: function (field, dataObj, valIdx) {
-        if (field.DataNodeName === "NA") {
+    removeFieldValue: function(field, dataObj, valIdx) {
+        if (field.DataNodeName === 'NA') {
             if (field[JV.PROP_AD_HOC_DATA].length > valIdx && valIdx >= 0) {
                 field[JV.PROP_AD_HOC_DATA].splice(valIdx, 1);
             }
@@ -123,8 +129,8 @@ let JE = {
             }
         }
     },
-    insertFieldValue: function (field, dataObj, valIdx, newValue) {
-        if (field.DataNodeName === "NA") {
+    insertFieldValue: function(field, dataObj, valIdx, newValue) {
+        if (field.DataNodeName === 'NA') {
             if (field[JV.PROP_AD_HOC_DATA].length > valIdx && valIdx >= 0) {
                 field[JV.PROP_AD_HOC_DATA].splice(valIdx, 0, newValue);
             } else if (field[JV.PROP_AD_HOC_DATA].length <= valIdx) {
@@ -137,6 +143,20 @@ let JE = {
                 dataObj[field.DataNodeName][field.DataSeq][dataObj[field.DataNodeName][field.DataSeq].length] = newValue;
             }
         }
+    },
+    isSignature: function(fID, $CURRENT_RPT) {
+        let rst = false;
+        if ($CURRENT_RPT.fields[JV.NODE_SIGNATURE_FIELDS]) {
+            rst = $CURRENT_RPT.fields[JV.NODE_SIGNATURE_FIELDS][JV.PROP_ID + '_' + fID] !== undefined;
+        }
+        return rst;
+    },
+    isDynamicParam: function(pID, $CURRENT_RPT) {
+        let rst = false;
+        if ($CURRENT_RPT.params[JV.NODE_DYNAMIC_DATE_PARAMS]) {
+            rst = $CURRENT_RPT.params[JV.NODE_DYNAMIC_DATE_PARAMS][JV.PROP_ID + '_' + pID] !== undefined;
+        }
+        return rst;
     }
 };
 

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

@@ -13,6 +13,8 @@ module.exports = {
     NODE_FIELD_MAP: '指标_数据_映射',
     NODE_DISCRETE_FIELDS: '离散指标_集合',
     NODE_NO_MAPPING_FIELDS: '无映射离散指标_集合',
+    NODE_SIGNATURE_FIELDS: '电子签名离散指标_集合',
+    NODE_DYNAMIC_DATE_PARAMS: '动态日期离散参数_集合',
     NODE_DISCRETE_PARAMS: '离散参数_集合',
     NODE_MASTER_FIELDS: '主数据指标_集合',
     NODE_MASTER_FIELDS_EX: '主数据指标_拓展集合',
@@ -149,6 +151,8 @@ module.exports = {
     PROP_PREFIX: 'Prefix',
     PROP_SUFFIX: 'Suffix',
     PROP_FORMAT: 'Format',
+    PROP_PATH: 'Path',
+    PROP_PIC_STREAM: 'Picture',
 
     PROP_SHOW_ZERO: 'ShowZero',
     PROP_EXTENSION_TYPE: 'ExtType',

+ 13 - 1
app/reports/util/rpt_pdf_util.js

@@ -150,15 +150,27 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
                     restTopH = restH;
                 }
             }
+            let spaceIdxArr = [];
             for (let i = 0; i < values.length; i++) {
                 // area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (height / values.length) + offsetY;
                 // area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (height / values.length) + offsetY;
                 area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (ah / values.length) + offsetY + restTopH;
-                area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (ah / values.length) + offsetY + restTopH;
+                area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (ah / values.length) + offsetY + restBottomH;
                 if (values[i] === null || values[i] === undefined || values[i] === 'null') {
                     values[i] = "";
                 }
+                // 因pdfkit输出空格只有一半宽度,需要额外加空格补上 -----------------------------
+                if (typeof(values[i]) === "string") {
+                    for (let j = 0; j < values[i].length; j++) {
+                        if (values[i][j] === ' ') spaceIdxArr.push(j);
+                    }
+                }
+                for (let j = spaceIdxArr.length - 1; j >= 0; j--) {
+                    values[i] = values[i].slice(0, spaceIdxArr[j]) + ' ' + values[i].slice(spaceIdxArr[j]);
+                }
+                // -----------------------------
                 private_drawText(values[i], area, font, control);
+                spaceIdxArr = [];
             }
         }
     }

+ 15 - 3
app/service/stage.js

@@ -70,17 +70,29 @@ module.exports = app => {
         }
 
         /**
-         * 获取标段下的期最大数量(报表选择用,只需要一些key信息,不需要计算详细数据)
+         * 获取标段下的期列表(报表选择用,只需要一些key信息,不需要计算详细数据,也懒得一个个字段写了,用*来处理)
          * @param tenderId
          * @returns {Promise<void>}
          */
-        async getValidStageShort(tenderId) {
-            const sql = 'select id, zh_stage.order from zh_stage where tid = ? order by zh_stage.order';
+        async getValidStagesShort(tenderId) {
+            console.log('tenderId: ' + tenderId);
+            const sql = 'select * from zh_stage where tid = ? order by zh_stage.order';
             const sqlParam = [tenderId];
             return await this.db.query(sql, sqlParam);
         }
 
         /**
+         * 获取某一期信息(报表用)
+         * @param stageId
+         * @returns {Promise<void>}
+         */
+        async getStageById(stageId) {
+            const sql = 'select * from zh_stage where id = ? order by zh_stage.order';
+            const sqlParam = [stageId];
+            return await this.db.query(sql, sqlParam);
+        }
+
+        /**
          * 获取标段下的全部计量期,按倒序
          * @param tenderId
          * @returns {Promise<void>}

+ 1 - 1
app/service/stage_pay.js

@@ -57,7 +57,7 @@ module.exports = app => {
          */
         async getAuditorStageData(sid, times, order) {
             const sql = 'SELECT SP.*,' +
-                '    P.`csorder`, P.`cstimes`, P.`csaorder`, P.`order`, P.uid, P.minus, P.ptype, P.sprice, P.sexpr, P.rprice, P.rexpr, P.is_yf, P.dl_type, P.dl_count, P.dl_tp_type, P.dl_tp ' +
+                '    P.`csorder`, P.`cstimes`, P.`csaorder`, P.`order`, P.uid, P.minus, P.ptype, P.sprice, P.sexpr, P.rprice, P.rexpr, P.is_yf, P.dl_type, P.dl_count, P.dl_tp_type, P.dl_tp, P.name as pName ' +
                 '  FROM ?? As SP, ?? As P ' +
                 '  WHERE SP.`sid` = ? AND SP.`stimes` = ? AND SP.`sorder` = ? AND SP.`pid` = P.`id` AND P.`valid`' +
                 '  ORDER BY P.`order`';

+ 12 - 6
app/view/report/index.ejs

@@ -34,14 +34,14 @@
                     <div class="toolsbar-f d-flex justify-content-between">
                         <div class="print-toolsbar">
                             <div class="panel">
-                                <div class="panel-body">
+                                <div class="panel-body" id="export_div">
                                     <button class="btn btn-secondary btn-sm" type="button">
                                         <i class="fa fa-print"></i><br>
-                                        打印 <span id="checkCount" class="badge badge-light">5</span>
+                                        打印 <span id="checkCountPrint" class="badge badge-light">0</span>
                                     </button>
                                     <button class="btn btn-secondary btn-sm" type="button" href="#export" data-toggle="modal" data-target="#export">
                                         <i class="fa fa-share-square-o"></i><br>
-                                        导出 <span id="checkCount" class="badge badge-light">5</span>
+                                        导出 <span id="checkCountExport" class="badge badge-light">0</span>
                                     </button>
                                 </div>
                             </div>
@@ -69,9 +69,9 @@
                             <div class="panel">
                                 <div class="panel-body">
                                     <div class="btn-group" role="group">
-                                        <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="缩小">-</button>
-                                        <button class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="重置默认大小">1000%</button>
-                                        <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="放大">+</button>
+                                        <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="缩小" onclick="zTreeOprObj.scaleReport(-0.25)">-</button>
+                                        <button id="btnNormalScale" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="重置默认大小" onclick="zTreeOprObj.scaleReport(0)">100%</button>
+                                        <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="放大" onclick="zTreeOprObj.scaleReport(0.25)">+</button>
                                     </div>
                                 </div>
                                 <div class="panel-foot text-muted">
@@ -128,6 +128,8 @@
         </div>
     </div>
 </div>
+<!--1弹出纸张页边距-->
+<%include ./rpt_margins.html %>
 
 <script type="text/javascript">  autoFlashHeight();</script>
 <!-- zTree -->
@@ -156,18 +158,22 @@
     const STAGE_ORDER = <%- stg_order %>;
     const STAGE_TIMES = <%- stg_times %>;
     const STAGE_LIST = <%- stage_list %>;
+    const STAGE_STATUS = <%- stg_status %>;
     let current_stage_order = -1;
     let current_stage_id = -1;
     let current_stage_times = -1;
+    let current_stage_status = -1;
 
     if (STAGE_ORDER > 0) {
         current_stage_order = STAGE_ORDER;
         current_stage_id = STAGE_ID;
         current_stage_times = STAGE_TIMES;
+        current_stage_status = STAGE_STATUS;
     } else if (STAGE_LIST.length > 0) {
         current_stage_order = STAGE_LIST[STAGE_LIST.length - 1].order;
         current_stage_id = STAGE_LIST[STAGE_LIST.length - 1].id;
         current_stage_times = STAGE_LIST[STAGE_LIST.length - 1].times;
+        current_stage_status = STAGE_LIST[STAGE_LIST.length - 1].status;
     }
     buildStageSelection();
 

+ 40 - 17
app/view/report/rpt_margins.html

@@ -1,36 +1,59 @@
-<div class="modal fade" id="paper_margins" data-backdrop="static">
+<div class="modal fade" id="paper" data-backdrop="static">
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title">页边距(毫米)</h5>
+                <h5 class="modal-title">页边距(毫米)</h5>
                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">&times;</span>
                 </button>
             </div>
             <div class="modal-body">
-                <div class="row" id="element_area_1">
-                    <div class="form-group col-md-3">
-                        <label>页边距-左</label>
-                        <input class="form-control input-sm" id="elementMargin_Left" type="number" value="10" step="1" min="0" max="100" onchange="rptControlObj.changeMargin('Left', this)" onkeyup="rptControlObj.changeMargin('Left', this)">
+                <div class="row mb-1 justify-content-center">
+                    <div class="col-3">
+                        <div class="input-group input-group-sm ">
+                            <div class="input-group-prepend">
+                                <span class="input-group-text" id="basic-addon1">上</span>
+                            </div>
+                            <input type="number" class="form-control" value="12">
+                        </div>
                     </div>
-                    <div class="form-group col-md-3">
-                        <label>页边距-右</label>
-                        <input class="form-control input-sm" id="elementMargin_Right" type="number" value="10" step="1" min="0" max="100" onchange="rptControlObj.changeMargin('Right', this)" onkeyup="rptControlObj.changeMargin('Right', this)">
+                </div>
+                <div class="row mb-1 align-items-center">
+                    <div class="col-3">
+                        <div class="input-group input-group-sm ">
+                            <div class="input-group-prepend">
+                                <span class="input-group-text" id="basic-addon2">左</span>
+                            </div>
+                            <input type="number" class="form-control" value="12">
+                        </div>
+                    </div>
+                    <div class="col-6">
+                        <h1 class="display-4 text-center"><i class="fa fa-file-o"></i></h1>
                     </div>
-                    <div class="form-group col-md-3">
-                        <label>页边距-上</label>
-                        <input class="form-control input-sm" id="elementMargin_Top" type="number" value="10" step="1" min="0" max="100" onchange="rptControlObj.changeMargin('Top', this)" onkeyup="rptControlObj.changeMargin('Top', this)">
+                    <div class="col-3">
+                        <div class="input-group input-group-sm ">
+                            <div class="input-group-prepend">
+                                <span class="input-group-text" id="basic-addon3">右</span>
+                            </div>
+                            <input type="number" class="form-control" value="12">
+                        </div>
                     </div>
-                    <div class="form-group col-md-3">
-                        <label>页边距-下</label>
-                        <input class="form-control input-sm" id="elementMargin_Bottom" type="number" value="10" step="1" min="0" max="100" onchange="rptControlObj.changeMargin('Bottom', this)" onkeyup="rptControlObj.changeMargin('Bottom', this)">
+                </div>
+                <div class="row mb-1 justify-content-center">
+                    <div class="col-3">
+                        <div class="input-group input-group-sm ">
+                            <div class="input-group-prepend">
+                                <span class="input-group-text" id="basic-addon4">下</span>
+                            </div>
+                            <input type="number" class="form-control" value="12">
+                        </div>
                     </div>
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-link float-left" data-dismiss="modal" onclick="rptControlObj.saveCustCfg()">存为默认值</button>
-                <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</button>
+                <button type="button" class="btn btn-link float-left" data-dismiss="modal">恢复默认值</button>
                 <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                <a href="" class="btn btn-primary">确定</a>
             </div>
         </div>
     </div>

+ 26 - 26
package-lock.json

@@ -3504,9 +3504,9 @@
           "resolved": "https://registry.npmjs.org/egg-multipart/-/egg-multipart-1.5.1.tgz",
           "integrity": "sha512-xh64J7An0UdWRnGFikEEkKGLywjhANfK7XX9/yeXOXfL09FmVenQZJgsdUz13BEKIyWarlY9sgmf95+IpUMA2w==",
           "requires": {
-            "co": "^4.6.0",
-            "co-busboy": "^1.3.1",
-            "humanize-bytes": "^1.0.1"
+            "co": "4.6.0",
+            "co-busboy": "1.4.0",
+            "humanize-bytes": "1.0.1"
           }
         }
       }
@@ -4241,13 +4241,13 @@
       "resolved": "https://registry.npmjs.org/egg-multipart/-/egg-multipart-2.7.1.tgz",
       "integrity": "sha512-MFhEY05dkOTDCqRVO34MY57yqjoSF1usuEjCBBGJBgT9QeHwzGf5Yb1D4d7BzDR9QQA5Ehcmc40f/LlHAZDMQg==",
       "requires": {
-        "co-busboy": "^1.4.0",
-        "humanize-bytes": "^1.0.1",
-        "moment": "^2.22.2",
-        "mz": "^2.7.0",
-        "mz-modules": "^2.1.0",
-        "stream-wormhole": "^1.1.0",
-        "uuid": "^3.3.2"
+        "co-busboy": "1.4.0",
+        "humanize-bytes": "1.0.1",
+        "moment": "2.24.0",
+        "mz": "2.7.0",
+        "mz-modules": "2.1.0",
+        "stream-wormhole": "1.1.0",
+        "uuid": "3.3.2"
       },
       "dependencies": {
         "moment": {
@@ -4260,11 +4260,11 @@
           "resolved": "https://registry.npmjs.org/mz-modules/-/mz-modules-2.1.0.tgz",
           "integrity": "sha512-sjk8lcRW3vrVYnZ+W+67L/2rL+jbO5K/N6PFGIcLWTiYytNr22Ah9FDXFs+AQntTM1boZcoHi5qS+CV1seuPog==",
           "requires": {
-            "glob": "^7.1.2",
-            "ko-sleep": "^1.0.3",
-            "mkdirp": "^0.5.1",
-            "pump": "^3.0.0",
-            "rimraf": "^2.6.1"
+            "glob": "7.1.2",
+            "ko-sleep": "1.0.3",
+            "mkdirp": "0.5.1",
+            "pump": "3.0.0",
+            "rimraf": "2.6.2"
           }
         },
         "pump": {
@@ -4272,8 +4272,8 @@
           "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
           "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
           "requires": {
-            "end-of-stream": "^1.1.0",
-            "once": "^1.3.1"
+            "end-of-stream": "1.4.1",
+            "once": "1.4.0"
           }
         },
         "uuid": {
@@ -6351,7 +6351,7 @@
           "bundled": true,
           "optional": true,
           "requires": {
-            "safer-buffer": ">= 2.1.2 < 3"
+            "safer-buffer": "2.1.2"
           }
         },
         "ignore-walk": {
@@ -6436,9 +6436,9 @@
           "bundled": true,
           "optional": true,
           "requires": {
-            "debug": "^2.1.2",
-            "iconv-lite": "^0.4.4",
-            "sax": "^1.2.4"
+            "debug": "2.6.9",
+            "iconv-lite": "0.4.24",
+            "sax": "1.2.4"
           }
         },
         "node-pre-gyp": {
@@ -6463,8 +6463,8 @@
           "bundled": true,
           "optional": true,
           "requires": {
-            "abbrev": "1",
-            "osenv": "^0.1.4"
+            "abbrev": "1.1.1",
+            "osenv": "0.1.5"
           }
         },
         "npm-bundled": {
@@ -6523,8 +6523,8 @@
           "bundled": true,
           "optional": true,
           "requires": {
-            "os-homedir": "^1.0.0",
-            "os-tmpdir": "^1.0.0"
+            "os-homedir": "1.0.2",
+            "os-tmpdir": "1.0.2"
           }
         },
         "path-is-absolute": {
@@ -6620,7 +6620,7 @@
           "bundled": true,
           "optional": true,
           "requires": {
-            "safe-buffer": "~5.1.0"
+            "safe-buffer": "5.1.2"
           }
         },
         "strip-ansi": {