浏览代码

增加顶清单节点标记 + 子过滤可以多层嵌套

TonyKang 7 年之前
父节点
当前提交
6409bbf6ef

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

@@ -573,11 +573,27 @@ function filterData(sourceData, handleCfg, prjData) {
             }
             }
             startIdx++;
             startIdx++;
             if (!compRst) {
             if (!compRst) {
-                break; //不符合条件的数据则退出(这里的判断条件是and关系)
+                break; //不符合条件的数据则退出(这里的判断条件是and关系)
             }
             }
         }
         }
         return compRst;
         return compRst;
     };
     };
+    let private_sub_filter_compare = function (dtlItem, subFilters) {
+        let cmpRst = false;
+        for (let dtlCfg of subFilters) {
+            cmpRst = private_filter_compare(dtlItem, dtlCfg);
+            if (cmpRst) {
+                if (dtlCfg[JV.PROP_OTHER_SUB_FILTER] && dtlCfg[JV.PROP_OTHER_SUB_FILTER].length > 0) {
+                    cmpRst = private_sub_filter_compare(dtlItem, dtlCfg[JV.PROP_OTHER_SUB_FILTER]);
+                    if (cmpRst) break;
+                } else {
+                    break;
+                }
+            }
+        }
+        return cmpRst;
+    };
+
     for (let item of tempRstArr) {
     for (let item of tempRstArr) {
         if (private_filter_compare(item, handleCfg)) {
         if (private_filter_compare(item, handleCfg)) {
             rstArr.push(item);
             rstArr.push(item);
@@ -586,19 +602,15 @@ function filterData(sourceData, handleCfg, prjData) {
     if (handleCfg[JV.PROP_OTHER_SUB_FILTER] && handleCfg[JV.PROP_OTHER_SUB_FILTER].length > 0) {
     if (handleCfg[JV.PROP_OTHER_SUB_FILTER] && handleCfg[JV.PROP_OTHER_SUB_FILTER].length > 0) {
         let newRstArr = [];
         let newRstArr = [];
         for (let dtlItem of rstArr) {
         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;
-                }
+            let cmpRst = private_sub_filter_compare(dtlItem, handleCfg[JV.PROP_OTHER_SUB_FILTER]);
+            if (cmpRst) {
+                newRstArr.push(dtlItem);
             }
             }
         }
         }
         rstArr = newRstArr;
         rstArr = newRstArr;
     }
     }
     replaceActDataArr(sourceData, rstArr);
     replaceActDataArr(sourceData, rstArr);
-    // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/filteredRst.js");
+    // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/filteredRst.jsp");
 }
 }
 
 
 function adjustData(sourceData, adjustCfg) {
 function adjustData(sourceData, adjustCfg) {

+ 9 - 1
public/web/treeDataHelper.js

@@ -29,6 +29,14 @@ let tree_Data_Helper = {
                 nextNode[TOP_BILL_ID] = tbID;
                 nextNode[TOP_BILL_ID] = tbID;
                 if (parentItem === null) {
                 if (parentItem === null) {
                     nextNode[TOP_BILL_ID] = nextNode[NODE_ID];
                     nextNode[TOP_BILL_ID] = nextNode[NODE_ID];
+                    if (nextNode.flags && nextNode.flags.length > 0) {
+                        for (let flag of nextNode.flags) {
+                            if (flag.fieldName === "fixed") {
+                                nextNode[TOP_BILL_ID] = flag.flag;
+                                break;
+                            }
+                        }
+                    }
                 }
                 }
                 if (addLevel) nextNode[TREE_LEVEL] = treeLevel;
                 if (addLevel) nextNode[TREE_LEVEL] = treeLevel;
                 nextNode = tmpNodes[prefix + nextNode[NEXT_ID]];
                 nextNode = tmpNodes[prefix + nextNode[NEXT_ID]];
@@ -36,7 +44,7 @@ let tree_Data_Helper = {
             for (let i = 0; i < iter.length; i++) {
             for (let i = 0; i < iter.length; i++) {
                 let rtbID = tbID;
                 let rtbID = tbID;
                 if (parentItem === null) {
                 if (parentItem === null) {
-                    rtbID = iter[i][NODE_ID];
+                    rtbID = iter[i][TOP_BILL_ID];
                 }
                 }
                 private_buildNodeData(iter[i], iter[i][SUB_ID], (treeLevel + 1), rtbID);
                 private_buildNodeData(iter[i], iter[i][SUB_ID], (treeLevel + 1), rtbID);
             }
             }

+ 20 - 12
web/maintain/report/js/rpt_tpl_pre_handle.js

@@ -89,7 +89,7 @@ const fixed_bills_types = [
 const exposed_bills_properties = [
 const exposed_bills_properties = [
     {Name: "清单_所属项目ID", Title: "", Key: "projectID", Order: "ascend"}
     {Name: "清单_所属项目ID", Title: "", Key: "projectID", Order: "ascend"}
     ,{Name: "清单_ID", Title: "", Key: "ID", Order: "ascend"}
     ,{Name: "清单_ID", Title: "", Key: "ID", Order: "ascend"}
-    ,{Name: "顶层父清单_ID", Title: "", Key: "topBillID", Order: "ascend", individualType: fixed_top_bills_nodes}
+    ,{Name: "顶层父清单_标记", Title: "", Key: "topBillID", Order: "ascend", individualType: fixed_top_bills_nodes}
     ,{Name: "清单_层次", Title: "", Key: "treeLevel", Order: "ascend"}
     ,{Name: "清单_层次", Title: "", Key: "treeLevel", Order: "ascend"}
     ,{Name: "清单_类别", Title: "", Key: "type", Order: "ascend", individualType: fixed_bills_types}
     ,{Name: "清单_类别", Title: "", Key: "type", Order: "ascend", individualType: fixed_bills_types}
     ,{Name: "清单_标记", Title: "", Key: "flags.flag", Order: "ascend", individualType: fixed_bills_flags}
     ,{Name: "清单_标记", Title: "", Key: "flags.flag", Order: "ascend", individualType: fixed_bills_flags}
@@ -379,7 +379,7 @@ let preHandleObj = {
     },
     },
     addHoverDom: function(treeId, treeNode) {
     addHoverDom: function(treeId, treeNode) {
         let me = preHandleObj, sObj = $("#" + treeNode.tId + "_span");
         let me = preHandleObj, sObj = $("#" + treeNode.tId + "_span");
-        if (treeNode.level > 0 || $("#addBtn_"+treeNode.tId).length > 0) return;
+        if ((treeNode.level > 0 && treeNode[JV.PROP_HANDLE_TYPE] !== JV.PROP_HANDLE_TYPE_FILTER) || ($("#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") {
         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>";
             let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增子排序' onfocus='this.blur();'></span>";
             sObj.after(addStr);
             sObj.after(addStr);
@@ -405,7 +405,8 @@ let preHandleObj = {
                 newNode.Name = "子过滤";
                 newNode.Name = "子过滤";
                 newNode[JV.PROP_DATA_KEY] = treeNode[JV.PROP_DATA_KEY];
                 newNode[JV.PROP_DATA_KEY] = treeNode[JV.PROP_DATA_KEY];
                 newNode.Title = "";
                 newNode.Title = "";
-                me.private_set_title(newNode);
+                newNode[JV.PROP_HANDLE_TYPE] = JV.PROP_HANDLE_TYPE_FILTER;
+                // me.private_set_title(newNode);
                 newSubNodes.push(newNode);
                 newSubNodes.push(newNode);
                 treeNode.isParent = true;
                 treeNode.isParent = true;
                 me.treeObj.addNodes(treeNode, -1, newSubNodes, true);
                 me.treeObj.addNodes(treeNode, -1, newSubNodes, true);
@@ -771,6 +772,7 @@ let preHandleFilterObj = {
             dest.items = [];
             dest.items = [];
             for (let subFilter of src[JV.PROP_OTHER_SUB_FILTER]) {
             for (let subFilter of src[JV.PROP_OTHER_SUB_FILTER]) {
                 let dtlRst = {Name: "子过滤", Title: ""};
                 let dtlRst = {Name: "子过滤", Title: ""};
+                subFilter[JV.PROP_DATA_KEY] = src[JV.PROP_DATA_KEY];
                 me.copyNode(subFilter, dtlRst);
                 me.copyNode(subFilter, dtlRst);
                 dtlRst[JV.PROP_HANDLE_TYPE] = src[JV.PROP_HANDLE_TYPE];
                 dtlRst[JV.PROP_HANDLE_TYPE] = src[JV.PROP_HANDLE_TYPE];
                 dtlRst[JV.PROP_DATA_KEY] = src[JV.PROP_DATA_KEY];
                 dtlRst[JV.PROP_DATA_KEY] = src[JV.PROP_DATA_KEY];
@@ -1006,19 +1008,25 @@ let preHandleFilterObj = {
     },
     },
     extractTabFields: function (handleObj) {
     extractTabFields: function (handleObj) {
         let me = preHandleFilterObj, rst = {};
         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);
         me.copyNode(handleObj, rst);
         rst[JV.PROP_OTHER_SUB_FILTER] = [];
         rst[JV.PROP_OTHER_SUB_FILTER] = [];
+        let private_extract_other_sub_filter = function (parentFilter, currentFilterNode) {
+            let dtlRst = {};
+            me.copyNode(currentFilterNode, dtlRst);
+            parentFilter[JV.PROP_OTHER_SUB_FILTER].push(dtlRst);
+            if (currentFilterNode.items && currentFilterNode.items.length > 0) {
+                dtlRst[JV.PROP_OTHER_SUB_FILTER] = [];
+                for (let subFilterNode of currentFilterNode.items) {
+                    private_extract_other_sub_filter(dtlRst, subFilterNode);
+                }
+            }
+            delete dtlRst.Name;
+            delete dtlRst[JV.PROP_DATA_KEY];
+            dtlRst = null;
+        };
         if (handleObj.items && handleObj.items.length > 0) {
         if (handleObj.items && handleObj.items.length > 0) {
             for (let subFilter of handleObj.items) {
             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;
+                private_extract_other_sub_filter(rst, subFilter);
             }
             }
         }
         }
         return rst;
         return rst;