瀏覽代碼

过滤预判条件修改(!= / !== / not in), 新增指标(清单_顶层父清单_ID)

TonyKang 7 年之前
父節點
當前提交
ef3f34fc50

+ 24 - 11
modules/reports/util/rpt_construct_data_util.js

@@ -437,9 +437,9 @@ function filterData(sourceData, handleCfg, prjData) {
                     rst = compVal.indexOf(src) >= 0;
                 } else {
                     //string,需要转类型
-                    let newCv = JSON.parse(compVal);
-                    if (newCv instanceof Array) {
-                        rst = newCv.indexOf(src) >= 0;
+                    let newInCv = JSON.parse(compVal);
+                    if (newInCv instanceof Array) {
+                        rst = newInCv.indexOf(src) >= 0;
                     } else {
                         rst = false;
                     }
@@ -450,9 +450,9 @@ function filterData(sourceData, handleCfg, prjData) {
                     rst = compVal.indexOf(src) < 0;
                 } else {
                     //string,需要转类型
-                    let newCv = JSON.parse(compVal);
-                    if (newCv instanceof Array) {
-                        rst = newCv.indexOf(src) < 0;
+                    let newNotInCv = JSON.parse(compVal);
+                    if (newNotInCv instanceof Array) {
+                        rst = (newNotInCv.indexOf(src) < 0);
                     } else {
                         rst = true;
                     }
@@ -465,12 +465,25 @@ function filterData(sourceData, handleCfg, prjData) {
     };
     let private_chkArrVal = function(arr, key, compVal, compStr){
         let rst = false;
-        for (let arrItem of arr) {
-            if (arrItem[key]) {
-                rst = private_chkVal(arrItem[key], compVal, compStr);
+        if (arr.length > 0) {
+            for (let arrItem of arr) {
+                if (arrItem[key]) {
+                    rst = private_chkVal(arrItem[key], compVal, compStr);
+                }
+                if (rst) {
+                    break;
+                }
             }
-            if (rst) {
-                break;
+        } else {
+            //在某些判断条件下(含有'非'判断),如arr没有数组项,默认结果反而是true
+            switch (compStr) {
+                case "!=" :
+                case "!==" :
+                case "not in":
+                    rst = true;
+                    break;
+                default:
+                    break;
             }
         }
         return rst;

+ 13 - 4
public/web/treeDataHelper.js

@@ -1,7 +1,8 @@
 /**
  * Created by Tony on 2017/1/23.
  */
-const NODE_ID = "ID", P_ID = "ParentID", NEXT_ID = "NextSiblingID", ADHOC_PRE_ID="Previous_ID", CHILDREN_NODE = "items", SUB_ID = "sub_ids", EMPTY_ID_VAL = -1, TREE_LEVEL = 'treeLevel';
+const NODE_ID = "ID", P_ID = "ParentID", NEXT_ID = "NextSiblingID", ADHOC_PRE_ID="Previous_ID", CHILDREN_NODE = "items", SUB_ID = "sub_ids",
+      EMPTY_ID_VAL = -1, TREE_LEVEL = 'treeLevel', TOP_BILL_ID = "topBillID";
 
 let tree_Data_Helper = {
     buildTreeNodeDirectly: function(data, addLevel) {
@@ -16,7 +17,7 @@ let tree_Data_Helper = {
             }
             return tmpNodeRst;
         };
-        let private_buildNodeData = function(parentItem, idArr, treeLevel) {
+        let private_buildNodeData = function(parentItem, idArr, treeLevel, tbID) {
             let iter = [], nextNode = private_getStartNode(idArr);
             while (nextNode !== null && nextNode !== undefined ) {
                 if (parentItem) {
@@ -25,11 +26,19 @@ let tree_Data_Helper = {
                     rst.push(nextNode);
                 }
                 iter.push(nextNode);
+                nextNode[TOP_BILL_ID] = tbID;
+                if (parentItem === null) {
+                    nextNode[TOP_BILL_ID] = nextNode[NODE_ID];
+                }
                 if (addLevel) nextNode[TREE_LEVEL] = treeLevel;
                 nextNode = tmpNodes[prefix + nextNode[NEXT_ID]];
             }
             for (let i = 0; i < iter.length; i++) {
-                private_buildNodeData(iter[i], iter[i][SUB_ID], (treeLevel + 1));
+                let rtbID = tbID;
+                if (parentItem === null) {
+                    rtbID = iter[i][NODE_ID];
+                }
+                private_buildNodeData(iter[i], iter[i][SUB_ID], (treeLevel + 1), rtbID);
             }
         };
 
@@ -52,7 +61,7 @@ let tree_Data_Helper = {
                 tmpNodes[prefix + data[i][P_ID]][SUB_ID].push(data[i][NODE_ID]);
             }
         }
-        private_buildNodeData(null, topArr, 0);
+        private_buildNodeData(null, topArr, 0, -1);
         //try to release and return
         tmpNodes = null;
         topArr.length = 0;

+ 3 - 3
test/unit/reports/test_rpt_test_template.js

@@ -26,7 +26,7 @@ cfgCacheUtil.setupDftCache();
 let fsUtil = require("../../../public/fsUtil");
 
 let demoPrjId = - 1;
-let demoRptId = 275, pagesize = "A4"; //11-2表(新)
+let demoRptId = 288, pagesize = "A4"; //11-2表(新)
 
 // let userId_Leng = "59cdf14a0034a1000ba52b97"; //小冷User Id 换成_id了 QQ号
 let userId_Leng = "5acac1e885bf55000bd055ba"; //小冷User Id2
@@ -62,8 +62,8 @@ test('测试 - 测试模板啦: ', function (t) {
                 try {
                     // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject_测试模板.jsp");
                     let tplData = rptDataUtil.assembleData(rawDataObj);
-                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataAfterCacl_测试模板.jsp");
-                    // fsUtil.writeObjToFile(tplData, "D:/GitHome/ConstructionCost/tmp/rptTplAssembledData_测试模板.jsp");
+                    fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataAfterCacl_测试模板.jsp");
+                    fsUtil.writeObjToFile(tplData, "D:/GitHome/ConstructionCost/tmp/rptTplAssembledData_测试模板.jsp");
                     //it's time to build the report!!!
                     let printCom = JpcEx.createNew();
                     rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pagesize;

+ 8 - 6
web/building_saas/report/html/rpt_main.html

@@ -62,13 +62,15 @@
                     <div class="panel">
                         <div class="panel-body">
                             <div class="input-group input-group-sm" role="group">
-                            <span class="input-group-btn">
-                              <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="上一页" onclick="rptControlObj.prePage(this)"><i class="fa fa-chevron-left"></i></button>
-                            </span>
-                                <input class="form-control" id="rpt_page_num" value="" style="width:60px"  data-toggle="tooltip" data-placement="bottom" title="输入页码按回车键,快速跳转">
                                 <span class="input-group-btn">
-                              <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="下一页" onclick="rptControlObj.nextPage(this)"><i class="fa fa-chevron-right"></i></button>
-                            </span>
+                                    <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="首页" onclick="rptControlObj.firstPage(this)"><i class="fa fa-chevron-left"></i><i class="fa fa-chevron-left"></i></button>
+                                    <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="上一页" onclick="rptControlObj.prePage(this)"><i class="fa fa-chevron-left"></i></button>
+                                </span>
+                                <input class="form-control" id="rpt_page_num" value="" onKeydown="rptControlObj.onKeydown(event, this)" style="width:60px"  data-toggle="tooltip" data-placement="bottom" title="输入页码按回车键,快速跳转">
+                                <span class="input-group-btn">
+                                    <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="下一页" onclick="rptControlObj.nextPage(this)"><i class="fa fa-chevron-right"></i></button>
+                                    <button type="button" class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="尾页" onclick="rptControlObj.lastPage(this)"><i class="fa fa-chevron-right"></i><i class="fa fa-chevron-right"></i></button>
+                                </span>
                             </div>
                         </div>
                         <div class="panel-foot text-muted">

+ 33 - 0
web/building_saas/report/js/rpt_main.js

@@ -302,6 +302,10 @@ let rptControlObj = {
             window.location = url;//这里不能使用get方法跳转,否则下载不成功
         }
     },
+    firstPage: function(dom) {
+        let canvas = document.getElementById("rptCanvas");
+        zTreeOprObj.showPage(1, canvas);
+    },
     prePage: function(dom) {
         let canvas = document.getElementById("rptCanvas");
         zTreeOprObj.showPage(zTreeOprObj.currentPage - 1, canvas);
@@ -310,6 +314,35 @@ let rptControlObj = {
         let canvas = document.getElementById("rptCanvas");
         zTreeOprObj.showPage(zTreeOprObj.currentPage + 1, canvas);
     },
+    lastPage: function(dom) {
+        let me = zTreeOprObj;
+        let canvas = document.getElementById("rptCanvas");
+        zTreeOprObj.showPage(me.maxPages, canvas);
+    },
+    onKeydown: function (event, dom) {
+        let me = zTreeOprObj, keyPressed = null;
+        if (window.event) {
+            keyPressed = window.event.keyCode; // IE/Chrome
+        } else {
+            keyPressed = event.which; // Firefox
+        }
+        if (keyPressed == 13) {
+            let pageNum = 1;
+            try {
+                pageNum = parseInt(dom.value);
+            } catch (e) {
+                pageNum = 1;
+            }
+            let canvas = document.getElementById("rptCanvas");
+            if (pageNum < 1) {
+                pageNum = 1;
+            } else if (pageNum > me.maxPages) {
+                pageNum = me.maxPages;
+            }
+            zTreeOprObj.showPage(pageNum, canvas);
+            return false;
+        }
+    },
     changeMargin: function(marginPropStr, marginDom) {
         zTreeOprObj.reportPageCfg.margins[marginPropStr] = marginDom.value;
     },