Kaynağa Gözat

fix: 报表模板配置,模板布局,新增高度百分比选项

lishihao 7 ay önce
ebeveyn
işleme
7abf196aa3

+ 163 - 111
modules/reports/rpt_component/helper/jpc_helper_band.js

@@ -1,121 +1,173 @@
-let JV = require('../jpc_value_define');
-let JpcCommonHelper = require('./jpc_helper_common');
+let JV = require("../jpc_value_define");
+let JpcCommonHelper = require("./jpc_helper_common");
 
 let JpcBandHelper = {
-    getBandTypeValByString: function(bandType) {
-        let rst = JV.PAGE_STATUS.indexOf(bandType);
-        if (rst < 0) rst = JV.STATUS_NORMAL;
-        return rst;
-    },
-    setBandArea: function(bands, rptTpl, pageStatus, isOnlyNormalStatus, isOnlyExStatus) {
-        let me = this;
-        if (rptTpl[JV.NODE_BAND_COLLECTION]) {
-            isOnlyNormalStatus = isOnlyNormalStatus||false;
-            isOnlyExStatus = isOnlyExStatus||false;
+  getBandTypeValByString: function (bandType) {
+    let rst = JV.PAGE_STATUS.indexOf(bandType);
+    if (rst < 0) rst = JV.STATUS_NORMAL;
+    return rst;
+  },
+  setBandArea: function (
+    bands,
+    rptTpl,
+    pageStatus,
+    isOnlyNormalStatus,
+    isOnlyExStatus
+  ) {
+    let me = this;
+    if (rptTpl[JV.NODE_BAND_COLLECTION]) {
+      isOnlyNormalStatus = isOnlyNormalStatus || false;
+      isOnlyExStatus = isOnlyExStatus || false;
 
-            let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
-            let orgArea = JpcCommonHelper.getReportArea(rptTpl, unitFactor);
-            for (let i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
-                me.setBandPos(bands, rptTpl[JV.NODE_BAND_COLLECTION][i], orgArea, unitFactor, pageStatus, isOnlyNormalStatus, isOnlyExStatus);
-            }
-        }
-    },
-    setBandPos: function(bands, bandNode, orgArea, unitFactor, pageStatus, isOnlyNormalStatus, isOnlyExStatus) {
-        let me = this, band = bands[bandNode[JV.BAND_PROP_NAME]];
-        //0. for multi flow purpose
-        if (isOnlyNormalStatus) {
-            if (bandNode.hasOwnProperty(JV.PROP_BAND_EX_ONLY) && JpcCommonHelper.getBoolean(bandNode[JV.PROP_BAND_EX_ONLY])) {
-                return;
-            }
-        }
-        if (isOnlyExStatus) {
-            if (bandNode.hasOwnProperty(JV.PROP_BAND_NORMAL_ONLY) && !(JpcCommonHelper.getBoolean(bandNode[JV.PROP_BAND_NORMAL_ONLY]))) {
-                return;
-            }
-        }
-        //1. initialize
-        band[JV.PROP_LEFT] = orgArea[JV.IDX_LEFT];
-        band[JV.PROP_TOP] = orgArea[JV.IDX_TOP];
-        band[JV.PROP_RIGHT] = orgArea[JV.IDX_RIGHT];
-        band[JV.PROP_BOTTOM] = orgArea[JV.IDX_BOTTOM];
-        //2. set this band
-        if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]]) {
-            switch (band[JV.BAND_PROP_ALIGNMENT]) {
-                case JV.LAYOUT_TOP:
-                    if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
-                        band.Bottom = band.Top + unitFactor * band[JV.BAND_PROP_HEIGHT];
-                    } else {
-                        band.Bottom = band.Top + (band.Bottom - band.Top) * band[JV.BAND_PROP_HEIGHT] / 100;
-                    }
-                    orgArea[JV.IDX_TOP] = band.Bottom;
-                    break;
-                case JV.LAYOUT_BOTTOM:
-                    if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
-                        band.Top = band.Bottom - unitFactor * band[JV.BAND_PROP_HEIGHT];
-                    } else {
-                        band.Top = band.Bottom - (band.Bottom - band.Top) * band[JV.BAND_PROP_HEIGHT] / 100;
-                    }
-                    orgArea[JV.IDX_BOTTOM] = band.Top;
-                    break;
-                case JV.LAYOUT_LEFT:
-                    if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
-                        band.Right = band.Left + unitFactor * band[JV.BAND_PROP_WIDTH];
-                    } else {
-                        band.Right = band.Left + (band.Right - band.Left) * band[JV.BAND_PROP_WIDTH] / 100;
-                    }
-                    orgArea[JV.IDX_LEFT] = band.Right;
-                    break;
-                case JV.LAYOUT_RIGHT:
-                    if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
-                        band.Left = band.Right - unitFactor * band[JV.BAND_PROP_WIDTH];
-                    } else {
-                        band.Left = band.Right - (band.Right - band.Left) * band[JV.BAND_PROP_WIDTH] / 100;
-                    }
-                    orgArea[JV.IDX_RIGHT] = band.Left;
-                    break;
-            }
-            //3. set sub-bands
-            if (bandNode[JV.BAND_PROP_SUB_BANDS]) {
-                let bandArea = [band.Left, band.Top, band.Right, band.Bottom];
-                for (let i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
-                    me.setBandPos(bands, bandNode[JV.BAND_PROP_SUB_BANDS][i], bandArea, unitFactor, pageStatus, isOnlyNormalStatus, isOnlyExStatus);
-                }
-            }
+      let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+      let orgArea = JpcCommonHelper.getReportArea(rptTpl, unitFactor);
+      for (let i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
+        me.setBandPos(
+          bands,
+          rptTpl[JV.NODE_BAND_COLLECTION][i],
+          orgArea,
+          unitFactor,
+          pageStatus,
+          isOnlyNormalStatus,
+          isOnlyExStatus
+        );
+      }
+    }
+  },
+  setBandPos: function (
+    bands,
+    bandNode,
+    orgArea,
+    unitFactor,
+    pageStatus,
+    isOnlyNormalStatus,
+    isOnlyExStatus
+  ) {
+    let me = this,
+      band = bands[bandNode[JV.BAND_PROP_NAME]];
+    //0. for multi flow purpose
+    if (isOnlyNormalStatus) {
+      if (
+        bandNode.hasOwnProperty(JV.PROP_BAND_EX_ONLY) &&
+        JpcCommonHelper.getBoolean(bandNode[JV.PROP_BAND_EX_ONLY])
+      ) {
+        return;
+      }
+    }
+    if (isOnlyExStatus) {
+      if (
+        bandNode.hasOwnProperty(JV.PROP_BAND_NORMAL_ONLY) &&
+        !JpcCommonHelper.getBoolean(bandNode[JV.PROP_BAND_NORMAL_ONLY])
+      ) {
+        return;
+      }
+    }
+    //1. initialize
+    band[JV.PROP_LEFT] = orgArea[JV.IDX_LEFT];
+    band[JV.PROP_TOP] = orgArea[JV.IDX_TOP];
+    band[JV.PROP_RIGHT] = orgArea[JV.IDX_RIGHT];
+    band[JV.PROP_BOTTOM] = orgArea[JV.IDX_BOTTOM];
+    //2. set this band
+    if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]]) {
+      switch (band[JV.BAND_PROP_ALIGNMENT]) {
+        case JV.LAYOUT_TOP:
+          if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
+            band.Bottom = band.Top + unitFactor * band[JV.BAND_PROP_HEIGHT];
+          } else {
+            band.Bottom =
+              band.Top +
+              ((band.Bottom - band.Top) * band[JV.BAND_PROP_HEIGHT]) / 100;
+          }
+          orgArea[JV.IDX_TOP] = band.Bottom;
+          break;
+        case JV.LAYOUT_BOTTOM:
+          if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
+            band.Top = band.Bottom - unitFactor * band[JV.BAND_PROP_HEIGHT];
+          } else {
+            band.Top =
+              band.Bottom -
+              ((band.Bottom - band.Top) * band[JV.BAND_PROP_HEIGHT]) / 100;
+          }
+          orgArea[JV.IDX_BOTTOM] = band.Top;
+          break;
+        case JV.LAYOUT_LEFT:
+          if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
+            band.Right = band.Left + unitFactor * band[JV.BAND_PROP_WIDTH];
+          } else {
+            band.Right =
+              band.Left +
+              ((band.Right - band.Left) * band[JV.BAND_PROP_WIDTH]) / 100;
+          }
+          orgArea[JV.IDX_LEFT] = band.Right;
+          break;
+        case JV.LAYOUT_RIGHT:
+          if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
+            band.Left = band.Right - unitFactor * band[JV.BAND_PROP_WIDTH];
+          } else {
+            band.Left =
+              band.Right -
+              ((band.Right - band.Left) * band[JV.BAND_PROP_WIDTH]) / 100;
+          }
+          orgArea[JV.IDX_RIGHT] = band.Left;
+          break;
+      }
+      //3. set sub-bands
+      if (bandNode[JV.BAND_PROP_SUB_BANDS]) {
+        let bandArea = [band.Left, band.Top, band.Right, band.Bottom];
+        for (let i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
+          me.setBandPos(
+            bands,
+            bandNode[JV.BAND_PROP_SUB_BANDS][i],
+            bandArea,
+            unitFactor,
+            pageStatus,
+            isOnlyNormalStatus,
+            isOnlyExStatus
+          );
         }
-    },
-    resetBandPos: function (bandCollection, bands, contentBand, offsetX, offsetY) {
-        let orgX = contentBand.Right, orgY = contentBand.Bottom;
-        function chkAndResetPos(targetBand) {
-            let band = bands[targetBand.Name];
-            if (band) {
-                if (band === contentBand) {
-                    band.Bottom += offsetY;
-                    band.Right += offsetX;
-                } else {
-                    if (band.Top >= orgY) {
-                        band.Top += offsetY;
-                        band.Bottom += offsetY;
-                    } else if (band.Bottom >= orgY && band.Top < orgY) {
-                        band.Bottom += offsetY;
-                    }
-                    if (band.Left >= orgX) {
-                        band.Left += offsetX;
-                        band.Right += offsetX;
-                    } else if (band.Right >= orgX && band.Le < orgX) {
-                        band.Right += offsetX;
-                    }
-                }
-                if (targetBand[JV.BAND_PROP_SUB_BANDS]) {
-                    for (let i = 0; i < targetBand[JV.BAND_PROP_SUB_BANDS].length; i++) {
-                        chkAndResetPos(targetBand[JV.BAND_PROP_SUB_BANDS][i]);
-                    }
-                }
-            }
+      }
+    }
+  },
+  resetBandPos: function (
+    bandCollection,
+    bands,
+    contentBand,
+    offsetX,
+    offsetY
+  ) {
+    let orgX = contentBand.Right,
+      orgY = contentBand.Bottom;
+    function chkAndResetPos(targetBand) {
+      let band = bands[targetBand.Name];
+      if (band) {
+        if (band === contentBand) {
+          band.Bottom += offsetY;
+          band.Right += offsetX;
+        } else {
+          if (band.Top >= orgY) {
+            band.Top += offsetY;
+            band.Bottom += offsetY;
+          } else if (band.Bottom >= orgY && band.Top < orgY) {
+            band.Bottom += offsetY;
+          }
+          if (band.Left >= orgX) {
+            band.Left += offsetX;
+            band.Right += offsetX;
+          } else if (band.Right >= orgX && band.Le < orgX) {
+            band.Right += offsetX;
+          }
         }
-        for (let i = 0; i < bandCollection.length; i++) {
-            chkAndResetPos(bandCollection[i]);
+        if (targetBand[JV.BAND_PROP_SUB_BANDS]) {
+          for (let i = 0; i < targetBand[JV.BAND_PROP_SUB_BANDS].length; i++) {
+            chkAndResetPos(targetBand[JV.BAND_PROP_SUB_BANDS][i]);
+          }
         }
+      }
+    }
+    for (let i = 0; i < bandCollection.length; i++) {
+      chkAndResetPos(bandCollection[i]);
     }
+  },
 };
 
 module.exports = JpcBandHelper;

+ 83 - 51
modules/reports/rpt_component/jpc_band.js

@@ -1,58 +1,90 @@
-let JV = require('./jpc_value_define');
-let JpcCommonHelper = require('./helper/jpc_helper_common');
-let JpcBandHelper = require('./helper/jpc_helper_band');
+let JV = require("./jpc_value_define");
+let JpcCommonHelper = require("./helper/jpc_helper_common");
+let JpcBandHelper = require("./helper/jpc_helper_band");
 
 let JpcBand = {
-    createNew: function(rptTpl, defProperties) {
-        let me = this;
-        let JpcBandResult = {};
-        if (rptTpl[JV.NODE_BAND_COLLECTION]) {
-            for (let i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
-                me.createSingle(rptTpl[JV.NODE_BAND_COLLECTION][i], JpcBandResult, rptTpl, defProperties);
-            }
-        }
-        return JpcBandResult;
-    },
-    createSingle: function(bandNode, parentObj, rptTpl, defProperties) {
-        let me = this;
-        if (bandNode && bandNode[JV.BAND_PROP_NAME]) {
-            let item = {Left:0, Right:0, Top:0, Bottom:0};
-            item[JV.BAND_PROP_STYLE] = JpcCommonHelper.getStyle(bandNode[JV.BAND_PROP_STYLE], defProperties.styles, null);
-            item[JV.BAND_PROP_CONTROL] = JpcCommonHelper.getControl(bandNode[JV.BAND_PROP_CONTROL], defProperties.ctrls, null);
-            if (bandNode[JV.BAND_PROP_HEIGHT]) {
-                item[JV.BAND_PROP_HEIGHT] = 1.0 * bandNode[JV.BAND_PROP_HEIGHT];
-            } else {
-                item[JV.BAND_PROP_HEIGHT] = 0.0;
-            }
-            if (bandNode[JV.BAND_PROP_WIDTH]) {
-                item[JV.BAND_PROP_WIDTH] = 1.0 * bandNode[JV.BAND_PROP_WIDTH];
-            } else {
-                item[JV.BAND_PROP_WIDTH] = 0.0;
-            }
-            item[JV.BAND_PROP_DISPLAY_TYPE] = JpcBandHelper.getBandTypeValByString(bandNode[JV.BAND_PROP_DISPLAY_TYPE]);
-            item[JV.BAND_PROP_ALIGNMENT] = JpcCommonHelper.getLayoutAlignment(bandNode[JV.BAND_PROP_ALIGNMENT]);
-            item[JV.PROP_CALCULATION] = JpcCommonHelper.getPosCalculationType(bandNode[JV.PROP_CALCULATION]);
-            if (bandNode.hasOwnProperty(JV.PROP_BAND_NORMAL_ONLY)) {
-                item[JV.PROP_BAND_NORMAL_ONLY] = JpcCommonHelper.getBoolean(bandNode[JV.PROP_BAND_NORMAL_ONLY]);
-            }
-            if (bandNode.hasOwnProperty(JV.PROP_BAND_EX_ONLY)) {
-                item[JV.PROP_BAND_EX_ONLY] = JpcCommonHelper.getBoolean(bandNode[JV.PROP_BAND_EX_ONLY]);
-            }
+  createNew: function (rptTpl, defProperties) {
+    let me = this;
+    let JpcBandResult = {};
+    if (rptTpl[JV.NODE_BAND_COLLECTION]) {
+      for (let i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
+        me.createSingle(
+          rptTpl[JV.NODE_BAND_COLLECTION][i],
+          JpcBandResult,
+          rptTpl,
+          defProperties
+        );
+      }
+    }
+    return JpcBandResult;
+  },
+  createSingle: function (bandNode, parentObj, rptTpl, defProperties) {
+    let me = this;
+    if (bandNode && bandNode[JV.BAND_PROP_NAME]) {
+      let item = { Left: 0, Right: 0, Top: 0, Bottom: 0 };
+      item[JV.BAND_PROP_STYLE] = JpcCommonHelper.getStyle(
+        bandNode[JV.BAND_PROP_STYLE],
+        defProperties.styles,
+        null
+      );
+      item[JV.BAND_PROP_CONTROL] = JpcCommonHelper.getControl(
+        bandNode[JV.BAND_PROP_CONTROL],
+        defProperties.ctrls,
+        null
+      );
+      if (bandNode[JV.BAND_PROP_HEIGHT]) {
+        item[JV.BAND_PROP_HEIGHT] = 1.0 * bandNode[JV.BAND_PROP_HEIGHT];
+      } else {
+        item[JV.BAND_PROP_HEIGHT] = 0.0;
+      }
+      if (bandNode[JV.BAND_PROP_WIDTH]) {
+        item[JV.BAND_PROP_WIDTH] = 1.0 * bandNode[JV.BAND_PROP_WIDTH];
+      } else {
+        item[JV.BAND_PROP_WIDTH] = 0.0;
+      }
+      item[JV.BAND_PROP_DISPLAY_TYPE] = JpcBandHelper.getBandTypeValByString(
+        bandNode[JV.BAND_PROP_DISPLAY_TYPE]
+      );
+      item[JV.BAND_PROP_ALIGNMENT] = JpcCommonHelper.getLayoutAlignment(
+        bandNode[JV.BAND_PROP_ALIGNMENT]
+      );
+      item[JV.PROP_CALCULATION] = JpcCommonHelper.getPosCalculationType(
+        bandNode[JV.PROP_CALCULATION]
+      );
+      if (bandNode.hasOwnProperty(JV.PROP_BAND_NORMAL_ONLY)) {
+        item[JV.PROP_BAND_NORMAL_ONLY] = JpcCommonHelper.getBoolean(
+          bandNode[JV.PROP_BAND_NORMAL_ONLY]
+        );
+      }
+      if (bandNode.hasOwnProperty(JV.PROP_BAND_EX_ONLY)) {
+        item[JV.PROP_BAND_EX_ONLY] = JpcCommonHelper.getBoolean(
+          bandNode[JV.PROP_BAND_EX_ONLY]
+        );
+      }
 
-            if (bandNode[JV.BAND_PROP_MERGE_BORDER]) {
-                item[JV.BAND_PROP_MERGE_BORDER] = bandNode[JV.BAND_PROP_MERGE_BORDER];
-            }
-            if (bandNode[JV.BAND_PROP_SUB_BANDS]) {
-                for (let i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
-                    me.createSingle(bandNode[JV.BAND_PROP_SUB_BANDS][i], parentObj, rptTpl, defProperties);
-                }
-            }
-            parentObj[bandNode[JV.BAND_PROP_NAME]] = item;
-            if (item[JV.BAND_PROP_MERGE_BORDER] !== null && item[JV.BAND_PROP_MERGE_BORDER] !== undefined && item[JV.BAND_PROP_MERGE_BORDER] === 'T') {
-                parentObj[JV.BAND_PROP_MERGE_BAND] = item;
-            }
+      if (bandNode[JV.BAND_PROP_MERGE_BORDER]) {
+        item[JV.BAND_PROP_MERGE_BORDER] = bandNode[JV.BAND_PROP_MERGE_BORDER];
+      }
+      if (bandNode[JV.BAND_PROP_SUB_BANDS]) {
+        for (let i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
+          me.createSingle(
+            bandNode[JV.BAND_PROP_SUB_BANDS][i],
+            parentObj,
+            rptTpl,
+            defProperties
+          );
         }
+      }
+      parentObj[bandNode[JV.BAND_PROP_NAME]] = item;
+      if (
+        item[JV.BAND_PROP_MERGE_BORDER] !== null &&
+        item[JV.BAND_PROP_MERGE_BORDER] !== undefined &&
+        item[JV.BAND_PROP_MERGE_BORDER] === "T"
+      ) {
+        parentObj[JV.BAND_PROP_MERGE_BAND] = item;
+      }
     }
+  },
 };
 
-module.exports = JpcBand;
+module.exports = JpcBand;

+ 10 - 0
web/maintain/report/html/rpt_tpl_dtl_bands.html

@@ -25,6 +25,16 @@
                     <label>宽度</label>
                     <input class="form-control mr-2" id="bandWidth"  type="number" step="0.1" disabled onchange="bandTreeOprObj.bandHeightWidthChange(this)">
                 </div>
+                <div class="form-group col-md-2">
+                    <label>高宽是否百分比</label>
+                    <div class="form-check">
+                        <label class="form-check-label">
+                            <input type="checkbox" class="form-check-input" id="isBandPercentage"
+                                onchange="bandTreeOprObj.changeAreaCalcType(this)">
+                            百分比
+                        </label>
+                    </div>
+                </div>
             </div>
         </div>
     </div>

+ 389 - 320
web/maintain/report/js/rpt_tpl_band.js

@@ -1,333 +1,402 @@
-'use strict'
+"use strict";
 
 let bandTreeOprObj = {
-    treeObj : null,
-    currentNode: null,
-    innerCounter: 1,
-    canTrickEvent: false,
-    iniTree: function(rptTpl) {
-        let me = bandTreeOprObj;
-        let bandList = rptTpl[JV.NODE_BAND_COLLECTION];
-        me.buildTreeData(bandList);
-        let rootNode = {Name: "布局框(勾选表示:此布局框是报表外框,受报表边框属性影响)", isParent: true};
-        rootNode[JV.BAND_PROP_SUB_BANDS] = bandList;
-        // me.treeObj = $.fn.zTree.init($("#band_tree_reversed"), bandSetting, bandList);
-        me.treeObj = $.fn.zTree.init($("#band_tree_reversed"), bandSetting, rootNode);
-        me.treeObj.expandAll(true);
-        me.setupMergeBorderChk();
-    },
-    setupMergeBorderChk: function() {
-        let me = bandTreeOprObj;
-        let nodes = me.treeObj.getNodes();
-        me.treeObj.setChkDisabled(nodes[0], true);
-        function checkIsMergeBorder(bandNode) {
-            if (bandNode[JV.BAND_PROP_MERGE_BORDER] != null && bandNode[JV.BAND_PROP_MERGE_BORDER] != undefined) {
-                if (stringUtil.convertStrToBoolean(bandNode[JV.BAND_PROP_MERGE_BORDER])) {
-                    me.treeObj.checkNode(bandNode, true);
-                    return false;
-                }
-            }
-            if (bandNode[JV.BAND_PROP_SUB_BANDS] && bandNode[JV.BAND_PROP_SUB_BANDS].length > 0) {
-                for (let subBandNode of bandNode[JV.BAND_PROP_SUB_BANDS]) {
-                    if (!checkIsMergeBorder(subBandNode)) {
-                        return false;
-                    }
-                }
-            }
-            return true;
+  treeObj: null,
+  currentNode: null,
+  innerCounter: 1,
+  canTrickEvent: false,
+  iniTree: function (rptTpl) {
+    let me = bandTreeOprObj;
+    let bandList = rptTpl[JV.NODE_BAND_COLLECTION];
+    me.buildTreeData(bandList);
+    let rootNode = {
+      Name: "布局框(勾选表示:此布局框是报表外框,受报表边框属性影响)",
+      isParent: true,
+    };
+    rootNode[JV.BAND_PROP_SUB_BANDS] = bandList;
+    // me.treeObj = $.fn.zTree.init($("#band_tree_reversed"), bandSetting, bandList);
+    me.treeObj = $.fn.zTree.init(
+      $("#band_tree_reversed"),
+      bandSetting,
+      rootNode
+    );
+    me.treeObj.expandAll(true);
+    me.setupMergeBorderChk();
+  },
+  setupMergeBorderChk: function () {
+    let me = bandTreeOprObj;
+    let nodes = me.treeObj.getNodes();
+    me.treeObj.setChkDisabled(nodes[0], true);
+    function checkIsMergeBorder(bandNode) {
+      if (
+        bandNode[JV.BAND_PROP_MERGE_BORDER] != null &&
+        bandNode[JV.BAND_PROP_MERGE_BORDER] != undefined
+      ) {
+        if (
+          stringUtil.convertStrToBoolean(bandNode[JV.BAND_PROP_MERGE_BORDER])
+        ) {
+          me.treeObj.checkNode(bandNode, true);
+          return false;
         }
-        for (let bNode of nodes) {
-            checkIsMergeBorder(bNode);
+      }
+      if (
+        bandNode[JV.BAND_PROP_SUB_BANDS] &&
+        bandNode[JV.BAND_PROP_SUB_BANDS].length > 0
+      ) {
+        for (let subBandNode of bandNode[JV.BAND_PROP_SUB_BANDS]) {
+          if (!checkIsMergeBorder(subBandNode)) {
+            return false;
+          }
         }
-    },
-    copyBandList: function (isAllParent) {
-        let me = this, rst = null;
-        if (me.treeObj) {
-            rst = [];
-            let nodes = me.treeObj.getNodes()[0][JV.BAND_PROP_SUB_BANDS];
-            let private_copy_nodes = function (parentNode, item) {
-                item[JV.PROP_ID] = parentNode[JV.PROP_ID];
-                item[JV.BAND_PROP_NAME] = parentNode[JV.BAND_PROP_NAME];
-                item[JV.BAND_PROP_STYLE] = parentNode[JV.BAND_PROP_STYLE];
-                item[JV.BAND_PROP_CONTROL] = parentNode[JV.BAND_PROP_CONTROL];
-                if (parentNode[JV.BAND_PROP_HEIGHT]) item[JV.BAND_PROP_HEIGHT] = parentNode[JV.BAND_PROP_HEIGHT];
-                if (parentNode[JV.BAND_PROP_WIDTH]) item[JV.BAND_PROP_WIDTH] = parentNode[JV.BAND_PROP_WIDTH];
-                item[JV.BAND_PROP_DISPLAY_TYPE] = parentNode[JV.BAND_PROP_DISPLAY_TYPE];
-                item[JV.BAND_PROP_ALIGNMENT] = parentNode[JV.BAND_PROP_ALIGNMENT];
-                item[JV.BAND_PROP_MERGE_BORDER] = parentNode[JV.BAND_PROP_MERGE_BORDER];
-                if (isAllParent) item.isParent = true;
-                if (parentNode[JV.BAND_PROP_SUB_BANDS]) {
-                    item.items = [];
-                    for (let subNode of parentNode[JV.BAND_PROP_SUB_BANDS]) {
-                        let subItem = {};
-                        private_copy_nodes(subNode, subItem);
-                        item.items.push(subItem);
-                    }
-                }
-            }
-            for (let node of nodes) {
-                let item = {};
-                if (isAllParent) item.isParent = true;
-                private_copy_nodes(node, item);
-                rst.push(item);
-            }
-        } else {
-            console.log("the band tree is not ready!");
-        }
-        return rst;
-    },
-    buildTreeData: function(bandList){
-        let rst = [], startIdx = 1;
-        //zTreeHelper.createTree(result, setting, "rptTplTree", me);
-        let private_setBandId = function (parentBand) {
-            if (parentBand[JV.BAND_PROP_SUB_BANDS]) {
-                for (let band of parentBand[JV.BAND_PROP_SUB_BANDS]) {
-                    band.ID = startIdx;
-                    band.ParentID = parentBand.ID;
-                    startIdx++;
-                    private_setBandId(band);
-                }
-            }
+      }
+      return true;
+    }
+    for (let bNode of nodes) {
+      checkIsMergeBorder(bNode);
+    }
+  },
+  copyBandList: function (isAllParent) {
+    let me = this,
+      rst = null;
+    if (me.treeObj) {
+      rst = [];
+      let nodes = me.treeObj.getNodes()[0][JV.BAND_PROP_SUB_BANDS];
+      let private_copy_nodes = function (parentNode, item) {
+        item[JV.PROP_ID] = parentNode[JV.PROP_ID];
+        item[JV.BAND_PROP_NAME] = parentNode[JV.BAND_PROP_NAME];
+        item[JV.BAND_PROP_STYLE] = parentNode[JV.BAND_PROP_STYLE];
+        item[JV.BAND_PROP_CONTROL] = parentNode[JV.BAND_PROP_CONTROL];
+        if (parentNode[JV.BAND_PROP_HEIGHT])
+          item[JV.BAND_PROP_HEIGHT] = parentNode[JV.BAND_PROP_HEIGHT];
+        if (parentNode[JV.BAND_PROP_WIDTH])
+          item[JV.BAND_PROP_WIDTH] = parentNode[JV.BAND_PROP_WIDTH];
+        item[JV.BAND_PROP_DISPLAY_TYPE] = parentNode[JV.BAND_PROP_DISPLAY_TYPE];
+        item[JV.BAND_PROP_ALIGNMENT] = parentNode[JV.BAND_PROP_ALIGNMENT];
+        item[JV.BAND_PROP_MERGE_BORDER] = parentNode[JV.BAND_PROP_MERGE_BORDER];
+        if (isAllParent) item.isParent = true;
+        if (parentNode[JV.BAND_PROP_SUB_BANDS]) {
+          item.items = [];
+          for (let subNode of parentNode[JV.BAND_PROP_SUB_BANDS]) {
+            let subItem = {};
+            private_copy_nodes(subNode, subItem);
+            item.items.push(subItem);
+          }
         }
-        for (let band of bandList) {
-            band.ID = startIdx;
-            band.ParentID = -1;
-            startIdx++;
-            private_setBandId(band);
+      };
+      for (let node of nodes) {
+        let item = {};
+        if (isAllParent) item.isParent = true;
+        private_copy_nodes(node, item);
+        rst.push(item);
+      }
+    } else {
+      console.log("the band tree is not ready!");
+    }
+    return rst;
+  },
+  buildTreeData: function (bandList) {
+    let rst = [],
+      startIdx = 1;
+    //zTreeHelper.createTree(result, setting, "rptTplTree", me);
+    let private_setBandId = function (parentBand) {
+      if (parentBand[JV.BAND_PROP_SUB_BANDS]) {
+        for (let band of parentBand[JV.BAND_PROP_SUB_BANDS]) {
+          band.ID = startIdx;
+          band.ParentID = parentBand.ID;
+          startIdx++;
+          private_setBandId(band);
         }
+      }
+    };
+    for (let band of bandList) {
+      band.ID = startIdx;
+      band.ParentID = -1;
+      startIdx++;
+      private_setBandId(band);
+    }
 
-        return rst;
-    },
-    createBandFromNode: function(node) {
-        let me = this, rst = {};
-        rst[JV.BAND_PROP_ALIGNMENT] = node[JV.BAND_PROP_ALIGNMENT];
-        rst[JV.BAND_PROP_DISPLAY_TYPE] = node[JV.BAND_PROP_DISPLAY_TYPE];
-        let posIdx = JV.LAYOUT.indexOf(node[JV.BAND_PROP_ALIGNMENT])
-        switch(posIdx) {
-            case 0:
-            case 1:
-                rst[JV.BAND_PROP_HEIGHT] = node[JV.BAND_PROP_HEIGHT];
-                break;
-            case 2:
-            case 3:
-                rst[JV.BAND_PROP_WIDTH] = node[JV.BAND_PROP_WIDTH];
-                break;
-        }
-        rst[JV.PROP_NAME] = node[JV.PROP_NAME];
-        rst[JV.PROP_CONTROL] = node[JV.PROP_CONTROL];
-        rst[JV.PROP_STYLE] = node[JV.PROP_STYLE];
-        if (node[JV.BAND_PROP_MERGE_BORDER] !== undefined) {
-            rst[JV.BAND_PROP_MERGE_BORDER] = node[JV.BAND_PROP_MERGE_BORDER];
-        } else {
-            rst[JV.BAND_PROP_MERGE_BORDER] = 'F';
-        }
-        if (node[JV.BAND_PROP_SUB_BANDS]) {
-            rst[JV.BAND_PROP_SUB_BANDS] = [];
-            for (let subNode of node[JV.BAND_PROP_SUB_BANDS]) {
-                rst[JV.BAND_PROP_SUB_BANDS].push(me.createBandFromNode(subNode));
-            }
-        }
-        return rst;
-    },
-    createDftBand: function () {
-        let me = this, rst = {};
-        rst[JV.BAND_PROP_ALIGNMENT] = 'Top';
-        rst[JV.BAND_PROP_DISPLAY_TYPE] = 'EveryPage';
-        rst[JV.BAND_PROP_HEIGHT] = '3';
-        rst[JV.PROP_NAME] = 'newBand_' + me.innerCounter;
-        me.innerCounter++;
-        rst[JV.PROP_CONTROL] = 'Default';
-        rst[JV.PROP_STYLE] = 'Default_None';
-        rst[JV.BAND_PROP_MERGE_BORDER] = 'F';
-        return rst;
-    },
-    addHoverDom: function(treeId, treeNode) {
-        let me = bandTreeOprObj, sObj = $("#" + treeNode.tId + "_span");
-        if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length > 0 || treeNode.nodeType === RT.NodeType.TEMPLATE) return;
-        let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增布局框' onfocus='this.blur();'></span>";
-        sObj.after(addStr);
-        let btn = $("#addBtn_"+treeNode.tId);
-        if (btn) btn.bind("click", function(){
-            let newBand = me.createDftBand();
-            let newNodes = [], isSilent = false;
-            newNodes.push(newBand);
-            if (!treeNode.hasOwnProperty("band_s")) {
-                treeNode["band_s"] = [];
-                treeNode.isParent = true;
-            }
-            me.treeObj.addNodes(treeNode, -1, newNodes, isSilent);
-        });
-    },
-    removeHoverDom: function(treeId, treeNode) {
-        $("#addBtn_"+treeNode.tId).unbind().remove();
-    },
-    onBeforeDrag: function (treeId, treeNodes) {
-        let rst = true;
-        for (let node of treeNodes) {
-            if (node.level === 0) {
-                rst = false;
-                break;
-            }
-        }
-        return rst;
-    },
-    onBeforeDrop: function (treeId, treeNodes, targetNode, moveType, isCopy) {
-        let me = bandTreeOprObj, rst = true;
-        if (targetNode.level === 0) {
-            if (moveType !== 'inner') {
-                rst = false;
-            }
-        }
-        return rst;
-    },
-    onClick: function(event,treeId,treeNode) {
-        let me = bandTreeOprObj;
-        me.currentNode = treeNode;
-        me.canTrickEvent = false;
-        //then refresh the band tab properties
-        //边框样式borderStyles
-        $("#borderStyles").get(0).selectedIndex = rpt_tpl_cfg_helper.reportCfg.borderArr.indexOf(treeNode[JV.PROP_STYLE]);
-        //边框合并
-        // $("#mergeBandBorder").get(0).checked = stringUtil.convertStrToBoolean(treeNode[JV.BAND_PROP_MERGE_BORDER]);
-        //位置
-        let posIdx = JV.LAYOUT.indexOf(treeNode[JV.BAND_PROP_ALIGNMENT])
-        $("#bandAlignment").get(0).selectedIndex = posIdx;
-        //高与宽
-        me.setupWidthHeightByPosition(posIdx);
-        //频率
-        $("#pageFrequency").get(0).selectedIndex = JV.PAGE_STATUS.indexOf(treeNode[JV.BAND_PROP_DISPLAY_TYPE])
-        //
-        me.canTrickEvent = true;
-    },
-    onCheck: function (event,treeId,treeNode) {
-        let me = bandTreeOprObj;
-        let nodes = me.treeObj.getNodes();
-        function unCheckMergeBorder(bandNode) {
-            if (bandNode[JV.BAND_PROP_MERGE_BORDER] != null && bandNode[JV.BAND_PROP_MERGE_BORDER] != undefined) {
-                bandNode[JV.BAND_PROP_MERGE_BORDER] = 'F';
-            }
-            if (bandNode[JV.BAND_PROP_SUB_BANDS] && bandNode[JV.BAND_PROP_SUB_BANDS].length > 0) {
-                for (let subBandNode of bandNode[JV.BAND_PROP_SUB_BANDS]) {
-                    unCheckMergeBorder(subBandNode)
-                }
-            }
-        }
-        for (let bNode of nodes) {
-            unCheckMergeBorder(bNode);
-        }
-        if (treeNode.checked) {
-            treeNode[JV.BAND_PROP_MERGE_BORDER] = 'T';
-        }
-    },
-    onBeforeRemove: function(treeId, treeNode){
-        let rst = true;
-        if (treeNode.band_s && treeNode.band_s.length > 0) {
-            rst = false;
-        } else {
-            rst = confirm("在删除前请确认报表模板内部没有引用,否则会造成混淆。");
-        }
-        return rst;
-    },
-    setupWidthHeightByPosition: function (posIdx) {
-        let me = this, treeNode = me.currentNode;
-        switch(posIdx) {
-            case 0:
-            case 1:
-                $("#bandHeight").get(0).disabled = false;
-                $("#bandHeight").get(0).value = treeNode[JV.BAND_PROP_HEIGHT];
-                $("#bandWidth").get(0).disabled = true;
-                $("#bandWidth").get(0).value = "";
-                break;
-            case 2:
-            case 3:
-                $("#bandHeight").get(0).disabled = true;
-                $("#bandHeight").get(0).value = "";
-                $("#bandWidth").get(0).disabled = false;
-                $("#bandWidth").get(0).value = treeNode[JV.BAND_PROP_WIDTH];
-                break;
-            default:
-                $("#bandHeight").get(0).disabled = true;
-                $("#bandHeight").get(0).value = "";
-                $("#bandWidth").get(0).disabled = true;
-                $("#bandWidth").get(0).value = "";
-                break;
-        }
-    },
-    bandStyleChange: function (dom) {
-        let me = this;
-        if (me.currentNode) {
-            me.currentNode[JV.PROP_STYLE] = rpt_tpl_cfg_helper.reportCfg.borderArr[dom.selectedIndex];
-        }
-    },
-    bandAlignmentChange: function (dom) {
-        let me = this;
-        if (me.currentNode) {
-            let posIdx = dom.selectedIndex;
-            me.currentNode[JV.BAND_PROP_ALIGNMENT] = JV.LAYOUT[posIdx];
-            me.setupWidthHeightByPosition(posIdx);
-        }
-    },
-    bandHeightWidthChange: function (dom) {
-        let me = this, treeNode = me.currentNode;
-        if (me.currentNode) {
-            let posIdx = $("#bandAlignment").get(0).selectedIndex;
-            switch(posIdx) {
-                case 0:
-                case 1:
-                    treeNode[JV.BAND_PROP_HEIGHT] = dom.value;
-                    break;
-                case 2:
-                case 3:
-                    treeNode[JV.BAND_PROP_WIDTH] = dom.value;
-                    break;
-            }
+    return rst;
+  },
+  createBandFromNode: function (node) {
+    let me = this,
+      rst = {};
+    rst[JV.BAND_PROP_ALIGNMENT] = node[JV.BAND_PROP_ALIGNMENT];
+    rst[JV.BAND_PROP_DISPLAY_TYPE] = node[JV.BAND_PROP_DISPLAY_TYPE];
+    let posIdx = JV.LAYOUT.indexOf(node[JV.BAND_PROP_ALIGNMENT]);
+    switch (posIdx) {
+      case 0:
+      case 1:
+        rst[JV.BAND_PROP_HEIGHT] = node[JV.BAND_PROP_HEIGHT];
+        break;
+      case 2:
+      case 3:
+        rst[JV.BAND_PROP_WIDTH] = node[JV.BAND_PROP_WIDTH];
+        break;
+    }
+    rst[JV.PROP_NAME] = node[JV.PROP_NAME];
+    rst[JV.PROP_CONTROL] = node[JV.PROP_CONTROL];
+    rst[JV.PROP_STYLE] = node[JV.PROP_STYLE];
+    if (node.hasOwnProperty(JV.PROP_CALCULATION)) {
+      rst[JV.PROP_CALCULATION] = node[JV.PROP_CALCULATION];
+    }
+    if (node[JV.BAND_PROP_MERGE_BORDER] !== undefined) {
+      rst[JV.BAND_PROP_MERGE_BORDER] = node[JV.BAND_PROP_MERGE_BORDER];
+    } else {
+      rst[JV.BAND_PROP_MERGE_BORDER] = "F";
+    }
+    if (node[JV.BAND_PROP_SUB_BANDS]) {
+      rst[JV.BAND_PROP_SUB_BANDS] = [];
+      for (let subNode of node[JV.BAND_PROP_SUB_BANDS]) {
+        rst[JV.BAND_PROP_SUB_BANDS].push(me.createBandFromNode(subNode));
+      }
+    }
+    return rst;
+  },
+  createDftBand: function () {
+    let me = this,
+      rst = {};
+    rst[JV.BAND_PROP_ALIGNMENT] = "Top";
+    rst[JV.BAND_PROP_DISPLAY_TYPE] = "EveryPage";
+    rst[JV.BAND_PROP_HEIGHT] = "3";
+    rst[JV.PROP_NAME] = "newBand_" + me.innerCounter;
+    me.innerCounter++;
+    rst[JV.PROP_CONTROL] = "Default";
+    rst[JV.PROP_STYLE] = "Default_None";
+    rst[JV.BAND_PROP_MERGE_BORDER] = "F";
+    return rst;
+  },
+  addHoverDom: function (treeId, treeNode) {
+    let me = bandTreeOprObj,
+      sObj = $("#" + treeNode.tId + "_span");
+    if (
+      treeNode.editNameFlag ||
+      $("#addBtn_" + treeNode.tId).length > 0 ||
+      treeNode.nodeType === RT.NodeType.TEMPLATE
+    )
+      return;
+    let addStr =
+      "<span class='button add' id='addBtn_" +
+      treeNode.tId +
+      "' title='新增布局框' onfocus='this.blur();'></span>";
+    sObj.after(addStr);
+    let btn = $("#addBtn_" + treeNode.tId);
+    if (btn)
+      btn.bind("click", function () {
+        let newBand = me.createDftBand();
+        let newNodes = [],
+          isSilent = false;
+        newNodes.push(newBand);
+        if (!treeNode.hasOwnProperty("band_s")) {
+          treeNode["band_s"] = [];
+          treeNode.isParent = true;
         }
-    },
-    changeBandHeight: function (bandName, newHeight) {
-        let me = this;
-        let private_setup_band_height = function (bNode) {
-            let rst = false;
-            if (bNode[JV.PROP_NAME] === bandName) {
-                bNode[JV.BAND_PROP_HEIGHT] = newHeight;
-                rst = true;
-            }
-            if (bNode[JV.BAND_PROP_SUB_BANDS] && bNode[JV.BAND_PROP_SUB_BANDS].length > 0) {
-                for (let sbNode of bNode[JV.BAND_PROP_SUB_BANDS]) {
-                    if (private_setup_band_height(sbNode)) {
-                        rst = true;
-                        break;
-                    }
-                }
-            }
-            return rst;
-        };
-        if (me.currentNode && me.currentNode[JV.PROP_NAME] === bandName) {
-            me.currentNode[JV.BAND_PROP_HEIGHT] = newHeight;
-        } else {
-            let nodes = me.treeObj.getNodes();
-            for (let node of nodes) {
-                if (private_setup_band_height(node)) {
-                    break;
-                }
-            }
+        me.treeObj.addNodes(treeNode, -1, newNodes, isSilent);
+      });
+  },
+  removeHoverDom: function (treeId, treeNode) {
+    $("#addBtn_" + treeNode.tId)
+      .unbind()
+      .remove();
+  },
+  onBeforeDrag: function (treeId, treeNodes) {
+    let rst = true;
+    for (let node of treeNodes) {
+      if (node.level === 0) {
+        rst = false;
+        break;
+      }
+    }
+    return rst;
+  },
+  onBeforeDrop: function (treeId, treeNodes, targetNode, moveType, isCopy) {
+    let me = bandTreeOprObj,
+      rst = true;
+    if (targetNode.level === 0) {
+      if (moveType !== "inner") {
+        rst = false;
+      }
+    }
+    return rst;
+  },
+  onClick: function (event, treeId, treeNode) {
+    let me = bandTreeOprObj;
+    me.currentNode = treeNode;
+    me.canTrickEvent = false;
+    //then refresh the band tab properties
+    //边框样式borderStyles
+    $("#borderStyles").get(0).selectedIndex =
+      rpt_tpl_cfg_helper.reportCfg.borderArr.indexOf(treeNode[JV.PROP_STYLE]);
+    //边框合并
+    // $("#mergeBandBorder").get(0).checked = stringUtil.convertStrToBoolean(treeNode[JV.BAND_PROP_MERGE_BORDER]);
+    //位置
+    let posIdx = JV.LAYOUT.indexOf(treeNode[JV.BAND_PROP_ALIGNMENT]);
+    $("#bandAlignment").get(0).selectedIndex = posIdx;
+    //高与宽
+    me.setupWidthHeightByPosition(posIdx);
+    //频率
+    $("#pageFrequency").get(0).selectedIndex = JV.PAGE_STATUS.indexOf(
+      treeNode[JV.BAND_PROP_DISPLAY_TYPE]
+    );
+    //
+    me.canTrickEvent = true;
+  },
+  onCheck: function (event, treeId, treeNode) {
+    let me = bandTreeOprObj;
+    let nodes = me.treeObj.getNodes();
+    function unCheckMergeBorder(bandNode) {
+      if (
+        bandNode[JV.BAND_PROP_MERGE_BORDER] != null &&
+        bandNode[JV.BAND_PROP_MERGE_BORDER] != undefined
+      ) {
+        bandNode[JV.BAND_PROP_MERGE_BORDER] = "F";
+      }
+      if (
+        bandNode[JV.BAND_PROP_SUB_BANDS] &&
+        bandNode[JV.BAND_PROP_SUB_BANDS].length > 0
+      ) {
+        for (let subBandNode of bandNode[JV.BAND_PROP_SUB_BANDS]) {
+          unCheckMergeBorder(subBandNode);
         }
-    },
-    bandShowFrequencyChange: function (dom) {
-        let me = this;
-        if (me.currentNode) {
-            me.currentNode[JV.BAND_PROP_DISPLAY_TYPE] = JV.PAGE_STATUS[dom.selectedIndex];
+      }
+    }
+    for (let bNode of nodes) {
+      unCheckMergeBorder(bNode);
+    }
+    if (treeNode.checked) {
+      treeNode[JV.BAND_PROP_MERGE_BORDER] = "T";
+    }
+  },
+  onBeforeRemove: function (treeId, treeNode) {
+    let rst = true;
+    if (treeNode.band_s && treeNode.band_s.length > 0) {
+      rst = false;
+    } else {
+      rst = confirm("在删除前请确认报表模板内部没有引用,否则会造成混淆。");
+    }
+    return rst;
+  },
+  setupWidthHeightByPosition: function (posIdx) {
+    let me = this,
+      treeNode = me.currentNode;
+    switch (posIdx) {
+      case 0:
+      case 1:
+        $("#bandHeight").get(0).disabled = false;
+        $("#bandHeight").get(0).value = treeNode[JV.BAND_PROP_HEIGHT];
+        $("#bandWidth").get(0).disabled = true;
+        $("#bandWidth").get(0).value = "";
+        break;
+      case 2:
+      case 3:
+        $("#bandHeight").get(0).disabled = true;
+        $("#bandHeight").get(0).value = "";
+        $("#bandWidth").get(0).disabled = false;
+        $("#bandWidth").get(0).value = treeNode[JV.BAND_PROP_WIDTH];
+        break;
+      default:
+        $("#bandHeight").get(0).disabled = true;
+        $("#bandHeight").get(0).value = "";
+        $("#bandWidth").get(0).disabled = true;
+        $("#bandWidth").get(0).value = "";
+        break;
+    }
+    if (treeNode.hasOwnProperty(JV.PROP_CALCULATION)) {
+      if (treeNode[JV.PROP_CALCULATION] === JV.CAL_TYPE[0]) {
+        $("#isBandPercentage").get(0).checked = true;
+      } else {
+        $("#isBandPercentage").get(0).checked = false;
+      }
+    } else {
+      $("#isBandPercentage").get(0).checked = false;
+    }
+  },
+  bandStyleChange: function (dom) {
+    let me = this;
+    if (me.currentNode) {
+      me.currentNode[JV.PROP_STYLE] =
+        rpt_tpl_cfg_helper.reportCfg.borderArr[dom.selectedIndex];
+    }
+  },
+  bandAlignmentChange: function (dom) {
+    let me = this;
+    if (me.currentNode) {
+      let posIdx = dom.selectedIndex;
+      me.currentNode[JV.BAND_PROP_ALIGNMENT] = JV.LAYOUT[posIdx];
+      me.setupWidthHeightByPosition(posIdx);
+    }
+  },
+  bandHeightWidthChange: function (dom) {
+    let me = this,
+      treeNode = me.currentNode;
+    if (me.currentNode) {
+      let posIdx = $("#bandAlignment").get(0).selectedIndex;
+      switch (posIdx) {
+        case 0:
+        case 1:
+          treeNode[JV.BAND_PROP_HEIGHT] = dom.value;
+          break;
+        case 2:
+        case 3:
+          treeNode[JV.BAND_PROP_WIDTH] = dom.value;
+          break;
+      }
+    }
+  },
+  changeBandHeight: function (bandName, newHeight) {
+    let me = this;
+    let private_setup_band_height = function (bNode) {
+      let rst = false;
+      if (bNode[JV.PROP_NAME] === bandName) {
+        bNode[JV.BAND_PROP_HEIGHT] = newHeight;
+        rst = true;
+      }
+      if (
+        bNode[JV.BAND_PROP_SUB_BANDS] &&
+        bNode[JV.BAND_PROP_SUB_BANDS].length > 0
+      ) {
+        for (let sbNode of bNode[JV.BAND_PROP_SUB_BANDS]) {
+          if (private_setup_band_height(sbNode)) {
+            rst = true;
+            break;
+          }
         }
-    },
-    extractBands: function (rptTpl) {
-        let me = this;
-        if (rptTpl) {
-            let newBandList = [];
-            let nodes = me.treeObj.getNodes()[0][JV.BAND_PROP_SUB_BANDS];
-            for (let node of nodes) {
-                newBandList.push(me.createBandFromNode(node));
-            }
-            rptTpl[JV.NODE_BAND_COLLECTION] = newBandList;
+      }
+      return rst;
+    };
+    if (me.currentNode && me.currentNode[JV.PROP_NAME] === bandName) {
+      me.currentNode[JV.BAND_PROP_HEIGHT] = newHeight;
+    } else {
+      let nodes = me.treeObj.getNodes();
+      for (let node of nodes) {
+        if (private_setup_band_height(node)) {
+          break;
         }
+      }
     }
-
+  },
+  changeAreaCalcType: function (dom) {
+    if (bandTreeOprObj.currentNode) {
+      bandTreeOprObj.currentNode[JV.PROP_CALCULATION] = dom.checked
+        ? JV.CAL_TYPE[0]
+        : JV.CAL_TYPE[1];
+    }
+  },
+  bandShowFrequencyChange: function (dom) {
+    let me = this;
+    if (me.currentNode) {
+      me.currentNode[JV.BAND_PROP_DISPLAY_TYPE] =
+        JV.PAGE_STATUS[dom.selectedIndex];
+    }
+  },
+  extractBands: function (rptTpl) {
+    let me = this;
+    if (rptTpl) {
+      let newBandList = [];
+      let nodes = me.treeObj.getNodes()[0][JV.BAND_PROP_SUB_BANDS];
+      for (let node of nodes) {
+        newBandList.push(me.createBandFromNode(node));
+      }
+      rptTpl[JV.NODE_BAND_COLLECTION] = newBandList;
+    }
+  },
 };

+ 270 - 188
web/maintain/report/js/rpt_tpl_preview_util.js

@@ -4,201 +4,283 @@
  */
 
 let preview_util = {
-    offsetX: 0,
-    offsetY: 0,
-    clearCanvas: function (canvas) {
-        if (canvas) {
-            let ctx = canvas.getContext("2d");
-            ctx.save();
-            ctx.fillStyle="white";
-            ctx.clearRect(0,0, canvas.width, canvas.height);
-            ctx.restore();
-        }
-    },
-    drawBorder: function (canvas) {
-        let me = this;
-        if (canvas) {
-            let size = [];
-            size[0] = canvas.width - 1;
-            size[1] = canvas.height - 1;
-            let ctx = canvas.getContext("2d");
-            ctx.save();
-            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.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);
-        }
-    },
-    preview: function(canvas, rptTpl) {
-        let me = this, resolution= [96,96], size = null, shrinkFactor = 1;
+  offsetX: 0,
+  offsetY: 0,
+  clearCanvas: function (canvas) {
+    if (canvas) {
+      let ctx = canvas.getContext("2d");
+      ctx.save();
+      ctx.fillStyle = "white";
+      ctx.clearRect(0, 0, canvas.width, canvas.height);
+      ctx.restore();
+    }
+  },
+  drawBorder: function (canvas) {
+    let me = this;
+    if (canvas) {
+      let size = [];
+      size[0] = canvas.width - 1;
+      size[1] = canvas.height - 1;
+      let ctx = canvas.getContext("2d");
+      ctx.save();
+      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.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);
+    }
+  },
+  preview: function (canvas, rptTpl) {
+    let me = this,
+      resolution = [96, 96],
+      size = null,
+      shrinkFactor = 1;
 
-        if (!(rptTpl)) return;
+    if (!rptTpl) return;
 
-        me.clearCanvas(canvas);
+    me.clearCanvas(canvas);
 
-        let ctx = canvas.getContext("2d");
-        let pageSize = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE];
-        let sizeIdx = JV.PAGES_SIZE_STR.indexOf(pageSize);
-        if (sizeIdx >= 0) {
-            size = JV.PAGES_SIZE[sizeIdx].concat([]);
-        } else {
-            size = JV.PAGES_SIZE[0].concat([]);
-        }
-        if (rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] === JV.ORIENTATION_LANDSCAPE || rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] === JV.ORIENTATION_LANDSCAPE_CHN) {
-            let ts = size[0];
-            size[0] = size[1];
-            size[1] = ts;
-        }
-        if (size[0] > size[1]) {
-            shrinkFactor = 1.0 * canvas.width / (size[0] * resolution[0]);
-        } else {
-            shrinkFactor = 1.0 * canvas.height / (size[1] * resolution[1]);
-        }
+    let ctx = canvas.getContext("2d");
+    let pageSize =
+      rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE];
+    let sizeIdx = JV.PAGES_SIZE_STR.indexOf(pageSize);
+    if (sizeIdx >= 0) {
+      size = JV.PAGES_SIZE[sizeIdx].concat([]);
+    } else {
+      size = JV.PAGES_SIZE[0].concat([]);
+    }
+    if (
+      rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] ===
+        JV.ORIENTATION_LANDSCAPE ||
+      rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] ===
+        JV.ORIENTATION_LANDSCAPE_CHN
+    ) {
+      let ts = size[0];
+      size[0] = size[1];
+      size[1] = ts;
+    }
+    if (size[0] > size[1]) {
+      shrinkFactor = (1.0 * canvas.width) / (size[0] * resolution[0]);
+    } else {
+      shrinkFactor = (1.0 * canvas.height) / (size[1] * resolution[1]);
+    }
 
-        let private_translateUnit = function(unitStr) {
-            let rst = 1.0;
-            if (unitStr) {
-                if (JV.MEASUREMENT.PIXEL.indexOf(unitStr) >= 0) {
-                    rst = 1.0;
-                } else if (JV.MEASUREMENT.CM.indexOf(unitStr) >= 0) {
-                    rst = resolution[0] / 2.54;
-                } else if (JV.MEASUREMENT.INCH.indexOf(unitStr) >= 0) {
-                    rst = resolution[0];
-                }
-            }
-            return rst;
-        };
+    let private_translateUnit = function (unitStr) {
+      let rst = 1.0;
+      if (unitStr) {
+        if (JV.MEASUREMENT.PIXEL.indexOf(unitStr) >= 0) {
+          rst = 1.0;
+        } else if (JV.MEASUREMENT.CM.indexOf(unitStr) >= 0) {
+          rst = resolution[0] / 2.54;
+        } else if (JV.MEASUREMENT.INCH.indexOf(unitStr) >= 0) {
+          rst = resolution[0];
+        }
+      }
+      return rst;
+    };
 
-        let private_getReportArea = function(rptTpl, unitFactor) {
-            let rst = [];
-            rst.push(unitFactor * rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT]);
-            rst.push(unitFactor * rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_TOP]);
-            rst.push(size[0] * resolution[0] - unitFactor * rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_RIGHT]);
-            rst.push(size[1] * resolution[0] - unitFactor * rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_BOTTOM]);
-            return rst;
-        };
+    let private_getReportArea = function (rptTpl, unitFactor) {
+      let rst = [];
+      rst.push(
+        unitFactor * rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT]
+      );
+      rst.push(
+        unitFactor * rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_TOP]
+      );
+      rst.push(
+        size[0] * resolution[0] -
+          unitFactor * rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_RIGHT]
+      );
+      rst.push(
+        size[1] * resolution[0] -
+          unitFactor *
+            rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_BOTTOM]
+      );
+      return rst;
+    };
 
-        let private_setupBandArea = function(band, parentArea) {
-            let rstArea = [].concat(parentArea);
-            switch (JV.LAYOUT.indexOf(band[JV.BAND_PROP_ALIGNMENT])) {
-                case JV.LAYOUT_TOP:
-                    if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
-                        rstArea[JV.IDX_BOTTOM] = rstArea[JV.IDX_TOP] + unitFactor * parseFloat(band[JV.BAND_PROP_HEIGHT]);
-                    } else {
-                        rstArea[JV.IDX_BOTTOM] = rstArea[JV.IDX_TOP] + (rstArea[JV.IDX_BOTTOM] - rstArea[JV.IDX_TOP]) * parseFloat(band[JV.BAND_PROP_HEIGHT]) / 100;
-                    }
-                    parentArea[JV.IDX_TOP] = rstArea[JV.IDX_BOTTOM];
-                    break;
-                case JV.LAYOUT_BOTTOM:
-                    if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
-                        rstArea[JV.IDX_TOP] = rstArea[JV.IDX_BOTTOM] - unitFactor * parseFloat(band[JV.BAND_PROP_HEIGHT]);
-                    } else {
-                        rstArea[JV.IDX_TOP] = rstArea[JV.IDX_BOTTOM] - (rstArea[JV.IDX_BOTTOM] - rstArea[JV.IDX_TOP]) * parseFloat(band[JV.BAND_PROP_HEIGHT]) / 100;
-                    }
-                    parentArea[JV.IDX_BOTTOM] = rstArea[JV.IDX_TOP];
-                    break;
-                case JV.LAYOUT_LEFT:
-                    if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
-                        rstArea[JV.IDX_RIGHT] = rstArea[JV.IDX_LEFT] + unitFactor * parseFloat(band[JV.BAND_PROP_WIDTH]);
-                    } else {
-                        rstArea[JV.IDX_RIGHT] = rstArea[JV.IDX_LEFT] + (rstArea[JV.IDX_RIGHT] - rstArea[JV.IDX_LEFT]) * parseFloat(band[JV.BAND_PROP_WIDTH]) / 100;
-                    }
-                    parentArea[JV.IDX_LEFT] = rstArea[JV.IDX_RIGHT];
-                    break;
-                case JV.LAYOUT_RIGHT:
-                    if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
-                        rstArea[JV.IDX_LEFT] = rstArea[JV.IDX_RIGHT] - unitFactor * parseFloat(band[JV.BAND_PROP_WIDTH]);
-                    } else {
-                        rstArea[JV.IDX_LEFT] = rstArea[JV.IDX_RIGHT] - (rstArea[JV.IDX_RIGHT] - rstArea[JV.IDX_LEFT]) * parseFloat(band[JV.BAND_PROP_WIDTH]) / 100;
-                    }
-                    parentArea[JV.IDX_RIGHT] = rstArea[JV.IDX_LEFT];
-                    break;
-            }
-            return rstArea;
-        };
-        let private_showBand = function (band, myArea, onlyMe, isHighlight) {
-            //1. draw band border
-            ctx.save();
-            ctx.beginPath();
-            ctx.translate(0.5,0.5);
-            ctx.lineWidth = 1;
-            if (isHighlight) {
-                ctx.strokeStyle="#0000ff";
+    let private_setupBandArea = function (band, parentArea) {
+      let rstArea = [].concat(parentArea);
+      switch (JV.LAYOUT.indexOf(band[JV.BAND_PROP_ALIGNMENT])) {
+        case JV.LAYOUT_TOP:
+          if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
+            rstArea[JV.IDX_BOTTOM] =
+              rstArea[JV.IDX_TOP] +
+              unitFactor * parseFloat(band[JV.BAND_PROP_HEIGHT]);
+          } else {
+            rstArea[JV.IDX_BOTTOM] =
+              rstArea[JV.IDX_TOP] +
+              ((rstArea[JV.IDX_BOTTOM] - rstArea[JV.IDX_TOP]) *
+                parseFloat(band[JV.BAND_PROP_HEIGHT])) /
+                100;
+          }
+          parentArea[JV.IDX_TOP] = rstArea[JV.IDX_BOTTOM];
+          break;
+        case JV.LAYOUT_BOTTOM:
+          if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
+            rstArea[JV.IDX_TOP] =
+              rstArea[JV.IDX_BOTTOM] -
+              unitFactor * parseFloat(band[JV.BAND_PROP_HEIGHT]);
+          } else {
+            rstArea[JV.IDX_TOP] =
+              rstArea[JV.IDX_BOTTOM] -
+              ((rstArea[JV.IDX_BOTTOM] - rstArea[JV.IDX_TOP]) *
+                parseFloat(band[JV.BAND_PROP_HEIGHT])) /
+                100;
+          }
+          parentArea[JV.IDX_BOTTOM] = rstArea[JV.IDX_TOP];
+          break;
+        case JV.LAYOUT_LEFT:
+          if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
+            rstArea[JV.IDX_RIGHT] =
+              rstArea[JV.IDX_LEFT] +
+              unitFactor * parseFloat(band[JV.BAND_PROP_WIDTH]);
+          } else {
+            rstArea[JV.IDX_RIGHT] =
+              rstArea[JV.IDX_LEFT] +
+              ((rstArea[JV.IDX_RIGHT] - rstArea[JV.IDX_LEFT]) *
+                parseFloat(band[JV.BAND_PROP_WIDTH])) /
+                100;
+          }
+          parentArea[JV.IDX_LEFT] = rstArea[JV.IDX_RIGHT];
+          break;
+        case JV.LAYOUT_RIGHT:
+          if (band[JV.PROP_CALCULATION] === JV.CAL_TYPE_ABSTRACT) {
+            rstArea[JV.IDX_LEFT] =
+              rstArea[JV.IDX_RIGHT] -
+              unitFactor * parseFloat(band[JV.BAND_PROP_WIDTH]);
+          } else {
+            rstArea[JV.IDX_LEFT] =
+              rstArea[JV.IDX_RIGHT] -
+              ((rstArea[JV.IDX_RIGHT] - rstArea[JV.IDX_LEFT]) *
+                parseFloat(band[JV.BAND_PROP_WIDTH])) /
+                100;
+          }
+          parentArea[JV.IDX_RIGHT] = rstArea[JV.IDX_LEFT];
+          break;
+      }
+      return rstArea;
+    };
+    let private_showBand = function (band, myArea, onlyMe, isHighlight) {
+      //1. draw band border
+      ctx.save();
+      ctx.beginPath();
+      ctx.translate(0.5, 0.5);
+      ctx.lineWidth = 1;
+      if (isHighlight) {
+        ctx.strokeStyle = "#0000ff";
+      } else {
+        ctx.setLineDash([3, 6]);
+      }
+      ctx.moveTo(
+        (me.offsetX + myArea[JV.IDX_LEFT]) * shrinkFactor,
+        (me.offsetY + myArea[JV.IDX_TOP]) * shrinkFactor
+      );
+      ctx.lineTo(
+        (me.offsetX + myArea[JV.IDX_RIGHT]) * shrinkFactor,
+        (me.offsetY + myArea[JV.IDX_TOP]) * shrinkFactor
+      );
+      ctx.lineTo(
+        (me.offsetX + myArea[JV.IDX_RIGHT]) * shrinkFactor,
+        (me.offsetY + myArea[JV.IDX_BOTTOM]) * shrinkFactor
+      );
+      ctx.lineTo(
+        (me.offsetX + myArea[JV.IDX_LEFT]) * shrinkFactor,
+        (me.offsetY + myArea[JV.IDX_BOTTOM]) * shrinkFactor
+      );
+      ctx.lineTo(
+        (me.offsetX + myArea[JV.IDX_LEFT]) * shrinkFactor,
+        (me.offsetY + myArea[JV.IDX_TOP]) * shrinkFactor
+      );
+      ctx.stroke();
+      ctx.restore();
+      //2. then draw sub bands border if have.
+      if (band[JV.BAND_PROP_SUB_BANDS] && !onlyMe) {
+        for (let subBand of band[JV.BAND_PROP_SUB_BANDS]) {
+          if (!subBand[JV.PROP_CALCULATION])
+            subBand[JV.PROP_CALCULATION] = JV.CAL_TYPE_ABSTRACT;
+          let area = private_setupBandArea(band, myArea);
+          private_showBand(subBand, area, false, false);
+        }
+      }
+    };
+    let unitFactor = private_translateUnit(
+        rptTpl[JV.NODE_MAIN_INFO][JV.PROP_UNITS]
+      ),
+      orgArea = private_getReportArea(rptTpl, unitFactor);
+    for (let band of rptTpl[JV.NODE_BAND_COLLECTION]) {
+      if (!band[JV.PROP_CALCULATION])
+        band[JV.PROP_CALCULATION] = JV.CAL_TYPE_ABSTRACT;
+      let area = private_setupBandArea(band, orgArea);
+      //bandTreeOprObj.reportCfg.styles
+      private_showBand(band, area, false, false);
+    }
+    if (bandTreeOprObj.currentNode) {
+      //need to high-light the band?
+    }
+  },
+  getPreviewPage: function (canvas) {
+    if (zTreeOprObj.currentNode.refId) {
+      let params = {},
+        me = this;
+      params.rpt_tpl_id = zTreeOprObj.currentNode.refId;
+      let pageSize =
+        zTreeOprObj.currentNode.rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][
+          JV.PROP_PAGE_SIZE
+        ];
+      if (!pageSize) pageSize = "A4";
+      params.pageSize = pageSize;
+      CommonAjax.postEx(
+        "report_api/getPreviewPage",
+        params,
+        10000,
+        true,
+        function (result) {
+          if (result) {
+            if (pageSize === "A4") {
+              if (
+                zTreeOprObj.currentNode.rptTpl[JV.NODE_MAIN_INFO][
+                  JV.NODE_PAGE_INFO
+                ][JV.PROP_ORIENTATION] === JV.ORIENTATION_PORTRAIT
+              ) {
+                canvas.width = 825;
+                canvas.height = 1150;
+              } else {
+                canvas.width = 1150;
+                canvas.height = 825;
+              }
             } else {
-                ctx.setLineDash([3, 6]);
-            }
-            ctx.moveTo((me.offsetX + myArea[JV.IDX_LEFT]) * shrinkFactor, (me.offsetY + myArea[JV.IDX_TOP]) * shrinkFactor );
-            ctx.lineTo((me.offsetX + myArea[JV.IDX_RIGHT]) * shrinkFactor, (me.offsetY + myArea[JV.IDX_TOP]) * shrinkFactor);
-            ctx.lineTo((me.offsetX + myArea[JV.IDX_RIGHT]) * shrinkFactor, (me.offsetY + myArea[JV.IDX_BOTTOM]) * shrinkFactor);
-            ctx.lineTo((me.offsetX + myArea[JV.IDX_LEFT]) * shrinkFactor, (me.offsetY + myArea[JV.IDX_BOTTOM]) * shrinkFactor);
-            ctx.lineTo((me.offsetX + myArea[JV.IDX_LEFT]) * shrinkFactor, (me.offsetY + myArea[JV.IDX_TOP]) * shrinkFactor);
-            ctx.stroke();
-            ctx.restore();
-            //2. then draw sub bands border if have.
-            if (band[JV.BAND_PROP_SUB_BANDS] && !onlyMe) {
-                for (let subBand of band[JV.BAND_PROP_SUB_BANDS]) {
-                    if (!(subBand[JV.PROP_CALCULATION])) subBand[JV.PROP_CALCULATION] = JV.CAL_TYPE_ABSTRACT;
-                    let area = private_setupBandArea(band, myArea);
-                    private_showBand(subBand, area, false, false);
-                }
+              if (
+                zTreeOprObj.currentNode.rptTpl[JV.NODE_MAIN_INFO][
+                  JV.NODE_PAGE_INFO
+                ][JV.PROP_ORIENTATION] === JV.ORIENTATION_PORTRAIT
+              ) {
+                canvas.width = 1150;
+                canvas.height = 1650;
+              } else {
+                canvas.width = 1650;
+                canvas.height = 1150;
+              }
             }
-        };
-        let unitFactor = private_translateUnit(rptTpl[JV.NODE_MAIN_INFO][JV.PROP_UNITS]),
-            orgArea = private_getReportArea(rptTpl, unitFactor);
-        for (let band of rptTpl[JV.NODE_BAND_COLLECTION]) {
-            if (!(band[JV.PROP_CALCULATION])) band[JV.PROP_CALCULATION] = JV.CAL_TYPE_ABSTRACT;
-            let area = private_setupBandArea(band, orgArea);
-            //bandTreeOprObj.reportCfg.styles
-            private_showBand(band, area, false, false);
-        }
-        if (bandTreeOprObj.currentNode) {
-            //need to high-light the band?
-        }
-    },
-    getPreviewPage: function(canvas) {
-        if (zTreeOprObj.currentNode.refId) {
-            let params = {}, me = this;
-            params.rpt_tpl_id = zTreeOprObj.currentNode.refId;
-            let pageSize = zTreeOprObj.currentNode.rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE];
-            if (!pageSize) pageSize = 'A4';
-            params.pageSize = pageSize;
-            CommonAjax.postEx("report_api/getPreviewPage", params, 10000, true, function(result){
-                    if (result) {
-                        if (pageSize === 'A4') {
-                            if (zTreeOprObj.currentNode.rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] === JV.ORIENTATION_PORTRAIT) {
-                                canvas.width = 825;
-                                canvas.height = 1150;
-                            } else {
-                                canvas.width = 1150;
-                                canvas.height = 825;
-                            }
-                        } else {
-                            if (zTreeOprObj.currentNode.rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] === JV.ORIENTATION_PORTRAIT) {
-                                canvas.width = 1150;
-                                canvas.height = 1650;
-                            } else {
-                                canvas.width = 1650;
-                                canvas.height = 1150;
-                            }
-                        }
-                        JpcCanvasOutput.cleanCanvas(canvas);
-                        JpcCanvasOutput.drawPageBorder(result, canvas, [96,96]);
-                        JpcCanvasOutput.highlightConflictArea(result, 1);
-                        JpcCanvasOutput.drawToCanvas(result, canvas, 1);
-                    } else {
-                        alert('preview error!');
-                    }
-                }, null, null
-            );
-        }
+            JpcCanvasOutput.cleanCanvas(canvas);
+            JpcCanvasOutput.drawPageBorder(result, canvas, [96, 96]);
+            JpcCanvasOutput.highlightConflictArea(result, 1);
+            JpcCanvasOutput.drawToCanvas(result, canvas, 1);
+          } else {
+            alert("preview error!");
+          }
+        },
+        null,
+        null
+      );
     }
+  },
 };