瀏覽代碼

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionOperation

zhongzewei 7 年之前
父節點
當前提交
dc9ccf7ce2

+ 21 - 4
modules/reports/util/rpt_construct_data_util.js

@@ -416,12 +416,12 @@ function filterData(sourceData, handleCfg, prjData) {
         }
         return rst;
     };
-    let compareObj = {};
-    for (let item of tempRstArr) {
+    let private_filter_compare = function (item, filterCfg) {
+        let compareObj = {};
         let compRst = true;
         let curComparePrjData = null;
         let startIdx = 0;
-        for (let cfg of handleCfg[JV.PROP_FILTER_KEYS]) {
+        for (let cfg of filterCfg[JV.PROP_FILTER_KEYS]) {
             if (cfg[JV.PROP_FILTER_COMPARE_VAL]) {
                 //比较key值
                 let keys = cfg.key.split(".");
@@ -472,10 +472,27 @@ function filterData(sourceData, handleCfg, prjData) {
             }
             startIdx++;
         }
-        if (compRst) {
+        return compRst;
+    };
+    for (let item of tempRstArr) {
+        if (private_filter_compare(item, handleCfg)) {
             rstArr.push(item);
         }
     }
+    if (handleCfg[JV.PROP_OTHER_SUB_FILTER] && handleCfg[JV.PROP_OTHER_SUB_FILTER].length > 0) {
+        let newRstArr = [];
+        for (let dtlItem of rstArr) {
+            let cmpRst = false;
+            for (let dtlCfg of handleCfg[JV.PROP_OTHER_SUB_FILTER]) {
+                cmpRst = private_filter_compare(dtlItem, dtlCfg);
+                if (cmpRst) {
+                    newRstArr.push(dtlItem);
+                    break;
+                }
+            }
+        }
+        rstArr = newRstArr;
+    }
     delete sourceData.data;
     sourceData.data = rstArr;
     // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/filteredRst.js");

+ 1 - 0
public/web/rpt_value_define.js

@@ -52,6 +52,7 @@ const JV = {
     PROP_PARENT_SORT_KEYS: "父排序键值集",
     PROP_CHILD_SORT_KEYS: "子排序键值集",
     PROP_OTHER_SUB_SORT: "其他子排序",
+    PROP_OTHER_SUB_FILTER: "其他子过滤",
     PROP_HANDLE_TYPE: "预处理类型",
     PROP_FILTER_KEYS: "过滤键值集",
     PROP_FILTER_TOP_BILLS_NODES: "清单顶节点集",

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

@@ -432,7 +432,9 @@ let preHandleSetting = {
     view: {
         showIcon: true,
         expandSpeed: "",
-        selectedMulti: false
+        selectedMulti: false,
+        addHoverDom: preHandleObj.addHoverDom,
+        removeHoverDom: preHandleObj.removeHoverDom
     },
     edit: {
         enable: true,

+ 3 - 0
web/maintain/report/js/rpt_tpl_main.js

@@ -321,6 +321,7 @@ let zTreeOprObj = {
                 me.copyReportTemplate(orgID, newNodeID, true, function(goodResult){
                     me.updateTreeRootNode(newTopNode, false, function(goodRst){
                         canContinue = true;
+                        me.currentNode = treeNodes[0];
                     }, function(badRst){
                         displayMessage("更新模板节点失败!", "red", 2000);
                     });
@@ -328,10 +329,12 @@ let zTreeOprObj = {
                     displayMessage("Copy请求失败!", "red", 2000);
                 });
             });
+            if (canContinue) me.chkAndRreshRefTpl();
         } else {
             newTopNode = me.buildRootNodeDoc(targetTopNode);
             me.updateTreeRootNode(newTopNode, false, function(rst){
                 canContinue = true;
+                me.currentNode = treeNodes[0];
             }, function(badResult){
                 displayMessage("移动请求失败!", "red", 2000);
                 canContinue = false;

+ 98 - 34
web/maintain/report/js/rpt_tpl_pre_handle.js

@@ -141,34 +141,38 @@ let preHandleObj = {
             }
         }
     },
-    addNewNode: function(nodeType) {
-        let me = this, item = null, preHandleType = nodeType;
+    createNewNode: function (nodeType) {
+        let rst = null, preHandleType = nodeType;
         if (!nodeType) {
             preHandleType = JV.PROP_HANDLE_TYPE_SORT;
         }
         switch (nodeType) {
             case JV.PROP_HANDLE_TYPE_SORT:
-                item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "排序方式": "normal", "排序键值集":[]};
+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "排序方式": "normal", "排序键值集":[]};
                 break;
             case JV.PROP_HANDLE_TYPE_FILTER:
-                item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "过滤键值集": []};
+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "过滤键值集": []};
                 break;
             case JV.PROP_HANDLE_TYPE_BILLS_DATA_MOVE:
-                item = {Name: "预处理环节", Title: "", "映射数据对象": "ration", "预处理类型": preHandleType};
+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "ration", "预处理类型": preHandleType};
                 break;
             case JV.PROP_HANDLE_TYPE_SUM:
-                item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "分组键值集": [], "统计键值集":[]};
+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "分组键值集": [], "统计键值集":[]};
                 break;
             case JV.PROP_HANDLE_TYPE_ADJUST:
-                item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "数据调整集":[]};
+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "数据调整集":[]};
                 break;
             case JV.PROP_HANDLE_TYPE_ADD_DUMMY:
-                item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "Dummy数据集":[]};
+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "Dummy数据集":[]};
                 break;
             default:
-                item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": "排序", "排序方式": "normal", "排序键值集":[]};
+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": "排序", "排序方式": "normal", "排序键值集":[]};
                 break;
         }
+        return rst;
+    },
+    addNewNode: function(nodeType) {
+        let me = this, item = me.createNewNode(nodeType);
         me.private_set_title(item);
         me.treeObj.addNodes(null, -1, [item], true);
     },
@@ -323,6 +327,44 @@ let preHandleObj = {
         }
         return rst;
     },
+    addHoverDom: function(treeId, treeNode) {
+        let me = preHandleObj, sObj = $("#" + treeNode.tId + "_span");
+        if (treeNode.level > 0 || $("#addBtn_"+treeNode.tId).length > 0) return;
+        if (treeNode[JV.PROP_HANDLE_TYPE] === JV.PROP_HANDLE_TYPE_SORT && treeNode[JV.PROP_SORT_TYPE] === "accord_to_parent") {
+            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 newSubNodes = [];
+                let newNode = me.createNewNode(treeNode[JV.PROP_HANDLE_TYPE]);
+                newNode.Name = "子排序";
+                newNode[JV.PROP_DATA_KEY] = treeNode[JV.PROP_DATA_KEY];
+                me.private_set_title(newNode);
+                newSubNodes.push(newNode);
+                treeNode.isParent = true;
+                me.treeObj.addNodes(treeNode, -1, newSubNodes, true);
+                me.treeObj.expandNode(treeNode, true, false);
+            });
+        } else if (treeNode[JV.PROP_HANDLE_TYPE] === JV.PROP_HANDLE_TYPE_FILTER) {
+            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 newSubNodes = [];
+                let newNode = me.createNewNode(treeNode[JV.PROP_HANDLE_TYPE]);
+                newNode.Name = "子过滤";
+                newNode[JV.PROP_DATA_KEY] = treeNode[JV.PROP_DATA_KEY];
+                me.private_set_title(newNode);
+                newSubNodes.push(newNode);
+                treeNode.isParent = true;
+                me.treeObj.addNodes(treeNode, -1, newSubNodes, true);
+                me.treeObj.expandNode(treeNode, true, false);
+            });
+        }
+    },
+    removeHoverDom: function (treeId, treeNode) {
+        $("#addBtn_"+treeNode.tId).unbind().remove();
+    },
     extractTabFields: function (rptTpl) {
         let me = this, nodes = me.treeObj.getNodes();
         let rst = [];
@@ -360,6 +402,7 @@ let preHandleSortObj = {
     topBillsTreeObj: null,
     otherBillsTreeObj: null,
     copyNode: function (src, dest) {
+        let me = preHandleSortObj;
         dest[JV.PROP_SORT_TYPE] = src[JV.PROP_SORT_TYPE];
         switch (sort_types.indexOf(src[JV.PROP_SORT_TYPE])) {
             case -1:
@@ -390,7 +433,6 @@ let preHandleSortObj = {
             case 2 :
                 //according to parent
                 dest[JV.PROP_PARENT_CHILD_SORT_KEY] = {};
-                dest[JV.PROP_OTHER_SUB_SORT] = [];
                 dest[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_DATA_KEY] = src[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_DATA_KEY];
                 dest[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_SORT_KEYS] = [];
                 for (let item of src[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_SORT_KEYS]) {
@@ -400,19 +442,14 @@ 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);
                 }
+                dest[JV.PROP_OTHER_SUB_SORT] = [];
                 if (src[JV.PROP_OTHER_SUB_SORT] !== null && src[JV.PROP_OTHER_SUB_SORT] !== undefined) {
+                    dest.items = [];
                     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 {
-                            //其他暂时不实现,目前没那么复杂
-                        }
+                        let destSubSort = {Name: "子排序"};
+                        me.copyNode(subSort, destSubSort);
+                        destSubSort[JV.PROP_DATA_KEY] = src[JV.PROP_DATA_KEY];
+                        dest.items.push(destSubSort);
                     }
                 }
                 break;
@@ -639,6 +676,17 @@ let preHandleSortObj = {
             case 2 :
                 //according to parent
                 rst[JV.PROP_PARENT_CHILD_SORT_KEY] = handleObj[JV.PROP_PARENT_CHILD_SORT_KEY];
+                rst[JV.PROP_OTHER_SUB_SORT] = [];
+                if (handleObj.items && handleObj.items.length > 0) {
+                    for (let subSort of handleObj.items) {
+                        let dtlRst = {};
+                        me.copyNode(subSort, dtlRst);
+                        delete dtlRst.Name;
+                        delete dtlRst.PROP_DATA_KEY;
+                        rst[JV.PROP_OTHER_SUB_SORT].push(dtlRst);
+                        dtlRst = null;
+                    }
+                }
                 break;
             case 3 :
                 //self define
@@ -653,7 +701,7 @@ let preHandleSortObj = {
 let preHandleFilterObj = {
     treeObj: null,
     copyNode: function (src, dest) {
-        let keys = [];
+        let me = preHandleFilterObj, keys = [];
         for (let filterItem of src[JV.PROP_FILTER_KEYS]) {
             let item = {key: filterItem.key};
             item[JV.PROP_FILTER_CONDITION] = filterItem[JV.PROP_FILTER_CONDITION];
@@ -664,7 +712,20 @@ let preHandleFilterObj = {
             }
             keys.push(item);
         }
+        dest[JV.PROP_HANDLE_TYPE] = src[JV.PROP_HANDLE_TYPE];
+        dest[JV.PROP_DATA_KEY] = src[JV.PROP_DATA_KEY];
         dest[JV.PROP_FILTER_KEYS] = keys;
+
+        if (src[JV.PROP_OTHER_SUB_FILTER] && src[JV.PROP_OTHER_SUB_FILTER].length > 0) {
+            dest.items = [];
+            for (let subFilter of src[JV.PROP_OTHER_SUB_FILTER]) {
+                let dtlRst = {Name: "子过滤"};
+                me.copyNode(subFilter, dtlRst);
+                dtlRst[JV.PROP_HANDLE_TYPE] = src[JV.PROP_HANDLE_TYPE];
+                dtlRst[JV.PROP_DATA_KEY] = src[JV.PROP_DATA_KEY];
+                dest.items.push(dtlRst);
+            }
+        }
     },
     refresh_node: function () {
         let me = this;
@@ -816,18 +877,21 @@ let preHandleFilterObj = {
         me.resetFilter();
     },
     extractTabFields: function (handleObj) {
-        let me = this, rst = {};
-        rst[JV.PROP_HANDLE_TYPE] = handleObj[JV.PROP_HANDLE_TYPE];
-        rst[JV.PROP_DATA_KEY] = handleObj[JV.PROP_DATA_KEY];
-        rst[JV.PROP_FILTER_KEYS] = [];
-        for (let item of handleObj[JV.PROP_FILTER_KEYS]) {
-            let dtl = {};
-            dtl.key = item.key;
-            dtl[JV.PROP_FILTER_CONDITION] = item[JV.PROP_FILTER_CONDITION];
-            dtl[JV.PROP_FILTER_COMPARE_VAL] = item[JV.PROP_FILTER_COMPARE_VAL]?item[JV.PROP_FILTER_COMPARE_VAL]:null;
-            dtl[JV.PROP_FILTER_COMPARE_OBJ] = item[JV.PROP_FILTER_COMPARE_OBJ]?item[JV.PROP_FILTER_COMPARE_OBJ]:null;
-            dtl[JV.PROP_FILTER_COMPARE_OBJ_KEY] = item[JV.PROP_FILTER_COMPARE_OBJ_KEY]?item[JV.PROP_FILTER_COMPARE_OBJ_KEY]:null;
-            rst[JV.PROP_FILTER_KEYS].push(dtl);
+        let me = preHandleFilterObj, rst = {};
+        // rst[JV.PROP_HANDLE_TYPE] = handleObj[JV.PROP_HANDLE_TYPE];
+        // rst[JV.PROP_DATA_KEY] = handleObj[JV.PROP_DATA_KEY];
+        // rst[JV.PROP_FILTER_KEYS] = [];
+        me.copyNode(handleObj, rst);
+        rst[JV.PROP_OTHER_SUB_FILTER] = [];
+        if (handleObj.items && handleObj.items.length > 0) {
+            for (let subFilter of handleObj.items) {
+                let dtlRst = {};
+                me.copyNode(subFilter, dtlRst);
+                delete dtlRst.Name;
+                delete dtlRst[JV.PROP_DATA_KEY];
+                rst[JV.PROP_OTHER_SUB_FILTER].push(dtlRst);
+                dtlRst = null;
+            }
         }
         return rst;
     }