Browse Source

报表模板 - 计算式

TonyKang 7 years ago
parent
commit
64bfc157d5

+ 39 - 0
web/maintain/report/js/cfg_const.js

@@ -229,6 +229,45 @@ let fieldMapSetting = {
     }
 };
 
+let caculationSetting = {
+    view: {
+        showIcon: true,
+        expandSpeed: "",
+        selectedMulti: false
+    },
+    edit: {
+        enable: true,
+        editNameSelectAll: true,
+        showRemoveBtn: true,
+        showRenameBtn: true,
+        removeTitle: "删除",
+        renameTitle: "更改名称",
+        drag: {
+            isCopy: false,
+            isMove: true
+        }
+    },
+    data: {
+        keep: {
+            parent:true,
+            leaf:true
+        },
+        key: {
+            children: 'items',
+            name: "Name"
+        },
+        simpleData: {
+            enable: true
+        }
+    },
+    callback:{
+        onClick: calculationTreeOprObj.onClick,
+        beforeRename: calculationTreeOprObj.beforeRename,
+        beforeRemove: calculationTreeOprObj.onBeforeRemove,
+        beforeDrop: calculationTreeOprObj.onBeforeDrop
+    }
+};
+
 let rptDataInfoSetting = {
     view: {
         showIcon: true,

+ 71 - 10
web/maintain/report/js/rpt_tpl_calculation.js

@@ -4,26 +4,87 @@
 
 let calculationTreeOprObj = {
     treeObj : null,
+    currentNode: null,
     iniTree: function(rptTpl) {
         var me = this;
-        // let fieldMapList = me.buildTreeData(rptTpl);
-        // me.treeObj = $.fn.zTree.init($("#field_map_tree_reversed"), fieldMapSetting, fieldMapList);
-        // me.treeObj.expandAll(true);
+        let fieldMapList = me.buildTreeData(rptTpl);
+        me.treeObj = $.fn.zTree.init($("#rpt_tpl_formulas"), caculationSetting, fieldMapList);
+        me.treeObj.expandAll(true);
+        let et = $("#exprRunType");
+        et.append("<option value='" + JV.RUN_TYPE_BEFORE_PAGING + "'>预运行</option>");
+        et.append("<option value='" + JV.RUN_TYPE_BEFORE_OUTPUT + "'>实时运行</option>");
     },
     buildTreeData: function (rptTpl) {
+        let me = this, rst = {"Name": "计算式", items: []};
+        if (rptTpl[JV.NODE_FORMULAS]) {
+            for (let cItem of rptTpl[JV.NODE_FORMULAS]) {
+                let node = {};
+                node[JV.PROP_NAME] = cItem[JV.PROP_NAME];
+                node[JV.PROP_RUN_TYPE] = cItem[JV.PROP_RUN_TYPE];
+                node[JV.PROP_EXPRESSION] = cItem[JV.PROP_EXPRESSION];
+                node["format"] = (cItem["format"])?cItem["format"]:"";
+                rst.items.push(node);
+            }
+        }
+        return rst;
     },
-    onClick: function () {
-        //
+    changeRunType: function (dom) {
+        let me = calculationTreeOprObj;
+        if (me.currentNode) {
+            me.currentNode[JV.PROP_RUN_TYPE] = dom.value;
+        }
+    },
+    changeFormat: function (dom) {
+        let me = calculationTreeOprObj;
+        if (me.currentNode) {
+            me.currentNode["format"] = dom.value;
+        }
+    },
+    changeExpression: function (dom) {
+        let me = calculationTreeOprObj;
+        if (me.currentNode) {
+            me.currentNode[JV.PROP_EXPRESSION] = dom.value;
+        }
+    },
+    onClick: function (event,treeId,treeNode) {
+        let me = calculationTreeOprObj;
+        me.currentNode = treeNode;
+        if (treeNode.level === 0) {
+            $("#exprDetail")[0].style.display = "none";
+        } else {
+            $("#exprDetail")[0].style.display = "";
+            if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_PAGING) {
+                $("#exprRunType")[0].selectedIndex = 0;
+            } else {
+                $("#exprRunType")[0].selectedIndex = 1;
+            }
+            $("#exprFormat")[0].value = (treeNode["format"])?treeNode["format"]:"";
+            $("#exprContent")[0].value = treeNode[JV.PROP_EXPRESSION];
+            //
+        }
     },
     onBeforeRemove: function(treeId, treeNode){
+        let rst = false;
+        if (treeNode.level > 0) {
+            rst = confirm('请确认是否真的删除?');
+        }
+        return rst;
     },
     beforeRename: function(treeId, treeNode, newName, isCancel) {
+        if (isCancel) {
+            return true;
+        }
+        if (treeNode.level === 0) {
+            return false;
+        }
+        return true;
     },
-    onRemove: function () {
-        //
-    },
-    onRename: function () {
-        //
+    onBeforeDrop: function (treeId, treeNodes, targetNode, moveType) {
+        let rst = false;
+        if (targetNode.level === 1 && (moveType === "next" || moveType === "prev")) {
+            return true;
+        }
+        return rst;
     },
     extractCalculation: function (rptTpl) {
         //

+ 21 - 0
web/maintain/report/js/rpt_tpl_cfg_helper.js

@@ -74,6 +74,21 @@ let rpt_tpl_cfg_helper = {
             $("#element_control")[0].style.display = "";
             $("#element_area_1")[0].style.display = "";
             $("#element_area_2")[0].style.display = "";
+            if (treeNode[JV.PROP_FIELD_ID] || treeNode[JV.PROP_PARAM_ID]) {
+                $("#element_pre_suff")[0].style.display = "";
+                if (treeNode[JV.PROP_PREFIX]) {
+                    $("#elePrefix").get(0).value = treeNode[JV.PROP_PREFIX];
+                } else {
+                    $("#elePrefix").get(0).value = "";
+                }
+                if (treeNode[JV.PROP_SUFFIX]) {
+                    $("#eleSuffix").get(0).value = treeNode[JV.PROP_SUFFIX];
+                } else {
+                    $("#eleSuffix").get(0).value = "";
+                }
+            } else {
+                $("#element_pre_suff")[0].style.display = "none";
+            }
             //setup font
             let fontDom = $("#elementFonts").get(0);
             fontDom.removeAttribute("disabled")
@@ -105,6 +120,7 @@ let rpt_tpl_cfg_helper = {
             $("#element_control")[0].style.display = "none";
             $("#element_area_1")[0].style.display = "none";
             $("#element_area_2")[0].style.display = "none";
+            $("#element_pre_suff")[0].style.display = "none";
         }
     },
     fontChange: function(dom) {
@@ -269,5 +285,10 @@ let rpt_tpl_cfg_helper = {
                 dataInfoMapTreeOprObj.currentNode[JV.PROP_AREA][caclStr][typeStr] = dom.checked?JV.CAL_TYPE[0]:JV.CAL_TYPE[1];
             }
         }
+    },
+    changePreSuff: function (dom, typeStr) {
+        if (dataInfoMapTreeOprObj.currentNode) {
+            dataInfoMapTreeOprObj.currentNode[typeStr] = dom.value;
+        }
     }
 };

+ 1 - 0
web/maintain/report/js/rpt_tpl_helper.js

@@ -69,6 +69,7 @@ let tplHelper = {
             discreteFieldParamTreeOprObj.iniTree(rptTpl);
             dataInfoMapTreeOprObj.iniDataMap();
             //5. 计算式
+            calculationTreeOprObj.iniTree(rptTpl);
         }
     },
 

+ 27 - 1
web/maintain/report/rpt_tpl_detail.html

@@ -304,6 +304,16 @@
                                 </label>
                             </div>
                         </div>
+                        <div class="row" id="element_pre_suff">
+                            <div class="input-group col-6">
+                                <div class="input-group-addon">前缀</div>
+                                <input class="form-control" id="elePrefix" value="" onchange="rpt_tpl_cfg_helper.changePreSuff(this, 'Prefix')">
+                            </div>
+                            <div class="input-group col-6">
+                                <div class="input-group-addon">后缀</div>
+                                <input class="form-control" id="eleSuffix" value="" onchange="rpt_tpl_cfg_helper.changePreSuff(this, 'Suffix')">
+                            </div>
+                        </div>
                         <div class="form-group" id="dispRowHeight">
                             <label>显示行高度</label>
                             <select class="form-control"><option> </option></select>
@@ -337,7 +347,23 @@
             <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="form-group">
+                            <label>计算式执行点</label>
+                            <select class="form-control" id="exprRunType" onchange="calculationTreeOprObj.changeRunType(this)"></select>
+                        </div>
+                        <div class="form-group">
+                            <label>Format</label>
+                            <input class="form-control" id="exprFormat" value="" onchange="calculationTreeOprObj.changeFormat(this)">
+                        </div>
+                        <div class="form-group">
+                            <textarea rows="8" cols="80" id="exprContent" onchange="calculationTreeOprObj.changeExpression(this)"></textarea>
+                        </div>
                     </div>
                 </div>
             </div>