Procházet zdrojové kódy

流水式表制作测试

TonyKang před 7 roky
rodič
revize
4fad429d2b

+ 53 - 3
modules/reports/rpt_component/jpc_flow_tab.js

@@ -85,6 +85,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
         me.seg_sum_fields_idx = [];
         me.seg_sum_tab_fields = [];
         me.page_sum_fields_idx = [];
+        me.page_sum_tab_fields = [];
 
         me.group_fields = [];
         me.group_sum_fields = [];
@@ -95,6 +96,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
         me.pageStatusLst = [];
         me.groupSumValLst = [];
         me.segSumValLst = [];
+        me.pageSumValLst = [];
         me.multiCols = 1;
         me.pagesAmt = 0;
     };
@@ -102,7 +104,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
         let me = this;
         let FLOW_NODE_STR = me.isEx?JV.NODE_FLOW_INFO_EX:JV.NODE_FLOW_INFO;
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_SEG_SUM][JV.PROP_SUM_FIELDS], me.seg_sum_tab_fields, me.seg_sum_fields_idx, me.isEx);
-        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_PAGE_SUM][JV.PROP_SUM_FIELDS], null, me.page_sum_fields_idx, me.isEx);
+        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_PAGE_SUM][JV.PROP_SUM_FIELDS], me.page_sum_tab_fields, me.page_sum_fields_idx, me.isEx);
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_GROUP][JV.PROP_GROUP_FIELDS], me.group_fields, null, me.isEx);
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_GROUP][JV.PROP_SUM_FIELDS], me.group_sum_fields, null, me.isEx);
         for (let si = 0; si < dataSeq.length; si++) {
@@ -355,15 +357,18 @@ JpcFlowTabSrv.prototype.createNew = function(){
                     } else {
                         if (currentRecAmt + maxRowRec >= ttlSegRecAmt) {
                             pageStatus[JV.STATUS_SEGMENT_END] = true;
+                            pageStatus[JV.STATUS_REPORT_END] = true;
                             private_resetBandArea();
                             let hasAdHocRow = !JpcFlowTabHelper.chkSegEnd(bands, rptTpl, ttlSegRecAmt, currentRecAmt, maxRowRec, me.isEx);
                             if (hasAdHocRow) {
                                 //add page info(pre segment end)
                                 pageStatus[JV.STATUS_SEGMENT_END] = false;
+                                pageStatus[JV.STATUS_REPORT_END] = false;
                                 private_addPage(segIdx, grpSeqInfo, false, false, -1);
                             }
                             //add page info
                             pageStatus[JV.STATUS_SEGMENT_END] = true;
+                            pageStatus[JV.STATUS_REPORT_END] = true;
                             private_addPage(segIdx, grpSeqInfo, false, false, -1);
                         } else {
                             private_addPage(segIdx, grpSeqInfo, false, false, -1);
@@ -503,6 +508,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
             // 2.3 Sum Seg
             tabRstLst.push(me.outputSegSum(rptTpl, dataObj, page, segIdx, bands, unitFactor, controls));
             // 2.4 Sum Page
+            tabRstLst.push(me.outputPageSum(rptTpl, dataObj, page, segIdx, bands, unitFactor, controls));
             // 2.5 Group
             // 2.6 Discrete
             tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[FLOW_NODE_STR][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT));
@@ -536,6 +542,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 // 2.3 Sum Seg
                 tabRstLst.push(me.outputSegSum(rptTpl, dataObj, actualPage, segIdx, bands, unitFactor, controls));
                 // 2.4 Sum Page
+                tabRstLst.push(me.outputPageSum(rptTpl, dataObj, actualPage, segIdx, bands, unitFactor, controls));
                 // 2.5 Group
                 // 2.6 Discrete
                 if (pi === 0) {
@@ -563,6 +570,15 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 let data_details = me.isEx?dataObj[JV.DATA_DETAIL_DATA_EX]:dataObj[JV.DATA_DETAIL_DATA];
                 let data_details_ex = $CURRENT_RPT.isFollowMode?dataObj[JV.DATA_DETAIL_DATA_EX]:null;
                 let contentValuesIdx = me.dispValueIdxLst[page - 1];
+                let page_sum_data_fields = [];
+                for (let i = 0; i < me.page_sum_fields_idx.length; i++) {
+                    let data_field = data_details[me.page_sum_fields_idx[i]];
+                    page_sum_data_fields.push(data_field);
+                }
+                let rowGrandTotal = [];
+                for (let di = 0; di < page_sum_data_fields.length; di++) {
+                    rowGrandTotal.push(0.0);
+                }
                 //normal content
                 for (let rowIdx = 0; rowIdx < contentValuesIdx.length; rowIdx++) {
                     for (let i = 0; i < tab_fields.length; i++) {
@@ -603,7 +619,12 @@ JpcFlowTabSrv.prototype.createNew = function(){
                             }
                         }
                     }
+                    //page sum content
+                    for (let di = 0; di < page_sum_data_fields.length; di++) {
+                        rowGrandTotal[di] = rowGrandTotal[di] + 1.0 * JpcFieldHelper.getValue(page_sum_data_fields[di], contentValuesIdx[rowIdx][2]);
+                    }
                 }
+                me.pageSumValLst.push(rowGrandTotal);
                 //grouping content
                 for (let rowIdx = 0; rowIdx < contentValuesIdx.length; rowIdx++) {
                     if (contentValuesIdx[rowIdx][1] === JV.DISPLAY_VAL_TYPE_GROUP) {
@@ -672,6 +693,35 @@ JpcFlowTabSrv.prototype.createNew = function(){
         }
         return rst;
     };
+    JpcFlowTabResult.outputPageSum = function (rptTpl, dataObj, page, segIdx, bands, unitFactor, controls) {
+        let me = this, rst = [];
+        let FLOW_NODE_STR = me.isEx?JV.NODE_FLOW_INFO_EX:JV.NODE_FLOW_INFO;
+        let tab = rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_PAGE_SUM];
+        let band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band) {
+            let pageStatus = me.pageStatusLst[page - 1];
+            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]]) {
+                let tab_fields = me.page_sum_tab_fields;
+                for (let i = 0; i < tab_fields.length; i++) {
+                    let cellItem = JpcCommonOutputHelper.createCommonOutput(tab_fields[i], me.pageSumValLst[page - 1], controls);
+                    cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_fields[i][JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, me.multiCols, 0, true, false);
+                    rst.push(cellItem);
+                }
+                if (tab[JV.PROP_TEXT]) {
+                    rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, me.multiCols, 0));
+                }
+                if (tab[JV.PROP_TEXTS]) {
+                    for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                        rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, me.multiCols, 0));
+                    }
+                }
+                if (tab[JV.NODE_DISCRETE_INFO]) {
+                    rst = rst.concat(JpcDiscreteHelper.outputDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, me.multiCols, 0));
+                }
+            }
+        }
+        return rst;
+    };
     JpcFlowTabResult.outputTabField = function (band, tab_field, data_field, valueIdx, serialIdx, rows, rowIdx, cols, colIdx, unitFactor, isRow, controls, multiColIdx) {
         let me = this,
             rst = JpcCommonOutputHelper.createCommonOutput(tab_field, JpcFieldHelper.getValue(data_field, valueIdx), controls);
@@ -695,10 +745,10 @@ JpcFlowTabSrv.prototype.createNew = function(){
             }
         }
         if (grp_line[JV.PROP_DISCRETE_FIELDS]) {
-            //
+            //暂时不支持
         }
         if (grp_line[JV.PROP_PARAMS]) {
-            //
+            //暂时不支持
         }
         // console.log(rst);
         return rst;

+ 2 - 2
modules/reports/util/rpt_construct_data_util.js

@@ -747,7 +747,7 @@ function ext_getFee(feeKey, dtlFeeKey) {
 function pri_getFee(dItem, feeKey, dtlFeeKey) {
     let rst = 0;
     let hasValue = false;
-    if (dItem.hasOwnProperty("fees")) {
+    if (dItem["fees"]) {
         for (let fee of dItem["fees"]) {
             if (fee["fieldName"] === feeKey) {
                 if (dtlFeeKey) {
@@ -759,7 +759,7 @@ function pri_getFee(dItem, feeKey, dtlFeeKey) {
                 break;
             }
         }
-    } else if (dItem.hasOwnProperty(feeKey)) {
+    } else if (dItem[feeKey]) {
         hasValue = true;
         rst = dItem[feeKey];
     } else {

+ 2 - 2
test/unit/reports/test_tpl_09.js

@@ -44,8 +44,8 @@ let demoRptId = 232, pagesize = "A4";
 
 let userId_Leng = 1142; //小冷User Id
 // demoPrjId = 720; //QA: DW3
-demoPrjId = 1296; //QA:
-//*/
+demoPrjId = 1348; //QA:
+/*/
 let userId_Dft = userId_Leng;
 /*/
  let userId_Dft = 76075;

+ 16 - 0
web/building_saas/report/html/rpt_main.html

@@ -73,6 +73,22 @@
                             报表设置
                         </div>
                     </div>
+                    <div class="panel">
+                        <div class="panel-body">
+                            <div class="input-group input-group-sm" role="group">
+                            <span class="input-group-btn">
+                              <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="上一页"><i class="fa fa-chevron-left" onclick="rptControlObj.prePage(this)"></i></button>
+                            </span>
+                                <input class="form-control" id="rpt_page_num" value="" style="width:60px"  data-toggle="tooltip" data-placement="bottom" title="输入页码按回车键,快速跳转">
+                                <span class="input-group-btn">
+                              <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="下一页"><i class="fa fa-chevron-right" onclick="rptControlObj.nextPage(this)"></i></button>
+                            </span>
+                            </div>
+                        </div>
+                        <div class="panel-foot text-muted">
+                            翻页
+                        </div>
+                    </div>
                 </div>
             </div>
             <div class="print-view poj-list">

+ 14 - 0
web/building_saas/report/js/rpt_main.js

@@ -85,6 +85,7 @@ let zTreeOprObj = {
                         me.currentRptPageRst = pageRst;
                         me.maxPages = pageRst.items.length;
                         me.currentPage = 1;
+                        me.displayPageValue();
                         let size = JpcCanvasOutput.getReportSizeInPixel(me.currentRptPageRst, getScreenDPI());
                         canvas.width = size[0] + 20;
                         if (size[1] > size[0]) {
@@ -106,6 +107,11 @@ let zTreeOprObj = {
             JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
             JpcCanvasOutput.drawToCanvas(me.currentRptPageRst, canvas, me.currentPage);
         }
+        me.displayPageValue();
+    },
+    displayPageValue: function() {
+        let me = zTreeOprObj;
+        $("#rpt_page_num").get(0).value = me.currentPage + "/" + me.maxPages;
     }
 };
 
@@ -210,5 +216,13 @@ let rptControlObj = {
                 me.getCurrentPageSize() + "/" + orgRptName;
             window.location = url;//这里不能使用get方法跳转,否则下载不成功
         }
+    },
+    prePage: function(dom) {
+        let canvas = document.getElementById("rptCanvas");
+        zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
+    },
+    nextPage: function(dom) {
+        let canvas = document.getElementById("rptCanvas");
+        zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
     }
 };