Browse Source

01-1表 交叉列合并特性

TonyKang 6 years ago
parent
commit
584a164782

+ 17 - 1
modules/reports/rpt_component/jpc_cross_tab.js

@@ -536,6 +536,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
                 for (let i = 0; i < me.col_fields_idx.length; i++) {
                     let tab_field = tab_fields[i];
                     if (!(tab_field[JV.PROP_HIDDEN])) {
+                        let mergedRst = [];
                         let data_field = null;
                         let map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
                         if (typeof me.col_fields_idx[i] !== 'object') {
@@ -560,20 +561,35 @@ JpcCrossTabSrv.prototype.createNew = function(){
                             } else {
                                 if (colIdx === 0) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
                             }
-                            rst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[colIdx], -1, 1, 0, cols, colIdx, unitFactor, false, controls));
+                            mergedRst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[colIdx], -1, 1, 0, cols, colIdx, unitFactor, false, controls));
+                            //rst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[colIdx], -1, 1, 0, cols, colIdx, unitFactor, false, controls));
                             //2. output texts
                             if (firstTextOutput) {
                                 if (tab[JV.PROP_TEXT]) {
+                                    // mergedRst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
                                     rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
                                 }
                                 if (tab[JV.PROP_TEXTS]) {
                                     for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                                        // mergedRst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
                                         rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
                                     }
                                 }
                             }
                         }
                         firstTextOutput = false;
+                        //判断是否需要合并
+                        if (tab_field[JV.PROP_IS_MERGE] && mergedRst.length > 1) {
+                            let lastCell = mergedRst[mergedRst.length - 1];
+                            for (let mergeIdx = mergedRst.length - 2; mergeIdx >= 0; mergeIdx--) {
+                                if (lastCell[JV.PROP_VALUE] === mergedRst[mergeIdx][JV.PROP_VALUE]) {
+                                    mergedRst[mergeIdx][JV.PROP_AREA][JV.PROP_RIGHT] = lastCell[JV.PROP_AREA][JV.PROP_RIGHT];
+                                    mergedRst.splice(mergeIdx + 1, 1);
+                                }
+                                lastCell = mergedRst[mergeIdx];
+                            }
+                        }
+                        rst = rst.concat(mergedRst);
                     }
                 }
             }

+ 1 - 0
public/web/rpt_value_define.js

@@ -121,6 +121,7 @@ const JV = {
     PROP_POSITION: "Position",
     PROP_HIDDEN: "Hidden",
     PROP_IS_SERIAL: "isSerial",
+    PROP_IS_MERGE: "isMerge",
     PROP_COMBINE_TYPE: "combineType",
     PROP_IS_AUTO_HEIGHT: "isAutoHeight",
     PROP_FONT: "font",

+ 3 - 2
test/unit/reports/test_summary_multi_prjs.js

@@ -15,7 +15,8 @@ let rpt_cfg = require('./rpt_cfg');
 dbm.connect(process.env.NODE_ENV);
 
 let demoPrjs = [618, 635]; //
-let demoRptId = 68; //01-2
+// let demoRptId = 68; //01-2
+let demoRptId = 72; //01-1
 let pagesize = "A4";
 let userId_Leng = "5c3ffa9aa0a92732f41216e0"; //小冷User Id (养护的)
 // let userId_me = "5b6a60b1c4ba33000dd417c0"; //我的
@@ -66,7 +67,7 @@ test('测试 - 测试模板啦: ', function (t) {
                 let customizeCfg = {"fillZero": true};
                 let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties, customizeCfg);
                 if (pageRst) {
-                    // fsUtil.writeObjToFile(pageRst, "D:/GitHome/YangHuCost/tmp/多清单汇总表(01_2)page数据" + dt.getTime() + ".jsp");
+                    fsUtil.writeObjToFile(pageRst, "D:/GitHome/YangHuCost/tmp/多清单汇总表(01_2)page数据" + dt.getTime() + ".jsp");
                     // rpt_xl_util.exportExcel(pageRst, pagesize, "local_test_rpt_excel", true, null, null, function(uuidName){
                     //     console.log("excel uuid: " + uuidName);
                     // });