Преглед изворни кода

Merge branch 'dev' of http://192.168.1.41:3000/maixinrong/Calculation into dev

MaiXinRong пре 1 година
родитељ
комит
71a5d52114

+ 6 - 0
app/public/report/js/jpc_output.js

@@ -610,6 +610,12 @@ let JpcCanvasOutput = {
                     private_drawCell(cell, fonts, styles, controls, newPageMergeBand);
                 }
             }
+            //图表
+            if (page.figure_cells && page.figure_cells.length > 0) {
+                JpcFigureOutput.offsetX = this.offsetX;
+                JpcFigureOutput.offsetY = this.offsetY;
+                JpcFigureOutput.drawToCanvas(canvas, page);
+            }
         }
     },
     drawPageBorder: function(rptTpl, canvas, resolution) {

+ 273 - 0
app/public/report/js/rpt_figure.js

@@ -0,0 +1,273 @@
+//本文档是图形输出的接口实现
+
+const JpcFigureOutput = {
+    offsetX: 0,
+    offsetY: 0,
+    scaleFactor: 1,
+	_iniCavas: function(canvas, width, height) {
+		if (canvas) {
+			let ctx = canvas.getContext('2d');
+		}
+	},
+	_draw: function(ctx, figure, saveAsData = false) {
+		if (figure.imageData) {
+			//直接图形输出
+            ctx.putImageData(figure.imageData, figure.area.Left + this.offsetX, figure.area.Top + this.offsetY);
+		} else {
+			let width = figure.area.Right - figure.area.Left;
+			let height = figure.area.Bottom - figure.area.Top;
+			let xSteps = figure.coordinateAxis.axisX.steps;
+			let ySteps = figure.coordinateAxis.axisY.steps;
+			let xStepW = width / xSteps;
+			let yStepH = height / ySteps;
+			ctx.save();
+            ctx.translate(0.5,0.5);
+            ctx.beginPath();
+            if (figure.coordinateAxis.axisX.isShowLine) {
+                //画竖线
+                for (let idx = 0; idx < xSteps; idx++) {
+                    ctx.lineWidth = 1;
+                    ctx.strokeStyle = 'black';
+                    ctx.moveTo(Math.round(figure.area.Left + xStepW * (idx + 1) + this.offsetX), figure.area.Bottom + this.offsetY);
+                    ctx.lineTo(Math.round(figure.area.Left + xStepW * (idx + 1) + this.offsetX), figure.area.Top + this.offsetY);
+                }
+            }
+            if (figure.coordinateAxis.axisY.isShowLine) {
+                //画横线
+                for (let idx = 0; idx < ySteps; idx++) {
+                    ctx.lineWidth = 1;
+                    ctx.strokeStyle = 'black';
+                    ctx.moveTo(figure.area.Left + this.offsetX, Math.round(figure.area.Bottom - yStepH * (idx + 1) + this.offsetY));
+                    ctx.lineTo(figure.area.Right + this.offsetX, Math.round(figure.area.Bottom - yStepH * (idx + 1) + this.offsetY));
+                }
+            }
+            ctx.stroke();
+            for (let ctIdx = 0; ctIdx < figure.contents.length; ctIdx++) {
+				const content = figure.contents[ctIdx];
+				ctx.beginPath();
+                for (let idx = 0; idx < content.values.length; idx++) {
+					let xPos = figure.area.Left + xStepW * idx + xStepW / 2 + this.offsetX;
+					let yPos = figure.area.Bottom - (content.values[idx] / content.maxValue) * height + this.offsetY;
+                    ctx.lineWidth = 1;
+                    ctx.strokeStyle = content.color;
+                    if (content.style === 'dash') ctx.setLineDash([10, 5]);
+                    switch (figure.config.dispType) {
+						case 'line':
+							//折线图
+							if (idx === 0) {
+								ctx.moveTo(xPos, yPos);
+							} else {
+								ctx.lineTo(xPos, yPos);
+							}
+						break;
+						case 'pole':
+							//柱图
+						break;
+						default:
+							//....
+						break;
+					}
+				}
+				ctx.stroke();
+			}
+			ctx.restore();
+            if (saveAsData) {
+                //保存当前图形数据
+                figure.imageData = ctx.getImageData(figure.area.Left + this.offsetX, figure.area.Top + this.offsetY, width, height);
+            }
+		}
+	},
+	drawToCanvas: function(canvas, currentPageData) {
+		//预览用
+		if (canvas && currentPageData) {
+			const ctx = canvas.getContext("2d");
+			if (currentPageData.figure_cells && currentPageData.figure_cells.length > 0) {
+				for (let figure of currentPageData.figure_cells) {
+					this._draw(ctx, figure, false);
+				}
+			}
+		}
+	},
+    _drawPdf: function(doc, figure) {
+        const PDF_SCALE = 0.75;
+        if (figure.imageData) {
+			//直接图形输出
+		} else {
+			let width = figure.area.Right - figure.area.Left;
+			let height = figure.area.Bottom - figure.area.Top;
+			let xSteps = figure.coordinateAxis.axisX.steps;
+			let ySteps = figure.coordinateAxis.axisY.steps;
+			let xStepW = width / xSteps;
+			let yStepH = height / ySteps;
+
+            if (figure.coordinateAxis.axisX.isShowLine) {
+                //画竖线
+                for (let idx = 0; idx < xSteps; idx++) {
+                    doc.setLineWidth(0.8);
+                    doc.setDrawColor('black');
+                    doc.line((Math.round(figure.area.Left + xStepW * (idx + 1) + this.offsetX)) * PDF_SCALE, (figure.area.Bottom + this.offsetY) * PDF_SCALE,
+                             (Math.round(figure.area.Left + xStepW * (idx + 1) + this.offsetX)) * PDF_SCALE, (figure.area.Top + this.offsetY) * PDF_SCALE);
+                }
+            }
+            if (figure.coordinateAxis.axisY.isShowLine) {
+                //画横线
+                for (let idx = 0; idx < ySteps; idx++) {
+                    doc.setLineWidth(0.8);
+                    doc.setDrawColor('black');
+                    doc.line((figure.area.Left + this.offsetX) * PDF_SCALE, (Math.round(figure.area.Bottom - yStepH * (idx + 1) + this.offsetY)) * PDF_SCALE,
+                            (figure.area.Right + this.offsetX) * PDF_SCALE, (Math.round(figure.area.Bottom - yStepH * (idx + 1) + this.offsetY)) * PDF_SCALE);
+                }
+            }
+
+            for (let ctIdx = 0; ctIdx < figure.contents.length; ctIdx++) {
+				const content = figure.contents[ctIdx];
+                let preXPos = 0, preYPos = 0;
+                for (let idx = 0; idx < content.values.length; idx++) {
+					let xPos = figure.area.Left + xStepW * idx + xStepW / 2 + this.offsetX;
+					let yPos = figure.area.Bottom - (content.values[idx] / content.maxValue) * height + this.offsetY;
+                    doc.setLineWidth(0.8);
+                    doc.setDrawColor(content.color);
+                    if (content.style === 'dash') doc.setLineDash([10, 5]);
+                    switch (figure.config.dispType) {
+						case 'line':
+							//折线图
+							if (idx > 0) {
+								// ctx.lineTo(xPos, yPos);
+                                doc.line(preXPos * PDF_SCALE, preYPos * PDF_SCALE, xPos * PDF_SCALE, yPos * PDF_SCALE);
+							}
+                            preXPos = xPos;
+                            preYPos = yPos;
+						break;
+						case 'pole':
+							//柱图
+						break;
+						default:
+							//....
+						break;
+					}
+				}
+			}
+		}
+    },
+	drawToPdf: function(doc, currentPageData) {
+		//导出PDF用
+		if (doc && currentPageData) {
+			if (currentPageData.figure_cells && currentPageData.figure_cells.length > 0) {
+				for (let figure of currentPageData.figure_cells) {
+					this._drawPdf(doc, figure);
+				}
+			}
+		}
+	},
+    _drawSvg: function(figure, isHtoV, actArea) {
+        let rst = [];
+        if (figure.imageData) {
+			//直接图形输出
+		} else {
+			let width = figure.area.Right - figure.area.Left;
+			let height = figure.area.Bottom - figure.area.Top;
+			let xSteps = figure.coordinateAxis.axisX.steps;
+			let ySteps = figure.coordinateAxis.axisY.steps;
+			let xStepW = width / xSteps;
+			let yStepH = height / ySteps;
+            if (figure.coordinateAxis.axisX.isShowLine) {
+                //画竖线
+                for (let idx = 0; idx < xSteps; idx++) {
+                    rst.push("<line x1='" + Math.round(figure.area.Left + xStepW * (idx + 1) + this.offsetX) + "' y1='" + (figure.area.Bottom + this.offsetY) +
+                            "' x2='" + Math.round(figure.area.Left + xStepW * (idx + 1) + this.offsetX) + "' y2='" + (figure.area.Top + this.offsetY) +
+                            "' style='stroke:rgb(0,0,0);stroke-width:1'" + HtoVStr + "/>")
+                }
+            }
+            if (figure.coordinateAxis.axisY.isShowLine) {
+                //画横线
+                for (let idx = 0; idx < ySteps; idx++) {
+                    rst.push("<line x1='" + (figure.area.Left + this.offsetX) + "' y1='" + Math.round(figure.area.Bottom - yStepH * (idx + 1) + this.offsetY) +
+                            "' x2='" + (figure.area.Right + this.offsetX) + "' y2='" + Math.round(figure.area.Bottom - yStepH * (idx + 1) + this.offsetY) +
+                            "' style='stroke:rgb(0,0,0);stroke-width:1'" + HtoVStr + "/>")
+                }
+            }
+            let HtoVStr = "";
+            if (isHtoV) {
+                //引用了padding后,top坐标不用考虑offset了
+                HtoVStr = ` transform="translate(${(actArea.Bottom - actArea.Top + 2)},0) rotate(90)"`;
+            }
+            for (let ctIdx = 0; ctIdx < figure.contents.length; ctIdx++) {
+				const content = figure.contents[ctIdx];
+                let pointStr = '';
+                let stroke_dasharray = '';
+                // ctx.strokeStyle = content.color;
+                if (content.style === 'dash') stroke_dasharray = `10 5`;
+                for (let idx = 0; idx < content.values.length; idx++) {
+					let xPos = figure.area.Left + xStepW * idx + xStepW / 2 + this.offsetX;
+					let yPos = figure.area.Bottom - (content.values[idx] / content.maxValue) * height + this.offsetY;
+                    if (idx > 0) pointStr = pointStr + ',';
+                    pointStr = pointStr + `${xPos},${yPos}`;
+                    switch (figure.config.dispType) {
+						case 'line':
+							//折线图
+							if (idx === content.values.length - 1) {
+								// ctx.moveTo(xPos, yPos);
+                                rst.push("<polyline points='" + pointStr +
+                                        "' style='fill:none;stroke:" + content.color + ";stroke-width:1;stroke-dasharray:" + stroke_dasharray + "'" + HtoVStr + "/>")
+							}
+						break;
+						case 'pole':
+							//柱图
+						break;
+						default:
+							//....
+						break;
+					}
+				}
+			}
+		}
+        return rst;
+    },
+	toSvgData: function(currentPageData, isHtoV, actArea) {
+		//打印用
+        let rst = [];
+		if (currentPageData) {
+			if (currentPageData.figure_cells && currentPageData.figure_cells.length > 0) {
+				for (let figure of currentPageData.figure_cells) {
+					rst = rst.concat(this._drawSvg(figure, isHtoV, actArea));
+				}
+			}
+		}
+        return rst;
+	},
+	toImageData: function(canvas, pageData) {
+		//导出Excel用
+		if (canvas && pageData) {
+			const ctx = canvas.getContext("2d");
+            for (let currentPageData of pageData.items) {
+                if (currentPageData.figure_cells && currentPageData.figure_cells.length > 0) {
+                    for (let fIdx = 0; fIdx < currentPageData.figure_cells.length; fIdx++) {
+                        this._draw(ctx, currentPageData.figure_cells[fIdx], true);
+                        // if (fIdx === currentPageData.figure_cells.length - 1) {
+                        //     this._draw(ctx, currentPageData.figure_cells[fIdx], true);
+                        // } else {
+                        //     this._draw(ctx, currentPageData.figure_cells[fIdx], false);
+                        // }
+                    }
+                }
+            }
+		}
+	},
+    getBase64: function(canvas, currentPageData) {
+        let rst = null;
+        if (canvas && currentPageData) {
+            const ctx = canvas.getContext("2d");
+            if (currentPageData.figure_cells && currentPageData.figure_cells.length > 0) {
+                for (let fIdx = 0; fIdx < currentPageData.figure_cells.length - 1; fIdx++) {
+                    if (fIdx === currentPageData.figure_cells.length - 1) {
+                        canvas.width = figure.area.Right - figure.area.Left;
+                        canvas.height = figure.area.Bottom - figure.area.Top;
+                        ctx.putImageData(figure.imageData, 0, 0);
+                        rst = canvas.toDataURL();
+                    }
+                }
+            }
+        }
+        return rst;
+    },
+};

+ 6 - 0
app/public/report/js/rpt_jspdf.js

@@ -115,6 +115,12 @@ const JpcJsPDFHelper = {
                 for (let cell of page.signature_audit_cells) {
                     private_drawCell(doc, ctx, cell, fonts, styles, controls, newPageMergeBand);
                 }
+                //图表
+                if (page.figure_cells && page.figure_cells.length > 0) {
+                    JpcFigureOutput.offsetX = 0;
+                    JpcFigureOutput.offsetY = 0;
+                    JpcFigureOutput.drawToPdf(doc, page);
+                }                
                 // 计量有电子签名,要单独处理
                 let ppStatus = zTreeOprObj._chkPrePayStatus();
                 for (let cell of page.signature_cells) {

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

@@ -586,6 +586,13 @@ let zTreeOprObj = {
             JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
             // JpcCanvasOutput.highlightConflictArea(me.currentRptPageRst, pageNum);
             JpcCanvasOutput.drawToCanvas(me.currentRptPageRst, canvas, me.currentPage);
+
+            //测试:
+            // JpcFigureOutput.offsetX = JpcCanvasOutput.offsetX;
+            // JpcFigureOutput.offsetY = JpcCanvasOutput.offsetY;
+            // JpcFigureOutput.drawToCanvas(canvas, page);
+            // let invisibleCanvas = document.getElementById("invisibleCanvas");
+            // JpcFigureOutput.toImageData(canvas, me.currentRptPageRst);
         }
         me.displayPageValue();
     },

+ 7 - 0
app/public/report/js/rpt_print.js

@@ -95,6 +95,13 @@ let rptPrintHelper = {
                 svgPageArr.push(buildSignatureCellSvg(cell, styles, controls, fonts, page[JV.PROP_PAGE_MERGE_BORDER], pagesData[JV.BAND_PROP_MERGE_BAND],
                     offsetX - actAreaOffsetX, offsetY - actAreaOffsetY, adjustY, canvas, isHtoV, pixelSize, actAreaArr[idx]));
             }
+            //图表
+            if (page.figure_cells && page.figure_cells.length > 0) {
+                JpcFigureOutput.offsetX = offsetX - actAreaOffsetX;
+                JpcFigureOutput.offsetY = offsetY - actAreaOffsetY;
+                svgPageArr = svgPageArr.concat(JpcFigureOutput.toSvgData(page, isHtoV, actAreaArr[idx]));
+            }
+            
             if (closeWaterMark === 0) {
                 for (let cell of page.watermark_cells) {
                     cell.pic = sessionStorage.waterMarkStr;

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

@@ -20,6 +20,8 @@ JpcBillTabSrv.prototype.createNew = function() {
         me.signatureRst = [];
         me.signatureDateRst = [];
         me.signatureAuditRst = [];
+        me.figureRst = [];
+
         me.totalPages = 0;
     };
     JpcBillTabResult.sorting = function(rptTpl) {

+ 7 - 2
app/reports/rpt_component/jpc_cross_tab.js

@@ -223,6 +223,7 @@ JpcCrossTabSrv.prototype.createNew = function() {
         me.interactRst = [];
         me.pageRowRecAmt = []; // 记录每一页的输出行数量
         me.pageColRecAmt = []; // 记录每一页的输出列数量
+        me.figureRst = [];
     };
     JpcCrossTabResult.sorting = function(rptTpl, dataObj, dataSeq, $CURRENT_RPT) {
         const me = this;
@@ -469,6 +470,8 @@ JpcCrossTabSrv.prototype.createNew = function() {
                                 currentSortedContentSequence = null;
                                 counterRowRec = 0;
                             }
+                            me.pageRowRecAmt.push(maxRowRec);
+                            me.pageColRecAmt.push(maxColRec);
                             private_addTabValue(me.dispValueIdxLst_Row, currentSortedRowSequence, segIdx, counterRowRec, maxRowRec, me.dispSerialIdxLst_Row, me.col_sum_fields_value_total, me.dispSumValueLst_Col);
                             private_addTabValue(me.dispValueIdxLst_Col, currentSortedColSequence, segIdx, counterColRec, maxColRec, null, me.row_sum_fields_value_total, me.dispSumValueLst_Row);
                             private_addContentValue(me.dispValueIdxLst_Content, currentSortedContentSequence, segIdx, counterRowRec, maxRowRec, counterColRec, maxColRec, me.page_seg_map, pageIdx);
@@ -481,6 +484,8 @@ JpcCrossTabSrv.prototype.createNew = function() {
                                 counterRowRec = 0;
                                 me.pageStatusLst.push(pageStatus.slice(0));
                                 pageIdx++;
+                                me.pageRowRecAmt.push(maxRowRec);
+                                me.pageColRecAmt.push(maxColRec);
                                 private_addTabValue(me.dispValueIdxLst_Row, currentSortedRowSequence, segIdx, counterRowRec, maxRowRec, me.dispSerialIdxLst_Row, me.col_sum_fields_value_total, me.dispSumValueLst_Col);
                                 private_addTabValue(me.dispValueIdxLst_Col, currentSortedColSequence, segIdx, counterColRec, maxColRec, null, me.row_sum_fields_value_total, me.dispSumValueLst_Row);
                                 private_addContentValue(me.dispValueIdxLst_Content, currentSortedContentSequence, segIdx, counterRowRec, maxRowRec, counterColRec, maxColRec, me.page_seg_map, pageIdx);
@@ -622,10 +627,10 @@ JpcCrossTabSrv.prototype.createNew = function() {
             rst = rst.concat(tabRstLst[i]);
             tabRstLst[i] = null;
         }
-        me.checkCombineEvent(JV.RUN_TYPE_AFTER_COMBINE, [], [], rst, $CURRENT_RPT, dataObj, me);
+        me.checkCombineEvent(JV.RUN_TYPE_AFTER_COMBINE, [], [], rst, $CURRENT_RPT, dataObj, me, page);
         return rst;
     };
-    JpcCrossTabResult.checkCombineEvent = function($RUN_TYPE, $VER_COMB_ARRAY, $HOR_COMB_ARRAY, $CURRENT_CELL_ITEMS, $CURRENT_RPT, $CURRENT_DATA, $PARENT) {
+    JpcCrossTabResult.checkCombineEvent = function($RUN_TYPE, $VER_COMB_ARRAY, $HOR_COMB_ARRAY, $CURRENT_CELL_ITEMS, $CURRENT_RPT, $CURRENT_DATA, $PARENT, $PAGE) {
         if ($CURRENT_RPT.formulas) {
             for (let execFmlIdx = 0; execFmlIdx < $CURRENT_RPT.formulas.length; execFmlIdx++) {
                 if ($CURRENT_RPT.formulas[execFmlIdx][JV.PROP_RUN_TYPE] === $RUN_TYPE) {

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

@@ -421,6 +421,7 @@ JpcExSrv.prototype.createNew = function() {
                     rst[JV.PROP_SIGNATURE_DATE_CELLS] = me.flowTab.signatureDateRst;
                     rst[JV.PROP_SIGNATURE_AUDIT_CELLS] = me.flowTab.signatureAuditRst;
                     rst[JV.PROP_INTERACT_CELLS] = me.flowTab.interactRst;
+                    rst[JV.PROP_FIGURE_CELLS] = me.flowTab.figureRst;
                     if (adHocMergePos) {
                         adHocMergePos[JV.NODE_PAGE_SIZE] = JpcCommonHelper.getPageSize(rptTpl);
                         rst[JV.PAGE_SPECIAL_MERGE_POS] = adHocMergePos;
@@ -433,6 +434,7 @@ JpcExSrv.prototype.createNew = function() {
                         rst[JV.PROP_SIGNATURE_DATE_CELLS] = me.flowTabEx.signatureDateRst;
                         rst[JV.PROP_SIGNATURE_AUDIT_CELLS] = me.flowTabEx.signatureAuditRst;
                         rst[JV.PROP_INTERACT_CELLS] = me.flowTab.interactRst;
+                        rst[JV.PROP_FIGURE_CELLS] = me.flowTab.figureRst;
                     }
                 }
             } else if (me.crossTab) {
@@ -441,12 +443,14 @@ JpcExSrv.prototype.createNew = function() {
                 rst[JV.PROP_SIGNATURE_DATE_CELLS] = me.crossTab.signatureDateRst;
                 rst[JV.PROP_SIGNATURE_AUDIT_CELLS] = me.crossTab.signatureAuditRst;
                 rst[JV.PROP_INTERACT_CELLS] = me.crossTab.interactRst;
+                rst[JV.PROP_FIGURE_CELLS] = me.crossTab.figureRst;
             } else if (me.billTab) {
                 rst[JV.PROP_CELLS] = me.billTab.outputAsSimpleJSONPage(rptTpl, dataObj, page, bands, controls, fonts, me, customizeCfg);
                 rst[JV.PROP_SIGNATURE_CELLS] = me.billTab.signatureRst;
                 rst[JV.PROP_SIGNATURE_DATE_CELLS] = me.billTab.signatureDateRst;
                 rst[JV.PROP_SIGNATURE_AUDIT_CELLS] = me.billTab.signatureAuditRst;
                 rst[JV.PROP_INTERACT_CELLS] = me.billTab.interactRst;
+                rst[JV.PROP_FIGURE_CELLS] = me.billTab.figureRst;
             }
             if (!(me.flowTab && me.flowTab.paging_option === JV.PAGING_OPTION_INFINITY)) {
                 const pageMergeBorder = getPageMergeBorder();

+ 4 - 3
app/reports/rpt_component/jpc_flow_tab.js

@@ -187,6 +187,7 @@ JpcFlowTabSrv.prototype.createNew = function() {
         me.signatureDateRst = [];
         me.signatureAuditRst = [];
         me.interactRst = [];
+        me.figureRst = [];
 
         me.hasBreakFlowArr = [];
     };
@@ -1357,12 +1358,12 @@ JpcFlowTabSrv.prototype.createNew = function() {
         for (let idIdx = eliminateCells.length - 1; idIdx >= 0; idIdx--) {
             rst.splice(eliminateCells[idIdx], 1);
         }
-        me.checkCombineEvent(JV.RUN_TYPE_BEFORE_COMBINE, verticalCombinePos, horizonCombinePos, rst, $CURRENT_RPT, dataObj, me);
+        me.checkCombineEvent(JV.RUN_TYPE_BEFORE_COMBINE, verticalCombinePos, horizonCombinePos, rst, $CURRENT_RPT, dataObj, me, page);
         me.combinePageCells(rst, verticalCombinePos, horizonCombinePos, controls, fonts);
-        me.checkCombineEvent(JV.RUN_TYPE_AFTER_COMBINE, verticalCombinePos, horizonCombinePos, rst, $CURRENT_RPT, dataObj, me);
+        me.checkCombineEvent(JV.RUN_TYPE_AFTER_COMBINE, verticalCombinePos, horizonCombinePos, rst, $CURRENT_RPT, dataObj, me, page);
         return rst;
     };
-    JpcFlowTabResult.checkCombineEvent = function($RUN_TYPE, $VER_COMB_ARRAY, $HOR_COMB_ARRAY, $CURRENT_CELL_ITEMS, $CURRENT_RPT, $CURRENT_DATA, $PARENT) {
+    JpcFlowTabResult.checkCombineEvent = function($RUN_TYPE, $VER_COMB_ARRAY, $HOR_COMB_ARRAY, $CURRENT_CELL_ITEMS, $CURRENT_RPT, $CURRENT_DATA, $PARENT, $PAGE) {
         if ($CURRENT_RPT.formulas) {
             const $JE = JE;
             const $JV = JV;

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

@@ -325,6 +325,7 @@ module.exports = {
     PROP_SIGNATURE_DATE_CELLS: 'signature_date_cells',
     PROP_SIGNATURE_AUDIT_CELLS: 'signature_audit_cells',
     PROP_INTERACT_CELLS: 'interact_cells',
+    PROP_FIGURE_CELLS: 'figure_cells',
 
     PAGING_OPTION_NORMAL: 'normal',
     PAGING_OPTION_INFINITY: 'infinity',

+ 1 - 0
app/view/payment/detail.ejs

@@ -3,6 +3,7 @@
 <script type="text/javascript" src="/public/js/common_ajax.js"></script>
 <script type="text/javascript" src="/public/report/js/jpc_output_value_define.js"></script>
 <script type="text/javascript" src="/public/report/js/rpt_signature.js"></script>
+<script type="text/javascript" src="/public/report/js/rpt_figure.js"></script>
 <script type="text/javascript" src="/public/report/js/jpc_output.js"></script>
 <script type="text/javascript" src="/public/report/js/rpt_move_signature.js"></script>
 <script type="text/javascript" src="/public/report/js/rpt_jspdf.js"></script>

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

@@ -269,8 +269,8 @@
                             <div class="pageContainer">
                                 <canvas id="rptCanvas" height="820" width="920"></canvas>
                             </div>
-                            <!-- <div class="pageContainer signatureRptBar"  id='signatureRptBar'  style="display: none;">
-                                <canvas class="signatureCanvas" id="signatureRptCanvas" height="820" width="920"></canvas>
+                            <!-- <div style="display: none;">
+                                <canvas id="invisibleCanvas" height="820" width="920"></canvas>
                             </div> -->
                         </div>
                     </div>
@@ -348,6 +348,7 @@
 <script type="text/javascript" src="/public/report/js/rpt_archive.js"></script>
 <script type="text/javascript" src="/public/report/js/rpt_cfg_const.js"></script>
 <script type="text/javascript" src="/public/report/js/jpc_output_value_define.js"></script>
+<script type="text/javascript" src="/public/report/js/rpt_figure.js"></script>
 <script type="text/javascript" src="/public/report/js/jpc_output.js"></script>
 <script type="text/javascript" src="/public/report/js/rpt_print.js"></script>
 <script type="text/javascript" src="/public/report/js/rpt_signature.js"></script>

+ 1 - 0
app/view/report/rpt_individual.ejs

@@ -8,6 +8,7 @@
     <script type="text/javascript" src="/public/js/common_ajax.js"></script>
     <script type="text/javascript" src="/public/report/js/rpt_public.js"></script>
     <script type="text/javascript" src="/public/report/js/jpc_output_value_define.js"></script>
+    <script type="text/javascript" src="/public/report/js/rpt_figure.js"></script>
     <script type="text/javascript" src="/public/report/js/jpc_output.js"></script>
     <script type="text/javascript" src="/public/js/string_util_light.js"></script>
     <script type="text/javascript" src="/public/report/js/rpt_signature.js"></script>

+ 1 - 0
app/view/report/rpt_print.ejs

@@ -7,6 +7,7 @@
     <script type="text/javascript" src="/public/js/common_ajax.js"></script>
     <script type="text/javascript" src="/public/report/js/jpc_output_value_define.js"></script>
     <script type="text/javascript" src="/public/report/js/rpt_public.js"></script>
+    <script type="text/javascript" src="/public/report/js/rpt_figure.js"></script>
     <script type="text/javascript" src="/public/report/js/jpc_output.js"></script>
     <script type="text/javascript" src="/public/report/js/rpt_print.js"></script>
     <script type="text/javascript" src="/public/report/js/rpt_signature.js"></script>