Browse Source

report template tuning and code sync

TonyKang 7 years ago
parent
commit
76d3510d51

+ 2 - 2
modules/reports/rpt_component/helper/jpc_helper_area.js

@@ -50,12 +50,12 @@ let JpcAreaHelper = {
                 }
             } else {
                 //颗粒度更加细化的控制,可能上下两边的计算坐标方式都不同
-                if (areaNode[JV.PROP_H_CALCULATION][JV.PROP_TOP] === JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE]) {
+                if (areaNode[JV.PROP_V_CALCULATION][JV.PROP_TOP] === JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE]) {
                     innerTop = (1.0 * areaNode[JV.PROP_TOP] * areaHeight / JV.HUNDRED_PERCENT);
                 } else {
                     innerTop = 1.0 * areaNode[JV.PROP_TOP] * unitFactor;
                 }
-                if (areaNode[JV.PROP_H_CALCULATION][JV.PROP_BOTTOM] === JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE]) {
+                if (areaNode[JV.PROP_V_CALCULATION][JV.PROP_BOTTOM] === JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE]) {
                     innerBottom = (1.0 * areaNode[JV.PROP_BOTTOM] * areaHeight / JV.HUNDRED_PERCENT);
                 } else {
                     innerBottom = 1.0 * areaNode[JV.PROP_BOTTOM] * unitFactor;

+ 7 - 3
web/maintain/report/js/cfg_const.js

@@ -90,9 +90,9 @@ let bandSetting = {
     edit: {
         enable: true,
         editNameSelectAll: true,
-        showRemoveBtn: false,
+        showRemoveBtn: true,
         showRenameBtn: true,
-        //removeTitle: "删除节点",
+        removeTitle: "删除模板框",
         renameTitle: "更改名称"
     },
     data: {
@@ -112,7 +112,8 @@ let bandSetting = {
         }
     },
     callback:{
-        onClick: bandTreeOprObj.onClick
+        onClick: bandTreeOprObj.onClick,
+        beforeRemove: bandTreeOprObj.onBeforeRemove
     }
 };
 
@@ -206,6 +207,9 @@ let fieldMapSetting = {
             isMove: true
         }
     },
+    check: {
+        enable: true
+    },
     data: {
         keep: {
             parent:true,

+ 9 - 0
web/maintain/report/js/rpt_tpl_band.js

@@ -168,6 +168,15 @@ let bandTreeOprObj = {
         //
         me.canTrickEvent = true;
     },
+    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) {

+ 1 - 1
web/maintain/report/js/rpt_tpl_cfg_helper.js

@@ -96,7 +96,7 @@ let rpt_tpl_cfg_helper = {
             }
             //setup font
             let fontDom = $("#elementFonts").get(0);
-            fontDom.removeAttribute("disabled")
+            fontDom.removeAttribute("disabled");
             let fontAttr = treeNode[JV.PROP_FONT];
             if (typeof treeNode[JV.PROP_FONT] !== "string") {
                 fontAttr = "自定义";

+ 122 - 20
web/maintain/report/js/rpt_tpl_data_map.js

@@ -43,38 +43,81 @@ let dataInfoMapTreeOprObj = {
     buildTreeData: function (rptTpl) {
         let me = this, rst = null;
 
-        $("#dispRowHeight")[0].style.display = "";
-        $("#dispColWidth")[0].style.display = "";
+        $("#element_content_height_width")[0].style.display = "";
         if (rptTpl[JV.NODE_FLOW_INFO]) {
-            //
+            rst = me.buildFlowData(rptTpl);
+            $("#element_content_height_width")[0].style.display = "";
+            if (rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT][JV.PROP_CMN_HEIGHT]) {
+                $("#element_content_height")[0].value = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT][JV.PROP_CMN_HEIGHT];
+            } else {
+                $("#element_content_height")[0].value = 0.6;
+            }
+            $("#element_content_height").get(0).removeAttribute("disabled");
+            $("#element_content_width").get(0).disabled = "disabled" ;
         } else if (rptTpl[JV.NODE_CROSS_INFO]) {
             //
         } else if (rptTpl[JV.NODE_BILL_INFO]) {
             rst = me.buildBillData(rptTpl);
-            $("#dispRowHeight")[0].style.display = "none";
-            $("#dispColWidth")[0].style.display = "none";
+            $("#element_content_height_width")[0].style.display = "none";
         }
 
         return rst;
     },
-    buildBillData: function(rptTpl) {
+    buildFlowData: function(rptTpl) {
         let me = this, rst = [];
-        let rootFieldNode = {Name: JV.NODE_BILL_CONTENT, type: "bill_data", isParent: true, Title: ""};
-        let discreteNode = {Name: JV.NODE_DISCRETE_INFO, Title: ""};
+        let discreteNode = {Name: JV.NODE_DISCRETE_INFO, type: "discrete_data", isParent: true, Title: ""};
+        let rootFieldNode = {Name: JV.NODE_FLOW_CONTENT, type: "flow_field_data", isParent: true, Title: ""};
+        let rootColumnNode = {Name: JV.NODE_FLOW_COLUMN, type: "flow_column_data", isParent: true, Title: ""};
+        let rootPageSumNode = {Name: JV.NODE_FLOW_PAGE_SUM, type: "flow_page_sum_data", isParent: true, Title: ""};
+        let rootChapterSumNode = {Name: JV.NODE_FLOW_SEG_SUM, type: "flow_chapter_sum_data", isParent: true, Title: ""};
+        let rootGroupSumNode = {Name: JV.NODE_FLOW_GROUP, type: "flow_group_sum_data", isParent: true, Title: ""};
         rst.push(rootFieldNode);
+        rst.push(rootColumnNode);
+        if (rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_COLUMN].hasOwnProperty(JV.PROP_BAND_NAME)) {
+            rootColumnNode[JV.PROP_BAND_NAME] = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_COLUMN][JV.PROP_BAND_NAME];
+        }
+        rst.push(rootPageSumNode);
+        if (rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_PAGE_SUM].hasOwnProperty(JV.PROP_BAND_NAME)) {
+            rootPageSumNode[JV.PROP_BAND_NAME] = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_PAGE_SUM][JV.PROP_BAND_NAME];
+        }
+        rst.push(rootChapterSumNode);
+        if (rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_SEG_SUM].hasOwnProperty(JV.PROP_BAND_NAME)) {
+            rootChapterSumNode[JV.PROP_BAND_NAME] = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_SEG_SUM][JV.PROP_BAND_NAME];
+        }
+        rst.push(rootGroupSumNode);
         rst.push(discreteNode);
-        me.private_build_bill_data(rootFieldNode, rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT], rptTpl);
-        me.private_build_bill_discrete_data(discreteNode, rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], rptTpl);
+        me.private_build_content_field_data(rootFieldNode, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT], JV.PROP_FLOW_FIELDS, rptTpl);
+        me.private_build_discrete_data(discreteNode, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_DISCRETE_INFO], rptTpl);
+        me.private_build_column_data(rootColumnNode, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_COLUMN], rptTpl);
 
         return rst;
     },
+    buildBillData: function(rptTpl) {
+        let me = this, rst = [];
+        let rootFieldNode = {Name: JV.NODE_BILL_CONTENT, type: "bill_field_data", isParent: true, Title: ""};
+        let discreteNode = {Name: JV.NODE_DISCRETE_INFO, type: "discrete_data", isParent: true, Title: ""};
+        rst.push(rootFieldNode);
+        rst.push(discreteNode);
+        me.private_build_content_field_data(rootFieldNode, rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT], JV.PROP_BILL_FIELDS, rptTpl);
+        me.private_build_discrete_data(discreteNode, rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO]);
 
-    private_build_bill_data: function (rootFieldNode, billData, rptTpl) {
-        let me = this, bandName = billData[JV.PROP_BAND_NAME];
+        return rst;
+    },
+    private_build_column_data: function(columnNode, columnData) {
+        let me = this;
+        if (columnData[JV.PROP_TEXTS] && columnData[JV.PROP_TEXTS].length > 0) {
+            columnNode.items = [];
+            for (let txt of columnData[JV.PROP_TEXTS]) {
+                columnNode.items.push(me.private_build_text_node(txt));
+            }
+        }
+    },
+    private_build_content_field_data: function(rootFieldNode, contentData, fieldsStr, rptTpl) {
+        let me = this, bandName = contentData[JV.PROP_BAND_NAME];
         if (rootFieldNode) {
             rootFieldNode[JV.PROP_BAND_NAME] = bandName;
             rootFieldNode.items = [];
-            for (let fieldItem of billData[JV.PROP_BILL_FIELDS]) {
+            for (let fieldItem of contentData[fieldsStr]) {
                 if (fieldItem[JV.PROP_FIELD_ID]) {
                     rootFieldNode.items.push(me.private_build_field_node(fieldItem, rptTpl))
                 } else if (fieldItem[JV.PROP_PARAM_ID]) {
@@ -83,7 +126,7 @@ let dataInfoMapTreeOprObj = {
             }
         }
     },
-    private_build_bill_discrete_data: function (discreteNode, discreteData, rptTpl) {
+    private_build_discrete_data: function (discreteNode, discreteData, rptTpl) {
         let me = this;
         discreteNode.isParent = true;
         discreteNode.items = [];
@@ -264,6 +307,9 @@ let dataInfoMapTreeOprObj = {
         node[JV.PROP_AREA][JV.PROP_V_CALCULATION] = JV.CAL_TYPE[0];
     },
 
+    checkIfShouldHaveBand: function(treeNode) {
+        return treeNode.hasOwnProperty(JV.PROP_BAND_NAME);
+    },
     onTabDataClick: function (event,treeId,treeNode) {
         let me = dataInfoMapTreeOprObj, matchedBandNode = null;
         let bandChked = false;
@@ -287,6 +333,14 @@ let dataInfoMapTreeOprObj = {
                 me.bandTreeObj.setChkDisabled(node, disabled, true, true);
             }
         }
+        function cleanBandSelect(parentNode) {
+            me.bandTreeObj.checkNode(parentNode, false, false, false);
+            if (parentNode.items && parentNode.items.length > 0) {
+                for (let subNode of parentNode.items) {
+                    cleanBandSelect(subNode);
+                }
+            }
+        }
         if (treeNode[JV.PROP_BAND_NAME]) {
             for (let node of nodes) {
                 checkBandNode(node, treeNode[JV.PROP_BAND_NAME]);
@@ -299,7 +353,14 @@ let dataInfoMapTreeOprObj = {
             setDisabledBandSelect(false);
             me.bandTreeObj.checkNode(matchedBandNode, true, true);
         } else {
-            setDisabledBandSelect(true);
+            if (me.checkIfShouldHaveBand(treeNode)) {
+                setDisabledBandSelect(false);
+                for (let node of nodes) {
+                    cleanBandSelect(node);
+                }
+            } else {
+                setDisabledBandSelect(true);
+            }
         }
         //检测是否为field/param/text对象
         rpt_tpl_cfg_helper.checkAndSetSelectedNodeCfg(treeNode);
@@ -327,9 +388,10 @@ let dataInfoMapTreeOprObj = {
         return rst;
     },
     beforeEditName: function(treeId, treeNode) {
-        let rst = false;
+        let me = dataInfoMapTreeOprObj, rst = false;
         let pn = treeNode.getParentNode();
-        if (pn && pn[JV.PROP_NAME] === "离散文本集") {
+        //if (pn && me.checkIfCanAddTxt(pn) pn[JV.PROP_NAME] === "离散文本集") {
+        if (pn && me.checkIfCanAddTxt(pn)) {
             rst = true;
         }
         return rst;
@@ -367,17 +429,23 @@ let dataInfoMapTreeOprObj = {
             treeNode[JV.PROP_LABEL] = treeNode[JV.PROP_NAME];
         }
     },
+    checkIfCanAddTxt: function(treeNode) {
+        let rst = false;
+        if (treeNode[JV.PROP_NAME] === "离散文本集" || treeNode[JV.PROP_NAME] === JV.NODE_FLOW_COLUMN) {
+            rst = true;
+        }
+        return rst;
+    },
     addHoverDom: function(treeId, treeNode) {
         let me = dataInfoMapTreeOprObj, sObj = $("#" + treeNode.tId + "_span");
         if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length > 0) {
             return;
-        } else if ((treeNode.level === 0 && treeNode[JV.PROP_NAME] === JV.NODE_DISCRETE_INFO) || (treeNode.level === 2 && treeNode[JV.PROP_NAME] === "离散文本集")) {
+        } else if (treeNode[JV.PROP_NAME] === JV.NODE_DISCRETE_INFO || me.checkIfCanAddTxt(treeNode)) {
             let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增' onfocus='this.blur();'></span>";
             sObj.after(addStr);
             let btn = $("#addBtn_"+treeNode.tId);
             if (treeNode[JV.PROP_NAME] === JV.NODE_DISCRETE_INFO) {
                 btn.bind("click", function(){
-                    let amtIdx = treeNode.items.length + 1;
                     let node = {};
                     node[JV.PROP_NAME] = "子项(所在区域:" + me.bandTreeObj.getNodes()[0][JV.PROP_NAME] + ")";
                     node[JV.PROP_BAND_NAME] = me.bandTreeObj.getNodes()[0][JV.PROP_NAME];
@@ -407,7 +475,41 @@ let dataInfoMapTreeOprObj = {
     extractTabFields: function (rptTpl) {
         let me = dataInfoMapTreeOprObj;
         if (rptTpl[JV.NODE_FLOW_INFO]) {
-            //
+            let nodes = me.treeObj.getNodes();
+            for (let node of nodes) {
+                if (node[JV.PROP_NAME] === JV.NODE_DISCRETE_INFO) {
+                    rptTpl[JV.NODE_FLOW_INFO][JV.NODE_DISCRETE_INFO] = me.private_extract_discrete_info(node);
+                } else if (node[JV.PROP_NAME] === JV.NODE_FLOW_CONTENT) {
+                    let newContent = {};
+                    newContent[JV.PROP_BAND_NAME] = node[JV.PROP_BAND_NAME];
+                    newContent[JV.PROP_CMN_HEIGHT] = $("#element_content_height")[0].value;
+                    newContent[JV.PROP_FLOW_FIELDS] = [];
+                    for (let subNode of node.items) {
+                        let f = {};
+                        me.private_copy_field_properties(subNode, f);
+                        newContent[JV.PROP_FLOW_FIELDS].push(f);
+                    }
+                    rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT] = newContent;
+                } else if (node[JV.PROP_NAME] === JV.NODE_FLOW_COLUMN) {
+                    let newColumn = {};
+                    newColumn[JV.PROP_BAND_NAME] = node[JV.PROP_BAND_NAME];
+                    if (node.items.length > 0) {
+                        newColumn[JV.PROP_TEXTS] = [];
+                        for (let txt of node.items) {
+                            let item = {};
+                            newColumn[JV.PROP_TEXTS].push(item);
+                            me.private_copy_text_properties(txt, item);
+                        }
+                    }
+                    rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_COLUMN] = newColumn;
+                } else if (node[JV.PROP_NAME] === JV.NODE_FLOW_SEG_SUM) {
+                    //
+                } else if (node[JV.PROP_NAME] === JV.NODE_FLOW_PAGE_SUM) {
+                    //
+                } else if (node[JV.PROP_NAME] === JV.NODE_FLOW_GROUP) {
+                    //
+                }
+            }
         }
         if (rptTpl[JV.NODE_CROSS_INFO]) {
             //

+ 15 - 1
web/maintain/report/js/rpt_tpl_field_map.js

@@ -15,11 +15,18 @@ let fieldMapTreeOprObj = {
         let fieldMapList = me.buildTreeData(rptTpl);
         me.treeObj = $.fn.zTree.init($("#field_map_tree_reversed"), fieldMapSetting, fieldMapList);
         me.treeObj.expandAll(true);
+        let topNodes = me.treeObj.getNodes();
+        for (let node of topNodes) {
+            me.treeObj.setChkDisabled(node, true);
+        }
     },
     buildTreeData: function (rptTpl) {
         let rst = [];
         let private_setSubFields = function (parent, fieldList) {
             for (let field of fieldList) {
+                if (field[JV.PROP_IS_ID]) {
+                    field.checked = true;
+                }
                 parent.items.push(field);
             }
         }
@@ -117,8 +124,15 @@ let fieldMapTreeOprObj = {
         let me = this;
         for (let rootNode of me.treeObj.getNodes()) {
             rptTpl[JV.NODE_FIELD_MAP][rootNode.Name] = [];
+            let idSeq = 1;
             for (let mappingFieldNode of rootNode.items) {
-                rptTpl[JV.NODE_FIELD_MAP][rootNode.Name].push(me.createMapFieldByNode(mappingFieldNode));
+                let item = me.createMapFieldByNode(mappingFieldNode);
+                if (mappingFieldNode.checked) {
+                    item[JV.PROP_IS_ID] = true;
+                    item[JV.PROP_ID_SEQ] = idSeq;
+                    idSeq++;
+                }
+                rptTpl[JV.NODE_FIELD_MAP][rootNode.Name].push(item);
             }
         }
     },

+ 1 - 1
web/maintain/report/js/rpt_tpl_main.js

@@ -143,7 +143,7 @@ let zTreeOprObj = {
     addHoverDom: function(treeId, treeNode) {
         let me = zTreeOprObj, 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>";
+        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(){

+ 6 - 350
web/maintain/report/rpt_tpl_detail.html

@@ -19,360 +19,16 @@
         </ul>
         <div class="tab-content">
             <!--模板信息-->
-            <div class="tab-pane active" id="rpttplinfo" role="tabpanel">
-                <div class="main-data">
-                    <div class="p-3">
-                        <div class="form-group">
-                            <label>报表名称</label>
-                            <input class="form-control" id="rptTplName" value="" disabled>
-                        </div>
-                        <div class="form-group">
-                            <label>页面</label>
-                            <div class="row">
-                                <div class="input-group col-6">
-                                    <div class="input-group-addon">纸张</div>
-                                    <select class="form-control input-sm" id="rptTplPageSize"><option>A3</option><option>A4</option></select>
-                                </div>
-                                <div class="input-group col-6">
-                                    <div class="input-group-addon">方向</div>
-                                    <select class="form-control input-sm" id="rptTplPageOrientation"><option>横向</option><option>竖向</option></select>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="form-group row">
-                            <div class="input-group col-6">
-                                <div class="input-group-addon">单位</div>
-                                <select class="form-control input-sm" id="rptTplUnit"><option>厘米</option></select>
-                            </div>
-                        </div>
-                        <div class="form-group" id="multiColCnt">
-                            <label>显示调整</label>
-                            <div class="row">
-                                <div class="input-group col-6">
-                                    <div class="input-group-addon">分栏</div>
-                                    <select class="form-control input-sm" id="rptTplMultiCols"><option>1</option><option>2</option></select>
-                                </div>
-                                <div class="input-group col-6" style="display: none">
-                                    <div class="input-group-addon">缩放</div>
-                                    <input class="form-control input-sm" type="number" value="1" step="0.25">
-                                </div>
-                            </div>
-                        </div>
-                        <div class="form-group row" style="display: none">
-                            <div class="input-group col-6">
-                                <div class="input-group-addon">空行提上</div>
-                                <select class="form-control input-sm"><option>提上</option></select>
-                            </div>
-                            <div class="input-group col-6">
-                                <div class="input-group-addon">空行显示</div>
-                                <select class="form-control input-sm"><option>显示</option></select>
-                            </div>
-                        </div>
-                        <div class="form-group">
-                            <label>页边距</label>
-                            <div class="row">
-                                <div class="input-group col-6">
-                                    <div class="input-group-addon">左</div>
-                                    <input class="form-control input-sm" id="rptTplMarginLeft" type="number" value="0.8" step="0.1" min="0">
-                                </div>
-                                <div class="input-group col-6">
-                                    <div class="input-group-addon">右</div>
-                                    <input class="form-control input-sm" id="rptTplMarginRight" type="number" value="0.8" step="0.1" min="0">
-                                </div>
-                            </div>
-                        </div>
-                        <div class="form-group row">
-                            <div class="input-group col-6">
-                                <div class="input-group-addon">上</div>
-                                <input class="form-control input-sm" id="rptTplMarginTop" type="number" value="0.8" step="0.1" min="0">
-                            </div>
-                            <div class="input-group col-6">
-                                <div class="input-group-addon">下</div>
-                                <input class="form-control input-sm" id="rptTplMarginBottom" type="number" value="0.8" step="0.1" min="0">
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
+            <%include ./rpt_tpl_detail_info.html %>
             <!--模板布局-->
-            <div class="tab-pane" id="rpttpllayout" role="tabpanel">
-                <div class="main-data">
-                    <div class="p-3">
-                        <div class="tab-bar">
-                            <a onclick="bandTreeOprObj.addRootBand(zTreeOprObj.getRefTpl())" class="btn btn-secondary btn-sm fa fa-plus-square">根节点框</a>
-                            <a onclick="bandTreeOprObj.addSubBand(zTreeOprObj.getRefTpl())" class="btn btn-secondary btn-sm fa fa-plus-square">子节点框</a>
-                            <a onclick="bandTreeOprObj.moveDownBand(zTreeOprObj.getRefTpl())" class="btn btn-sm" id="downMoveBand"><i class="fa fa-arrow-down" aria-hidden="true"></i>下移</a>
-                            <a onclick="bandTreeOprObj.moveUpBand(zTreeOprObj.getRefTpl())" class="btn btn-sm" id="upMoveBand"><i class="fa fa-arrow-up" aria-hidden="true"></i>上移</a>
-                        </div>
-                        <div class="ztree-warp">
-                            <ul id="band_tree_reversed" class="ztree"></ul>
-                        </div>
-                        <div class="form-group">
-                            <label>边框样式</label>
-                            <select class="form-control" id="borderStyles" onchange="bandTreeOprObj.bandStyleChange(this)"></select>
-                        </div>
-                        <div class="form-group">
-                            <label>位置</label>
-                            <select class="form-control" id="bandAlignment" onchange="bandTreeOprObj.bandAlignmentChange(this)"></select>
-                        </div>
-
-                        <div class="row">
-                            <div class="form-group col-md-6">
-                                <label>高度</label>
-                                <input class="form-control mr-2" id="bandHeight" type="number" step="0.1" disabled onchange="bandTreeOprObj.bandHeightWidthChange(this)">
-                            </div>
-                            <div class="form-group col-md-6">
-                                <label>宽度</label>
-                                <input class="form-control mr-2" id="bandWidth"  type="number" step="0.1" disabled onchange="bandTreeOprObj.bandHeightWidthChange(this)">
-                            </div>
-                        </div>
-
-                        <div class="form-group">
-                            <label>出现频率</label>
-                            <select class="form-control" id="pageFrequency" onchange="bandTreeOprObj.bandShowFrequencyChange(this)"></select>
-                        </div>
-                        <div class="form-group">
-                            <div class="form-check">
-                                <label class="form-check-label">
-                                    <input type="checkbox" class="form-check-input" id="mergeBandBorder" onchange="bandTreeOprObj.bandBorderMergeChange(this)">
-                                    边框合并
-                                </label>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
+            <%include ./rpt_tpl_detail_bands.html %>
             <!--指标映射-->
-            <div class="tab-pane" id="rpttplfieldmap" role="tabpanel">
-                <div class="main-data">
-                    <div class="p-3">
-                        <label>报表映射指标</label>
-                        <div class="tab-content">
-                            <ul id="field_map_tree_reversed" class="ztree"></ul>
-                        </div>
-                        <p/>
-                        <div class="tab-content">
-                            <label>可映射指标</label>
-                            <div class="tab-content">
-                                <ul id="selectable_field_tree_reversed" class="ztree"></ul>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
+            <%include ./rpt_tpl_detail_mapping_fields.html %>
             <!--指标摆放-->
-            <div class="tab-pane" id="rpttplfieldlocation" role="tabpanel">
-                <div class="main-data">
-                    <div class="p-3">
-                        <div class="row">
-                            <div class="form-group col-md-8">
-                                <div class="ztree-warp">
-                                    <ul id="tpl_data_info_reversed" class="ztree"></ul>
-                                </div>
-                            </div>
-                            <div class="form-group col-md-4" id="band_tree2_div">
-                                <div class="ztree-warp">
-                                    <ul id="band_tree2_reversed" class="ztree"></ul>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="row" id="element_font">
-                            <div class="form-group col-md-3">
-                                <label>字体选择</label>
-                                <select class="form-control" id="elementFonts" onchange="rpt_tpl_cfg_helper.fontChange(this)" disabled></select>
-                            </div>
-                            <div class="form-group col-md-3">
-                                <label>字体名称</label>
-                                <input class="form-control" id="eleFontName" value="" onchange="rpt_tpl_cfg_helper.fontNameChange(this)" disabled>
-                            </div>
-                            <div class="form-group col-md-2">
-                                <label>字体大小</label>
-                                <input class="form-control input-sm" id="eleFontSize" type="number" value="12" step="1" min="6" max="56" onchange="rpt_tpl_cfg_helper.fontSizeChange(this)" disabled>
-                            </div>
-                            <div class="form-group col-md-4">
-                                <label></label>
-                                <div class="form-check">
-                                    <label class="form-check-label">
-                                        <input type="checkbox" class="form-check-input" id="eleFontBold" onchange="rpt_tpl_cfg_helper.fontBoldChange(this)" disabled>
-                                        粗体
-                                    </label>&nbsp&nbsp
-                                    <label class="form-check-label">
-                                        <input type="checkbox" class="form-check-input" id="eleFontItalic" onchange="rpt_tpl_cfg_helper.fontItalicChange(this)" disabled>
-                                        斜体
-                                    </label>&nbsp&nbsp
-                                    <label class="form-check-label">
-                                        <input type="checkbox" class="form-check-input" id="eleFontUnderline" onchange="rpt_tpl_cfg_helper.fontUnderlineChange(this)" disabled>
-                                        下划线
-                                    </label>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="row" id="element_border">
-                            <div class="form-group col-md-3">
-                                <label>边框样式</label>
-                                <select class="form-control" id="elementBorders" onchange="rpt_tpl_cfg_helper.borderChange(this)"></select>
-                            </div>
-                            <div class="form-group col-md-2">
-                                <label>左边</label>
-                                <input class="form-control input-sm" id="eleBorderLeft" type="number" value="0" step="1" min="0" max="3" disabled>
-                            </div>
-                            <div class="form-group col-md-2">
-                                <label>右边</label>
-                                <input class="form-control input-sm" id="eleBorderRight" type="number" value="0" step="1" min="0" max="3" disabled>
-                            </div>
-                            <div class="form-group col-md-2">
-                                <label>上边</label>
-                                <input class="form-control input-sm" id="eleBorderTop" type="number" value="0" step="1" min="0" max="3" disabled>
-                            </div>
-                            <div class="form-group col-md-2">
-                                <label>下边</label>
-                                <input class="form-control input-sm" id="eleBorderBottom" type="number" value="0" step="1" min="0" max="3" disabled>
-                            </div>
-                        </div>
-                        <div class="row" id="element_control">
-                            <div class="form-group col-md-3">
-                                <label>控制选择</label>
-                                <select class="form-control" id="elementControls" onchange="rpt_tpl_cfg_helper.controlChange(this)"></select>
-                            </div>
-                            <div class="form-group col-md-2">
-                                <label>横向对齐</label>
-                                <select class="form-control" id="elementAlignmentHorizon" onchange="rpt_tpl_cfg_helper.changeAlignment(this, 'horizon')" disabled></select>
-                            </div>
-                            <div class="form-group col-md-2">
-                                <label>纵向对齐</label>
-                                <select class="form-control" id="elementAlignmentVertical" onchange="rpt_tpl_cfg_helper.changeAlignment(this, 'vertical')" disabled></select>
-                            </div>
-                            <div class="form-group col-md-5">
-                                <label></label>
-                                <div class="form-check">
-                                    <label class="form-check-label">
-                                        <input type="checkbox" class="form-check-input" id="eleShrink" onchange="" disabled>
-                                        自动缩放
-                                    </label>&nbsp&nbsp
-                                    <label class="form-check-label">
-                                        <input type="checkbox" class="form-check-input" id="eleShowZero" onchange="" disabled>
-                                        显示0
-                                    </label>&nbsp&nbsp
-                                    <label class="form-check-label">
-                                        <input type="checkbox" class="form-check-input" id="eleAutoWrap" onchange="" disabled>
-                                        自动折行
-                                    </label>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="row" id="element_area_1">
-                            <div class="form-group col-md-3">
-                                <label>输出区域-左</label>
-                                <input class="form-control input-sm" id="elementArea_Left" type="number" value="0" step="1" min="0" max="100" onchange="rpt_tpl_cfg_helper.changeArea(this, 'Left')">
-                            </div>
-                            <div class="form-group col-md-3">
-                                <label>输出区域-右</label>
-                                <input class="form-control input-sm" id="elementArea_Right" type="number" value="0" step="1" min="0" max="100" onchange="rpt_tpl_cfg_helper.changeArea(this, 'Right')">
-                            </div>
-                            <div class="form-group col-md-3">
-                                <label>输出区域-上</label>
-                                <input class="form-control input-sm" id="elementArea_Top" type="number" value="0" step="1" min="0" max="100" onchange="rpt_tpl_cfg_helper.changeArea(this, 'Top')">
-                            </div>
-                            <div class="form-group col-md-3">
-                                <label>输出区域-下</label>
-                                <input class="form-control input-sm" id="elementArea_Bottom" type="number" value="0" step="1" min="0" max="100" onchange="rpt_tpl_cfg_helper.changeArea(this, 'Bottom')">
-                            </div>
-                        </div>
-                        <div class="row" id="element_area_2">
-                            <div class="form-group col-md-3">
-                                <label class="form-check-label">
-                                    <input type="checkbox" class="form-check-input" id="isPercentage_Left" onchange="rpt_tpl_cfg_helper.changeAreaCalcType(this, 'Left')">
-                                    百分比
-                                </label>
-                            </div>
-                            <div class="form-group col-md-3">
-                                <label class="form-check-label">
-                                    <input type="checkbox" class="form-check-input" id="isPercentage_Right" onchange="rpt_tpl_cfg_helper.changeAreaCalcType(this, 'Right')">
-                                    百分比
-                                </label>
-                            </div>
-                            <div class="form-group col-md-3">
-                                <label class="form-check-label">
-                                    <input type="checkbox" class="form-check-input" id="isPercentage_Top" onchange="rpt_tpl_cfg_helper.changeAreaCalcType(this, 'Top')">
-                                    百分比
-                                </label>
-                            </div>
-                            <div class="form-group col-md-3">
-                                <label class="form-check-label">
-                                    <input type="checkbox" class="form-check-input" id="isPercentage_Bottom" onchange="rpt_tpl_cfg_helper.changeAreaCalcType(this, 'Bottom')">
-                                    百分比
-                                </label>
-                            </div>
-                        </div>
-                        <div class="row" id="element_pre_suff">
-                            <div class="input-group col-3">
-                                <div class="input-group-addon">前缀</div>
-                                <input class="form-control" id="elePrefix" value="" onkeyup="rpt_tpl_cfg_helper.changePreSuff(this, 'Prefix')">
-                            </div>
-                            <div class="input-group col-3">
-                                <div class="input-group-addon">后缀</div>
-                                <input class="form-control" id="eleSuffix" value="" onkeyup="rpt_tpl_cfg_helper.changePreSuff(this, 'Suffix')">
-                            </div>
-                            <div class="input-group col-3">
-                                <div class="input-group-addon">格式</div>
-                                <input class="form-control" id="eleFormat" value="" onkeyup="rpt_tpl_cfg_helper.changeFormat(this)">
-                            </div>
-                        </div>
-                        <div class="form-group" id="dispRowHeight">
-                            <label>显示行高度</label>
-                            <select class="form-control"><option> </option></select>
-                            <small class="form-text text-muted">用于 流水行/交叉行</small>
-                        </div>
-                        <div class="form-group" id="dispColWidth">
-                            <label>显示列宽度</label>
-                            <select class="form-control"><option> </option></select>
-                            <small class="form-text text-muted">用于 交叉列</small>
-                        </div>
-                        <div class="row">
-                            <div class="form-group col-md-7">
-                                <div class="form-group">
-                                    <label>已选映射指标</label>
-                                    <div class="ztree-warp">
-                                        <ul id="tpl_data_selected_field_map_reversed" class="ztree"></ul>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="form-group col-md-5">
-                                <div class="ztree-warp">
-                                    <label>离散独立指标/参数</label>
-                                    <ul id="tpl_discrete_fields_params_reversed" class="ztree"></ul>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
+            <%include ./rpt_tpl_detail_field_location.html %>
+            <!--预处理-->
             <!--计算式-->
-            <div class="tab-pane" id="rpttplformula" role="tabpanel">
-                <div class="main-data">
-                    <div class="p-3">
-                        <label>计算式</label>
-                        <div class="tab-content">
-                            <ul id="rpt_tpl_formulas" class="ztree"></ul>
-                        </div>
-                    </div>
-                    <div class="p-3" id="exprDetail">
-                        <div class="row">
-                            <div class="form-group col-md-3">
-                                <label>计算式执行点</label>
-                                <select class="form-control" id="exprRunType" onchange="calculationTreeOprObj.changeRunType(this)"></select>
-                            </div>
-                            <div class="form-group col-md-9">
-                                <label>格式串(format)</label>
-                                <input class="form-control" id="exprFormat" value="" onkeyup="calculationTreeOprObj.changeFormat(this)">
-                            </div>
-                        </div>
-                        <div class="form-group">
-                            <textarea rows="16" cols="98" id="exprContent" onkeyup="calculationTreeOprObj.changeExpression(this)"></textarea>
-                        </div>
-                    </div>
-                </div>
-            </div>
+            <%include ./rpt_tpl_detail_calculation.html %>
         </div>
     </div>
 </div>

+ 47 - 0
web/maintain/report/rpt_tpl_detail_bands.html

@@ -0,0 +1,47 @@
+<div class="tab-pane" id="rpttpllayout" role="tabpanel">
+    <div class="main-data">
+        <div class="p-3">
+            <div class="tab-bar">
+                <a onclick="bandTreeOprObj.addRootBand(zTreeOprObj.getRefTpl())" class="btn btn-secondary btn-sm fa fa-plus-square">根模板框</a>
+                <a onclick="bandTreeOprObj.addSubBand(zTreeOprObj.getRefTpl())" class="btn btn-secondary btn-sm fa fa-plus-square">子模板框</a>
+                <a onclick="bandTreeOprObj.moveDownBand(zTreeOprObj.getRefTpl())" class="btn btn-sm" id="downMoveBand"><i class="fa fa-arrow-down" aria-hidden="true"></i>下移</a>
+                <a onclick="bandTreeOprObj.moveUpBand(zTreeOprObj.getRefTpl())" class="btn btn-sm" id="upMoveBand"><i class="fa fa-arrow-up" aria-hidden="true"></i>上移</a>
+            </div>
+            <div class="ztree-warp">
+                <ul id="band_tree_reversed" class="ztree"></ul>
+            </div>
+            <div class="form-group">
+                <label>边框样式</label>
+                <select class="form-control" id="borderStyles" onchange="bandTreeOprObj.bandStyleChange(this)"></select>
+            </div>
+            <div class="form-group">
+                <label>位置</label>
+                <select class="form-control" id="bandAlignment" onchange="bandTreeOprObj.bandAlignmentChange(this)"></select>
+            </div>
+
+            <div class="row">
+                <div class="form-group col-md-6">
+                    <label>高度</label>
+                    <input class="form-control mr-2" id="bandHeight" type="number" step="0.1" disabled onchange="bandTreeOprObj.bandHeightWidthChange(this)">
+                </div>
+                <div class="form-group col-md-6">
+                    <label>宽度</label>
+                    <input class="form-control mr-2" id="bandWidth"  type="number" step="0.1" disabled onchange="bandTreeOprObj.bandHeightWidthChange(this)">
+                </div>
+            </div>
+
+            <div class="form-group">
+                <label>出现频率</label>
+                <select class="form-control" id="pageFrequency" onchange="bandTreeOprObj.bandShowFrequencyChange(this)"></select>
+            </div>
+            <div class="form-group">
+                <div class="form-check">
+                    <label class="form-check-label">
+                        <input type="checkbox" class="form-check-input" id="mergeBandBorder" onchange="bandTreeOprObj.bandBorderMergeChange(this)">
+                        边框合并
+                    </label>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 25 - 0
web/maintain/report/rpt_tpl_detail_calculation.html

@@ -0,0 +1,25 @@
+<div class="tab-pane" id="rpttplformula" role="tabpanel">
+    <div class="main-data">
+        <div class="p-3">
+            <label>计算式</label>
+            <div class="tab-content">
+                <ul id="rpt_tpl_formulas" class="ztree"></ul>
+            </div>
+        </div>
+        <div class="p-3" id="exprDetail">
+            <div class="row">
+                <div class="form-group col-md-3">
+                    <label>计算式执行点</label>
+                    <select class="form-control" id="exprRunType" onchange="calculationTreeOprObj.changeRunType(this)"></select>
+                </div>
+                <div class="form-group col-md-9">
+                    <label>格式串(format)</label>
+                    <input class="form-control" id="exprFormat" value="" onkeyup="calculationTreeOprObj.changeFormat(this)">
+                </div>
+            </div>
+            <div class="form-group">
+                <textarea rows="16" cols="98" id="exprContent" onkeyup="calculationTreeOprObj.changeExpression(this)"></textarea>
+            </div>
+        </div>
+    </div>
+</div>

+ 176 - 0
web/maintain/report/rpt_tpl_detail_field_location.html

@@ -0,0 +1,176 @@
+<div class="tab-pane" id="rpttplfieldlocation" role="tabpanel">
+    <div class="main-data">
+        <div class="p-3">
+            <div class="row">
+                <div class="form-group col-md-8">
+                    <div class="ztree-warp">
+                        <ul id="tpl_data_info_reversed" class="ztree"></ul>
+                    </div>
+                </div>
+                <div class="form-group col-md-4" id="band_tree2_div">
+                    <div class="ztree-warp">
+                        <ul id="band_tree2_reversed" class="ztree"></ul>
+                    </div>
+                </div>
+            </div>
+            <div class="row" id="element_font">
+                <div class="form-group col-md-3">
+                    <label>字体选择</label>
+                    <select class="form-control" id="elementFonts" onchange="rpt_tpl_cfg_helper.fontChange(this)" disabled></select>
+                </div>
+                <div class="form-group col-md-3">
+                    <label>字体名称</label>
+                    <input class="form-control" id="eleFontName" value="" onchange="rpt_tpl_cfg_helper.fontNameChange(this)" disabled>
+                </div>
+                <div class="form-group col-md-2">
+                    <label>字体大小</label>
+                    <input class="form-control input-sm" id="eleFontSize" type="number" value="12" step="1" min="6" max="56" onchange="rpt_tpl_cfg_helper.fontSizeChange(this)" disabled>
+                </div>
+                <div class="form-group col-md-4">
+                    <label></label>
+                    <div class="form-check">
+                        <label class="form-check-label">
+                            <input type="checkbox" class="form-check-input" id="eleFontBold" onchange="rpt_tpl_cfg_helper.fontBoldChange(this)" disabled>
+                            粗体
+                        </label>&nbsp&nbsp
+                        <label class="form-check-label">
+                            <input type="checkbox" class="form-check-input" id="eleFontItalic" onchange="rpt_tpl_cfg_helper.fontItalicChange(this)" disabled>
+                            斜体
+                        </label>&nbsp&nbsp
+                        <label class="form-check-label">
+                            <input type="checkbox" class="form-check-input" id="eleFontUnderline" onchange="rpt_tpl_cfg_helper.fontUnderlineChange(this)" disabled>
+                            下划线
+                        </label>
+                    </div>
+                </div>
+            </div>
+            <div class="row" id="element_border">
+                <div class="form-group col-md-3">
+                    <label>边框样式</label>
+                    <select class="form-control" id="elementBorders" onchange="rpt_tpl_cfg_helper.borderChange(this)"></select>
+                </div>
+                <div class="form-group col-md-2">
+                    <label>左边</label>
+                    <input class="form-control input-sm" id="eleBorderLeft" type="number" value="0" step="1" min="0" max="3" disabled>
+                </div>
+                <div class="form-group col-md-2">
+                    <label>右边</label>
+                    <input class="form-control input-sm" id="eleBorderRight" type="number" value="0" step="1" min="0" max="3" disabled>
+                </div>
+                <div class="form-group col-md-2">
+                    <label>上边</label>
+                    <input class="form-control input-sm" id="eleBorderTop" type="number" value="0" step="1" min="0" max="3" disabled>
+                </div>
+                <div class="form-group col-md-2">
+                    <label>下边</label>
+                    <input class="form-control input-sm" id="eleBorderBottom" type="number" value="0" step="1" min="0" max="3" disabled>
+                </div>
+            </div>
+            <div class="row" id="element_control">
+                <div class="form-group col-md-3">
+                    <label>控制选择</label>
+                    <select class="form-control" id="elementControls" onchange="rpt_tpl_cfg_helper.controlChange(this)"></select>
+                </div>
+                <div class="form-group col-md-2">
+                    <label>横向对齐</label>
+                    <select class="form-control" id="elementAlignmentHorizon" onchange="rpt_tpl_cfg_helper.changeAlignment(this, 'horizon')" disabled></select>
+                </div>
+                <div class="form-group col-md-2">
+                    <label>纵向对齐</label>
+                    <select class="form-control" id="elementAlignmentVertical" onchange="rpt_tpl_cfg_helper.changeAlignment(this, 'vertical')" disabled></select>
+                </div>
+                <div class="form-group col-md-5">
+                    <label></label>
+                    <div class="form-check">
+                        <label class="form-check-label">
+                            <input type="checkbox" class="form-check-input" id="eleShrink" onchange="" disabled>
+                            自动缩放
+                        </label>&nbsp&nbsp
+                        <label class="form-check-label">
+                            <input type="checkbox" class="form-check-input" id="eleShowZero" onchange="" disabled>
+                            显示0
+                        </label>&nbsp&nbsp
+                        <label class="form-check-label">
+                            <input type="checkbox" class="form-check-input" id="eleAutoWrap" onchange="" disabled>
+                            自动折行
+                        </label>
+                    </div>
+                </div>
+            </div>
+            <div class="row" id="element_area_1">
+                <div class="form-group col-md-3">
+                    <label>输出区域-左</label>
+                    <input class="form-control input-sm" id="elementArea_Left" type="number" value="0" step="1" min="0" max="100" onchange="rpt_tpl_cfg_helper.changeArea(this, 'Left')" onkeypress="rpt_tpl_cfg_helper.changeArea(this, 'Left')">
+                </div>
+                <div class="form-group col-md-3">
+                    <label>输出区域-右</label>
+                    <input class="form-control input-sm" id="elementArea_Right" type="number" value="0" step="1" min="0" max="100" onchange="rpt_tpl_cfg_helper.changeArea(this, 'Right')" onkeypress="rpt_tpl_cfg_helper.changeArea(this, 'Right')">
+                </div>
+                <div class="form-group col-md-3">
+                    <label>输出区域-上</label>
+                    <input class="form-control input-sm" id="elementArea_Top" type="number" value="0" step="1" min="0" max="100" onchange="rpt_tpl_cfg_helper.changeArea(this, 'Top')" onkeypress="rpt_tpl_cfg_helper.changeArea(this, 'Top')">
+                </div>
+                <div class="form-group col-md-3">
+                    <label>输出区域-下</label>
+                    <input class="form-control input-sm" id="elementArea_Bottom" type="number" value="0" step="1" min="0" max="100" onchange="rpt_tpl_cfg_helper.changeArea(this, 'Bottom')" onkeypress="rpt_tpl_cfg_helper.changeArea(this, 'Bottom')">
+                </div>
+            </div>
+            <div class="row" id="element_area_2">
+                <div class="form-group col-md-3">
+                    <label class="form-check-label">
+                        <input type="checkbox" class="form-check-input" id="isPercentage_Left" onchange="rpt_tpl_cfg_helper.changeAreaCalcType(this, 'Left')">
+                        百分比
+                    </label>
+                </div>
+                <div class="form-group col-md-3">
+                    <label class="form-check-label">
+                        <input type="checkbox" class="form-check-input" id="isPercentage_Right" onchange="rpt_tpl_cfg_helper.changeAreaCalcType(this, 'Right')">
+                        百分比
+                    </label>
+                </div>
+                <div class="form-group col-md-3">
+                    <label class="form-check-label">
+                        <input type="checkbox" class="form-check-input" id="isPercentage_Top" onchange="rpt_tpl_cfg_helper.changeAreaCalcType(this, 'Top')">
+                        百分比
+                    </label>
+                </div>
+                <div class="form-group col-md-3">
+                    <label class="form-check-label">
+                        <input type="checkbox" class="form-check-input" id="isPercentage_Bottom" onchange="rpt_tpl_cfg_helper.changeAreaCalcType(this, 'Bottom')">
+                        百分比
+                    </label>
+                </div>
+            </div>
+            <div class="row" id="element_pre_suff">
+                <div class="input-group col-3">
+                    <div class="input-group-addon">前缀</div>
+                    <input class="form-control" id="elePrefix" value="" onkeyup="rpt_tpl_cfg_helper.changePreSuff(this, 'Prefix')">
+                </div>
+                <div class="input-group col-3">
+                    <div class="input-group-addon">后缀</div>
+                    <input class="form-control" id="eleSuffix" value="" onkeyup="rpt_tpl_cfg_helper.changePreSuff(this, 'Suffix')">
+                </div>
+                <div class="input-group col-3">
+                    <div class="input-group-addon">格式</div>
+                    <input class="form-control" id="eleFormat" value="" onkeyup="rpt_tpl_cfg_helper.changeFormat(this)">
+                </div>
+            </div>
+            <div class="row">
+                <div class="form-group col-md-7">
+                    <div class="form-group">
+                        <label>已选映射指标</label>
+                        <div class="ztree-warp">
+                            <ul id="tpl_data_selected_field_map_reversed" class="ztree"></ul>
+                        </div>
+                    </div>
+                </div>
+                <div class="form-group col-md-5">
+                    <div class="ztree-warp">
+                        <label>离散独立指标/参数</label>
+                        <ul id="tpl_discrete_fields_params_reversed" class="ztree"></ul>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 85 - 0
web/maintain/report/rpt_tpl_detail_info.html

@@ -0,0 +1,85 @@
+<div class="tab-pane active" id="rpttplinfo" role="tabpanel">
+    <div class="main-data">
+        <div class="p-3">
+            <div class="form-group">
+                <label>报表名称</label>
+                <input class="form-control" id="rptTplName" value="" disabled>
+            </div>
+            <div class="form-group">
+                <label>页面</label>
+                <div class="row">
+                    <div class="input-group col-6">
+                        <div class="input-group-addon">纸张</div>
+                        <select class="form-control input-sm" id="rptTplPageSize"><option>A3</option><option>A4</option></select>
+                    </div>
+                    <div class="input-group col-6">
+                        <div class="input-group-addon">方向</div>
+                        <select class="form-control input-sm" id="rptTplPageOrientation"><option>横向</option><option>竖向</option></select>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group row">
+                <div class="input-group col-6">
+                    <div class="input-group-addon">单位</div>
+                    <select class="form-control input-sm" id="rptTplUnit"><option>厘米</option></select>
+                </div>
+            </div>
+            <div class="form-group" id="multiColCnt">
+                <label>显示调整</label>
+                <div class="row">
+                    <div class="input-group col-6">
+                        <div class="input-group-addon">分栏</div>
+                        <select class="form-control input-sm" id="rptTplMultiCols"><option>1</option><option>2</option></select>
+                    </div>
+                    <div class="input-group col-6" style="display: none">
+                        <div class="input-group-addon">缩放</div>
+                        <input class="form-control input-sm" type="number" value="1" step="0.25">
+                    </div>
+                </div>
+            </div>
+            <div class="form-group row" style="display: none">
+                <div class="input-group col-6">
+                    <div class="input-group-addon">空行提上</div>
+                    <select class="form-control input-sm"><option>提上</option></select>
+                </div>
+                <div class="input-group col-6">
+                    <div class="input-group-addon">空行显示</div>
+                    <select class="form-control input-sm"><option>显示</option></select>
+                </div>
+            </div>
+            <div class="form-group">
+                <label>页边距</label>
+                <div class="row">
+                    <div class="input-group col-6">
+                        <div class="input-group-addon">左</div>
+                        <input class="form-control input-sm" id="rptTplMarginLeft" type="number" value="0.8" step="0.1" min="0">
+                    </div>
+                    <div class="input-group col-6">
+                        <div class="input-group-addon">右</div>
+                        <input class="form-control input-sm" id="rptTplMarginRight" type="number" value="0.8" step="0.1" min="0">
+                    </div>
+                </div>
+            </div>
+            <div class="form-group row">
+                <div class="input-group col-6">
+                    <div class="input-group-addon">上</div>
+                    <input class="form-control input-sm" id="rptTplMarginTop" type="number" value="0.8" step="0.1" min="0">
+                </div>
+                <div class="input-group col-6">
+                    <div class="input-group-addon">下</div>
+                    <input class="form-control input-sm" id="rptTplMarginBottom" type="number" value="0.8" step="0.1" min="0">
+                </div>
+            </div>
+            <div class="row" id="element_content_height_width">
+                <div class="form-group col-md-6">
+                    <label>显示行 - 高度</label>
+                    <input class="form-control input-sm" id="element_content_height" type="number" value="0.6" step="0.1" min="0" max="50" onchange="" disabled>
+                </div>
+                <div class="form-group col-md-6">
+                    <label>显示列 - 宽度</label>
+                    <input class="form-control input-sm" id="element_content_width" type="number" value="4.0" step="0.1" min="0" max="50" onchange="" disabled>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 17 - 0
web/maintain/report/rpt_tpl_detail_mapping_fields.html

@@ -0,0 +1,17 @@
+<div class="tab-pane" id="rpttplfieldmap" role="tabpanel">
+    <div class="main-data">
+        <div class="p-3">
+            <label>报表映射指标</label>
+            <div class="tab-content">
+                <ul id="field_map_tree_reversed" class="ztree"></ul>
+            </div>
+            <p/>
+            <div class="tab-content">
+                <label>可映射指标</label>
+                <div class="tab-content">
+                    <ul id="selectable_field_tree_reversed" class="ztree"></ul>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>