Browse Source

优化报表编辑器

TonyKang 7 years ago
parent
commit
8d10434605

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

@@ -105,6 +105,11 @@ let bandSetting = {
         removeTitle: "删除模板框",
         renameTitle: "更改名称"
     },
+    check: {
+        enable: true,
+        chkStyle: "radio",
+        radioType: "all"
+    },
     data: {
         keep: {
             parent:true,
@@ -123,6 +128,7 @@ let bandSetting = {
     },
     callback:{
         onClick: bandTreeOprObj.onClick,
+        onCheck: bandTreeOprObj.onCheck,
         beforeRemove: bandTreeOprObj.onBeforeRemove
     }
 };

+ 54 - 11
web/maintain/report/js/rpt_tpl_band.js

@@ -6,17 +6,45 @@ let bandTreeOprObj = {
     innerCounter: 1,
     canTrickEvent: false,
     iniTree: function(rptTpl) {
-        var me = this;
+        let me = bandTreeOprObj;
         let bandList = rptTpl[JV.NODE_BAND_COLLECTION];
         me.buildTreeData(bandList);
-        me.treeObj = $.fn.zTree.init($("#band_tree_reversed"), bandSetting, 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;
+        }
+        for (let bNode of nodes) {
+            checkIsMergeBorder(bNode);
+        }
     },
     copyBandList: function (isAllParent) {
         let me = this, rst = null;
         if (me.treeObj) {
             rst = [];
-            let nodes = me.treeObj.getNodes();
+            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];
@@ -157,7 +185,7 @@ let bandTreeOprObj = {
         //边框样式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]);
+        // $("#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;
@@ -168,6 +196,26 @@ let bandTreeOprObj = {
         //
         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.items && bandNode.items.length > 0) {
+                for (let subBandNode of bandNode.items) {
+                    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) {
@@ -238,17 +286,12 @@ let bandTreeOprObj = {
             me.currentNode[JV.BAND_PROP_DISPLAY_TYPE] = JV.PAGE_STATUS[dom.selectedIndex];
         }
     },
-    bandBorderMergeChange: function (dom) {
-        let me = this;
-        if (me.currentNode) {
-            me.currentNode[JV.BAND_PROP_MERGE_BORDER] = dom.checked?'T':'F';
-        }
-    },
     extractBands: function (rptTpl) {
         let me = this;
         if (rptTpl) {
             let newBandList = [];
-            for (let node of me.treeObj.getNodes()) {
+            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;

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

@@ -3,7 +3,7 @@
  */
 
 let expr_templates = [
-    {Name: "整理序号", Expression: "let destField = $JE.F(/*指标ID*/,$CURRENT_RPT);\n  destField[JV.PROP_AD_HOC_DATA] = [];\n  for (let innerFmlIdx = 0; innerFmlIdx < $CURRENT_DATA[JV.DATA_DETAIL_DATA][0].length; innerFmlIdx++) {\n    $JE.setFieldValue(destField, $CURRENT_DATA, innerFmlIdx, (innerFmlIdx + 1));\n}"},
+    // {Name: "整理序号(单层)", Expression: "let destField = $JE.F(/*指标ID*/,$CURRENT_RPT);\n  destField[JV.PROP_AD_HOC_DATA] = [];\n  for (let innerFmlIdx = 0; innerFmlIdx < $CURRENT_DATA[JV.DATA_DETAIL_DATA][0].length; innerFmlIdx++) {\n    $JE.setFieldValue(destField, $CURRENT_DATA, innerFmlIdx, (innerFmlIdx + 1));\n}"},
     {Name: "转换大写金额", Expression: "let capF = $JE.F(/*目标指标ID*/, $CURRENT_RPT), orgF = $JE.F(/*原始指标ID*/, $CURRENT_RPT);\n $JE.setFieldValue(capF, $CURRENT_DATA, 0, $JE.$STR_UTIL.convertToCaptionNum(parseFloat($JE.getFieldValue(orgF, $CURRENT_DATA, 0, 0)).toFixed(2), true, true));"},
     {Name: "总计汇总", Expression: "let totalFee = $JE.F(/*目标指标ID*/,$CURRENT_RPT), bill1 = $JE.F(/*原始指标ID*/,$CURRENT_RPT);\n let sumValue = 0.0;\n sumValue += parseFloat($JE.getFieldValue(bill1,$CURRENT_DATA,0,0));\n $JE.setFieldValue(totalFee,$CURRENT_DATA,0,sumValue);"}
 ];

+ 4 - 4
web/maintain/report/js/rpt_tpl_helper.js

@@ -56,10 +56,10 @@ let tplHelper = {
             } else {
                 $("#multiColCnt")[0].style.display = "none";
             }
-            $("#rptTplMarginLeft")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT];
-            $("#rptTplMarginRight")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_RIGHT];
-            $("#rptTplMarginTop")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_TOP];
-            $("#rptTplMarginBottom")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_BOTTOM];
+            // $("#rptTplMarginLeft")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT];
+            // $("#rptTplMarginRight")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_RIGHT];
+            // $("#rptTplMarginTop")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_TOP];
+            // $("#rptTplMarginBottom")[0].value = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_BOTTOM];
             //2. 模板布局
             bandTreeOprObj.iniTree(rptTpl);
             //3. 指标映射

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

@@ -652,10 +652,10 @@ let zTreeOprObj = {
         if (rptTpl[JV.NODE_FLOW_INFO]) {
             rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN] = parseInt($("#rptTplMultiCols")[0].value);
         }
-        rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT] = $("#rptTplMarginLeft")[0].value;
-        rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_RIGHT] = $("#rptTplMarginRight")[0].value;
-        rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_TOP] = $("#rptTplMarginTop")[0].value;
-        rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_BOTTOM] = $("#rptTplMarginBottom")[0].value;
+        // rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT] = $("#rptTplMarginLeft")[0].value;
+        // rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_RIGHT] = $("#rptTplMarginRight")[0].value;
+        // rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_TOP] = $("#rptTplMarginTop")[0].value;
+        // rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_BOTTOM] = $("#rptTplMarginBottom")[0].value;
     },
     getTopNodeByCurrentNode: function (currentNode) {
         let topPNode = currentNode, pNode = currentNode.getParentNode();

+ 40 - 15
web/maintain/report/js/rpt_tpl_pre_handle.js

@@ -7,8 +7,8 @@ const condition_types = ["==", "===", ">", ">=", "<", "<=", "!=", "in", "not in"
 const pre_handle_data_objects = ["bills", "ration", "ration_glj"];
 const pre_handle_data_objects_name = ["清单", "定额", "定额工料机"];
 const exposed_bills_properties = [
-    {Name: "清单_ID", Title: "", Key: "ID", Order: "ascend"}
-    ,{Name: "清单_所属项目ID", Title: "", Key: "projectID", Order: "ascend"}
+    {Name: "清单_所属项目ID", Title: "", Key: "projectID", Order: "ascend"}
+    ,{Name: "清单_ID", Title: "", Key: "ID", Order: "ascend"}
     ,{Name: "清单_层次", Title: "", Key: "treeLevel", Order: "ascend"}
     ,{Name: "清单_标记", Title: "", Key: "flags.flag", Order: "ascend"}
     // ,{Name: "清单_项目编码", Title: "", Key: "code", Order: "ascend"}
@@ -22,8 +22,9 @@ const exposed_bills_properties = [
 ];
 const exposed_ration_properties = [
     {Name: "定额_工程内部ID", Title: "", Key: "ID", Order: "ascend"}
-    ,{Name: "定额_所属清单ID", Title: "", Key: "billsItemID", Order: "ascend"}
     ,{Name: "定额_所属项目ID", Title: "", Key: "projectID", Order: "ascend"}
+    ,{Name: "定额_所属清单ID", Title: "", Key: "billsItemID", Order: "ascend"}
+    ,{Name: "定额_清单内顺序", Title: "", Key: "serialNo", Order: "ascend"}
     // ,{Name: "定额_编号", Title: "", Key: "code", Order: "ascend"}
     // ,{Name: "定额_项目名称", Title: "", Key: "caption", Order: "ascend"}
     // ,{Name: "定额_单位", Title: "", Key: "unit", Order: "ascend"}
@@ -301,11 +302,13 @@ let preHandleObj = {
         //更改(或选择)预处理环节中的 数据依据(就是说报表想预处理什么数据)
         let me = preHandleObj;
         if (oprType === "top") {
+            preHandleObj.currentNode[JV.PROP_DATA_KEY] = dom.value;
             preHandleSortObj.childTreeObj = $.fn.zTree.init($("#child_sorting_keys"), sortingKeysSetting, exposed_properties_arr[dom.selectedIndex]);
             preHandleSortObj.treeObj = $.fn.zTree.init($("#pre_handle_sort_keys_reversed"), sortingKeysSetting, exposed_properties_arr[dom.selectedIndex]);
             preHandleFilterObj.treeObj = $.fn.zTree.init($("#pre_handle_filter_keys_reversed"), filterKeysSetting, exposed_properties_arr[dom.selectedIndex]);
         } else if (oprType === "accord_to_parent") {
             preHandleSortObj.parentTreeObj = $.fn.zTree.init($("#parent_sorting_keys"), sortingKeysSetting, exposed_properties_arr[dom.selectedIndex]);
+            preHandleObj.currentNode[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_DATA_KEY] = dom.value;
         }
     },
     onBeforeDrop: function(treeId, treeNodes, targetNode, moveType){
@@ -391,17 +394,19 @@ let preHandleSortObj = {
                 for (let item of src[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_CHILD_SORT_KEYS]) {
                     dest[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_CHILD_SORT_KEYS].push(item);
                 }
-                for (let subSort of src[JV.PROP_OTHER_SUB_SORT]) {
-                    let st = {};
-                    st[JV.PROP_SORT_TYPE] = subSort[JV.PROP_SORT_TYPE];
-                    if (subSort[JV.PROP_SORT_TYPE] === "normal") {
-                        st[JV.PROP_SORT_KEYS] = [];
-                        for (let item of subSort[JV.PROP_SORT_KEYS]) {
-                            let di = {key: item.key, order: item.order};
-                            st[JV.PROP_SORT_KEYS].push(di);
+                if (src[JV.PROP_OTHER_SUB_SORT] !== null && src[JV.PROP_OTHER_SUB_SORT] !== undefined) {
+                    for (let subSort of src[JV.PROP_OTHER_SUB_SORT]) {
+                        let st = {};
+                        st[JV.PROP_SORT_TYPE] = subSort[JV.PROP_SORT_TYPE];
+                        if (subSort[JV.PROP_SORT_TYPE] === "normal") {
+                            st[JV.PROP_SORT_KEYS] = [];
+                            for (let item of subSort[JV.PROP_SORT_KEYS]) {
+                                let di = {key: item.key, order: item.order};
+                                st[JV.PROP_SORT_KEYS].push(di);
+                            }
+                        } else {
+                            //其他暂时不实现,目前没那么复杂
                         }
-                    } else {
-                        //其他暂时不实现,目前没那么复杂
                     }
                 }
                 break;
@@ -493,9 +498,9 @@ let preHandleSortObj = {
     onCheck: function(event,treeId,treeNode) {
         let me = preHandleSortObj;
         if (treeId.indexOf("parent_sorting_keys") >= 0) {
-            //preHandleObj.currentNode
+            me.resetParentSort();
         } else if (treeId.indexOf("child_sorting_keys") >= 0) {
-            //
+            me.resetChildSort();
         } else {
             me.resetNormalSort();
         }
@@ -513,6 +518,24 @@ let preHandleSortObj = {
             }
         }
     },
+    resetParentSort: function () {
+        let me = preHandleSortObj;
+        let nodes = me.parentTreeObj.getCheckedNodes();
+        let sortKeys = [];
+        for (let node of nodes) {
+            sortKeys.push(node.Key);
+        }
+        preHandleObj.currentNode[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_SORT_KEYS] = sortKeys;
+    },
+    resetChildSort: function () {
+        let me = preHandleSortObj;
+        let nodes = me.childTreeObj.getCheckedNodes();
+        let sortKeys = [];
+        for (let node of nodes) {
+            sortKeys.push(node.Key);
+        }
+        preHandleObj.currentNode[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_CHILD_SORT_KEYS] = sortKeys;
+    },
     resetNormalSort: function() {
         let me = preHandleSortObj;
         let nodes = me.normalTreeObj.getCheckedNodes();
@@ -551,6 +574,7 @@ let preHandleSortObj = {
             me.currentNode[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_DATA_KEY] = pre_handle_data_objects[0];
             me.currentNode[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_SORT_KEYS] = [];
             me.currentNode[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_CHILD_SORT_KEYS] = [];
+            me.currentNode[JV.PROP_OTHER_SUB_SORT] = [];
         } else if (dom.selectedIndex === 0) {
             $("#div_sort_type_normal")[0].style.display = "";
             preHandleSortObj.normalTreeObj = $.fn.zTree.init($("#pre_handle_sort_keys_reversed"), sortingKeysSetting, exposed_properties_arr[data_dom.selectedIndex]);
@@ -580,6 +604,7 @@ let preHandleSortObj = {
                 break;
             case 2 :
                 //according to parent
+                rst[JV.PROP_PARENT_CHILD_SORT_KEY] = handleObj[JV.PROP_PARENT_CHILD_SORT_KEY];
                 break;
             case 3 :
                 //self define

+ 14 - 24
web/maintain/report/rpt_tpl_detail_bands.html

@@ -10,38 +10,28 @@
             <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">
+                <div class="form-group col-md-3">
+                    <label>边框样式</label>
+                    <select class="form-control" id="borderStyles" onchange="bandTreeOprObj.bandStyleChange(this)"></select>
+                </div>
+                <div class="form-group col-md-2">
+                    <label>位置</label>
+                    <select class="form-control" id="bandAlignment" onchange="bandTreeOprObj.bandAlignmentChange(this)"></select>
+                </div>
+                <div class="form-group col-md-3">
+                    <label>出现频率</label>
+                    <select class="form-control" id="pageFrequency" onchange="bandTreeOprObj.bandShowFrequencyChange(this)"></select>
+                </div>
+                <div class="form-group col-md-2">
                     <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">
+                <div class="form-group col-md-2">
                     <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>

+ 6 - 31
web/maintain/report/rpt_tpl_detail_info.html

@@ -8,20 +8,18 @@
             <div class="form-group">
                 <label>页面</label>
                 <div class="row">
-                    <div class="input-group col-6">
+                    <div class="input-group col-4">
                         <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 col-4">
                         <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 class="input-group col-4">
+                        <div class="input-group-addon">单位</div>
+                        <select class="form-control input-sm" id="rptTplUnit"><option>厘米</option></select>
+                    </div>
                 </div>
             </div>
             <div class="form-group" id="multiColCnt">
@@ -47,29 +45,6 @@
                     <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>