Browse Source

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

zhongzewei 7 years ago
parent
commit
a2f17d753a

+ 1 - 1
Dockerfile_qa

@@ -4,11 +4,11 @@ WORKDIR /ConstructionOperation
 
 RUN git pull http://192.168.1.12:3000/SmartCost/ConstructionOperation master
 
-
 RUN cnpm install
 
 EXPOSE 6080
 
 ENV NODE_ENV=qa
 
+
 ENTRYPOINT babel-node operation.js

+ 17 - 8
modules/reports/rpt_component/jpc_flow_tab.js

@@ -456,6 +456,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 let grpSeqInfo = (me.group_node_info)?me.group_node_info[segIdx]:null;
                 let grpRecAmt = (grpSeqInfo)?(grpSeqInfo.length*me.group_lines_amt):0;
                 let grpRecAmtEx = 0;
+                let accAutoHeightAmt = 0; //累计的自动行高数量
                 if (followTabEx && followTabEx.group_node_info) {
                     grpRecAmtEx = followTabEx.group_node_info.length * followTabEx.group_lines_amt;
                 }
@@ -505,10 +506,13 @@ JpcFlowTabSrv.prototype.createNew = function(){
                     }
                     if ((ttlSegRecAmtNormal < ttlSegRecAmt) || (followTabEx !== null)) {
                         //有流水拓展,并且是follow mode
-                        if (currentRecAmt + adHocAutoHeightAmt + maxRowRec > ttlSegRecAmtNormal) {
-                            if (currentRecAmt + adHocAutoHeightAmt >= ttlSegRecAmtNormal) {
+                        // if (currentRecAmt + adHocAutoHeightAmt + maxRowRec > ttlSegRecAmtNormal) {
+                        if (currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt + maxRowRec > ttlSegRecAmtNormal) {
+                            // if (currentRecAmt + adHocAutoHeightAmt >= ttlSegRecAmtNormal) {
+                            if (currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt >= ttlSegRecAmtNormal) {
                                 //纯 followTabEx 数据
-                                if (currentRecAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt) {
+                                // if (currentRecAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt) {
+                                if (currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt) {
                                     pageStatus[JV.STATUS_SEGMENT_END] = true;
                                     private_resetBandArea();
                                     let hasAdHocRow = !JpcFlowTabHelper.chkSegEnd(bands, rptTpl, ttlSegRecAmt, currentRecAmt + adHocAutoHeightAmt, maxRowRec, me.isEx);
@@ -525,7 +529,8 @@ JpcFlowTabSrv.prototype.createNew = function(){
                                 }
                             } else {
                                 //混合数据
-                                if (currentRecAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt) {
+                                // if (currentRecAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt) {
+                                if (currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt) {
                                     pageStatus[JV.STATUS_SEGMENT_END] = true;
                                     private_resetBandArea();
                                     let hasAdHocRow = !JpcFlowTabHelper.chkSegEnd(bands, rptTpl, ttlSegRecAmt, currentRecAmt + adHocAutoHeightAmt, maxRowRec, me.isEx);
@@ -536,7 +541,8 @@ JpcFlowTabSrv.prototype.createNew = function(){
                                     }
                                     //add page info
                                     pageStatus[JV.STATUS_SEGMENT_END] = true;
-                                    if (currentRecAmt + adHocAutoHeightAmt >= ttlSegRecAmtNormal) {
+                                    // if (currentRecAmt + adHocAutoHeightAmt >= ttlSegRecAmtNormal) {
+                                    if (currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt >= ttlSegRecAmtNormal) {
                                         //纯 followTabEx 数据啦
                                         private_addPage(segIdx, null, true, false, -1);
                                     } else {
@@ -552,9 +558,11 @@ JpcFlowTabSrv.prototype.createNew = function(){
                         }
                     } else {
                         //普通流水数据情况
-                        if ((currentRecAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt)
+                        // if ((currentRecAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt)
+                        if ((currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt)
                              //&& (adHocAutoHeightAmt < 2 * maxRowRec) ) {
-                             && ((currentRecAmt + adHocAutoHeightAmt + maxRowRec - ttlSegRecAmt) < maxRowRec) ) {
+                             // && ((currentRecAmt + adHocAutoHeightAmt + maxRowRec - ttlSegRecAmt) < maxRowRec) ) {
+                            && ((currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt + maxRowRec - ttlSegRecAmt) < maxRowRec) ) {
                             //备注: 理论上自动行高是没有上限的,有可能正常一页的数据可以拓展到3页及以上,在此极端情况下,必须做一些限制判断,否则会出现缺页情况。
                             pageStatus[JV.STATUS_SEGMENT_END] = true;
                             pageStatus[JV.STATUS_REPORT_END] = true;
@@ -578,10 +586,11 @@ JpcFlowTabSrv.prototype.createNew = function(){
                         }
                     }
                     //检测是否可退出
-                    if ((currentRecAmt + adHocAutoHeightAmt >= ttlSegRecAmt) && (pageIdx % me.multiCols === 0)) {
+                    if ((currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt >= ttlSegRecAmt) && (pageIdx % me.multiCols === 0)) {
                         //备注:这里必须得考虑多栏的情况,否则会造成pageStatus出界的问题
                         break;
                     }
+                    accAutoHeightAmt += adHocAutoHeightAmt;
                     //控制阈值,超过阈值则强制退出,防止死循环
                     threshold++;
                     if (threshold > 1000) {

+ 104 - 15
modules/reports/util/rpt_construct_data_util.js

@@ -32,6 +32,9 @@ class Rpt_Common{
         }
         for (let i = 0; i < maxLen; i++) {
             let value = ((i < val1.length)?val1[i]:val1[minLen - 1]) * ((i < val2.length)?val2[i]:val2[minLen - 1]);
+            if (value === null || value === undefined) {
+                value = '0';
+            }
             if (fixFormat) value = value.toFixed(fixFormat);
             rst.push(value);
         }
@@ -199,7 +202,9 @@ class Rpt_Data_Extractor {
                         filterData(srcData, preHandle, rawDataObj.prjData);
                         break;
                     case JV.PROP_HANDLE_TYPE_SUM:
+                        // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/insertedRawDataData10.jsp");
                         summaryData(srcData, preHandle, rawDataObj.prjData);
+                        // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/insertedRawDataData11.jsp");
                         break;
                     case JV.PROP_HANDLE_TYPE_ADD_DUMMY:
                         addDummyData(srcData, preHandle);
@@ -207,6 +212,9 @@ class Rpt_Data_Extractor {
                     case JV.PROP_HANDLE_TYPE_ADJUST:
                         adjustData(srcData, preHandle);
                         break;
+                    case JV.PROP_HANDLE_TYPE_BILLS_DATA_MOVE:
+                        moveRationData(srcData, rawDataObj);
+                        break;
                     default:
                         break;
                 }
@@ -239,11 +247,15 @@ class Rpt_Data_Extractor {
         assembleFields(tpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS_EX], rptDataObj[JV.DATA_DETAIL_DATA_EX], $PROJECT);
         // console.log(JV.DATA_DETAIL_DATA_EX);
         // console.log(rptDataObj[JV.DATA_DETAIL_DATA_EX]);
+        // fsUtil.writeObjToFile(rptDataObj, "D:/GitHome/ConstructionCost/tmp/insertedOriginalData.jsp");
+        // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/insertedRawDataData.jsp");
+        // fsUtil.writeObjToFile($PROJECT, "D:/GitHome/ConstructionCost/tmp/$PROJECTData.jsp");
         return rptDataObj;
     };
 
 }
 
+//小数位数依据单位来调整(如吨、公斤的精度要求就不同)
 function getUnitDecimal(unitDecimalArr) {
     let rst = {"default_decimal": 2};
     if (unitDecimalArr) {
@@ -314,7 +326,7 @@ function summaryData(sourceData, handleCfg, prjData){
     }
     delete sourceData.data;
     sourceData.data = rstArr;
-    // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sumRst.js");
+    // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sumRst.jsp");
 }
 
 function filterData(sourceData, handleCfg, prjData) {
@@ -452,6 +464,58 @@ function adjustData(sourceData, adjustCfg) {
     sourceData.data = rstArr;
 }
 
+function moveRationData(rationData, rawDataObj) {
+    if (rawDataObj) {
+        // let rationData = getModuleDataByKey(rawDataObj.prjData, projectConst.RATION);
+        let rationGljData = getModuleDataByKey(rawDataObj.prjData, projectConst.RATION_GLJ);
+        let prjGljData = getModuleDataByKey(rawDataObj.prjData, projectConst.PROJECTGLJ);
+        let dummyCode = " ", dummyPRJID = 10101010;
+        for (let rationItem of rationData.data) {
+            if (rationItem.type === 2 || rationItem.type === 3) {
+                //2: 量材(人工/材料/机械/主材/设备) 3:材料(材料/主材/设备)
+                let copyItem = {};
+                copyItem.ID = rationItem.ID;
+                copyItem.projectID = rationItem.projectID;
+                copyItem.GLJID = rationItem.GLJID;
+                copyItem.rationID = rationItem.ID;
+                copyItem.rationItemQuantity = 1;
+                copyItem.quantity = 1;
+                // copyItem.specialType_quantity = rationItem.quantity;
+                copyItem.name = rationItem.name;
+                if (rationItem.code) {
+                    copyItem.code = rationItem.ID + "_" + rationItem.code;
+                } else {
+                    copyItem.code = dummyCode;
+                    dummyCode = dummyCode + " ";
+                }
+                copyItem.original_code = rationItem.original_code;
+                copyItem.unit = rationItem.unit;
+                copyItem.specs = rationItem.specs;
+                copyItem.shortName = rationItem.shortName;
+                copyItem.billsItemID = rationItem.billsItemID;
+                copyItem.type = rationItem.subType;
+                if (rationItem.projectGLJID) {
+                    copyItem.projectGLJID = rationItem.projectGLJID;
+                } else {
+                    //add dummy project GLJ
+                    let dummyPrjItem = {};
+                    copyItem.projectGLJID = dummyPRJID;
+                    dummyPrjItem.id = dummyPRJID;
+                    dummyPRJID++;
+                    dummyPrjItem.unit_price = {};
+                    dummyPrjItem.unit_price.base_price = 0;
+                    dummyPrjItem.unit_price.market_price = (rationItem["marketUnitFee"])?rationItem["marketUnitFee"]:0;
+                    dummyPrjItem.quantity = 0;
+                    dummyPrjItem.is_evaluate = 0;
+                    prjGljData.data.gljList.push(dummyPrjItem);
+                }
+                rationGljData.data.push(copyItem);
+            }
+        }
+        // fsUtil.writeObjToFile(rationGljData.data, "D:/GitHome/ConstructionCost/tmp/afterMoveGLJ.jsp");
+    }
+}
+
 function getDupGrpKeyVals(sourceData, segKeys) {
     let rst = [];
     function pushKeyVal(item) {
@@ -618,7 +682,8 @@ function sortData(sourceData, sortCfg, prjData) {
     }
     switch (sortType) {
         case "tree":
-            rst = treeUtil.buildTreeNodeDirectly(tempRstArr);
+            let addLevel = true;
+            rst = treeUtil.buildTreeNodeDirectly(tempRstArr, addLevel);
             let newTopArr = [];
             if (sortCfg[JV.PROP_FILTER_TOP_BILLS_NODES] && sortCfg[JV.PROP_FILTER_TOP_BILLS_NODES].length > 0) {
                 for (let topItem of rst) {
@@ -638,13 +703,13 @@ function sortData(sourceData, sortCfg, prjData) {
             treeUtil.getFlatArray(newTopArr, destArr);
             delete sourceData.data;
             sourceData.data = destArr;
-            // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sortedAndFlattedRst.js");
+            // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sortedAndFlattedRst.jsp");
             break;
         case "normal":
             private_normal_sort(tempRstArr, sortCfg[JV.PROP_SORT_KEYS]);
             delete sourceData.data;
             sourceData.data = tempRstArr;
-            // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/normalSortedRst.js");
+            // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/normalSortedRst.jsp");
             break;
         case "accord_to_parent":
             let pcKey = sortCfg[JV.PROP_PARENT_CHILD_SORT_KEY];
@@ -709,6 +774,7 @@ function setupFunc(obj, prop, ownRawObj) {
     obj[prop].getPropertyByForeignId = ext_getPropertyByForeignId;
     obj[prop].getArrayItemByKey = ext_getArrayItemByKey;
     obj[prop].getPropertyByFlag = ext_getPropertyByFlag;
+    obj[prop].getBlank = ext_getBlank;
     if (prop === projectConst.CALC_PROGRAM) obj[prop].getCalcProperty = ext_getCalcProperty;
     if (prop === projectConst.FEERATE) obj[prop].getFeeRate = ext_getFeeRate;
 }
@@ -795,17 +861,27 @@ function ext_getPropety(propKey) {
     if (propKey && dtObj) {
         for (let dItem of dtObj.data) {
             let doc = (dItem._doc === null || dItem._doc === undefined)?dItem:dItem._doc;
-            if (doc.hasOwnProperty("property")) {
-                // if (!doc["property"][propKey] && doc[propKey]) {
-                //     rst.push(doc[propKey]);
-                // } else {
-                //     getDeepProperty(propKey, doc["property"], rst);
-                // }
-                rst.push(doc["property"][propKey]);
-            } else if (doc.hasOwnProperty(propKey)) {
-                rst.push(doc[propKey]);
+            if (propKey instanceof Array) {
+                for (let pi = 0; pi < propKey.length; pi++) {
+                    if (doc.hasOwnProperty("property")) {
+                        if (doc["property"].hasOwnProperty(propKey[pi])) {
+                            rst.push(doc["property"][propKey[pi]]);
+                            break;
+                        }
+                    } else if (doc.hasOwnProperty(propKey[pi])) {
+                        rst.push(doc[propKey[pi]]);
+                        break;
+                    }
+                    if (pi === propKey.length - 1) rst.push('');
+                }
             } else {
-                rst.push('');
+                if (doc.hasOwnProperty("property")) {
+                    rst.push(doc["property"][propKey]);
+                } else if (doc.hasOwnProperty(propKey)) {
+                    rst.push(doc[propKey]);
+                } else {
+                    rst.push('');
+                }
             }
         }
     }
@@ -975,6 +1051,19 @@ function ext_getArrayItemByKey(arrayKey, itemKey, itemKeyValue, itemRstKey){
     }
 }
 
+function ext_getBlank(dftVal) {
+    let rst = [], parentObj = this;
+    let dtObj = parentObj["myOwnRawDataObj"];
+    if (dtObj) {
+        for (let i = 0; i < dtObj.data.length; i++) {
+            if (dftVal !== null && dftVal !== undefined) {
+                rst.push(dftVal)
+            } else rst.push('');
+        }
+    }
+    return rst;
+}
+
 function ext_getPropertyByFlag(flagVal, rstKey, dftValIfEmpty) {
     let rst = [], parentObj = this;
     let dtObj = parentObj["myOwnRawDataObj"];
@@ -1016,6 +1105,7 @@ function ext_getPropertyByForeignId(foreignIdVal, adHocIdKey, propKey, dftValIfN
     let rst = [], parentObj = this;
     let IdKey = (adHocIdKey)?adHocIdKey:"ID";
     let dtObj = parentObj["myOwnRawDataObj"];
+    let splitPKey = propKey.split(".");
     if (foreignIdVal !== null && foreignIdVal !== undefined) {
         let isFound = false;
         if (foreignIdVal instanceof Array) {
@@ -1026,7 +1116,6 @@ function ext_getPropertyByForeignId(foreignIdVal, adHocIdKey, propKey, dftValIfN
                 for (let i = 0; i < dataArr.length; i++) {
                     let item = (dataArr[i]._doc)?dataArr[i]._doc:dataArr[i];
                     if (item[IdKey] === idVal) {
-                        let splitPKey = propKey.split(".");
                         if (splitPKey.length > 1) {
                             let rstP = null;
                             for (let i = 0; i < splitPKey.length; i++) {

+ 1 - 0
public/web/rpt_value_define.js

@@ -64,6 +64,7 @@ const JV = {
     PROP_HANDLE_TYPE_SORT: "排序",
     PROP_HANDLE_TYPE_ADD_DUMMY: "增加Dummy数据",
     PROP_HANDLE_TYPE_ADJUST: "数据调整",
+    PROP_HANDLE_TYPE_BILLS_DATA_MOVE: "量材数据转移",
 
     PROP_ADJUST_COLLECTION: "数据调整集",
     PROP_ADJUST_ACTION: "action",

+ 8 - 7
public/web/treeDataHelper.js

@@ -1,12 +1,12 @@
 /**
  * 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;
+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';
 
 let tree_Data_Helper = {
-    buildTreeNodeDirectly: function(data) {
+    buildTreeNodeDirectly: function(data, addLevel) {
         let topArr = [], rst = [], tmpNodes = {}, prefix = "id_";
-        let private_getTopNode = function (idArr) {
+        let private_getStartNode = function (idArr) {
             let tmpNodeRst = null;
             for (let i = 0; i < idArr.length; i++) {
                 if (parseInt(tmpNodes[prefix + idArr[i]][ADHOC_PRE_ID]) === EMPTY_ID_VAL) {
@@ -16,8 +16,8 @@ let tree_Data_Helper = {
             }
             return tmpNodeRst;
         };
-        let private_buildNodeData = function(parentItem, idArr) {
-            let iter = [], nextNode = private_getTopNode(idArr);
+        let private_buildNodeData = function(parentItem, idArr, treeLevel) {
+            let iter = [], nextNode = private_getStartNode(idArr);
             while (nextNode !== null && nextNode !== undefined ) {
                 if (parentItem) {
                     parentItem[CHILDREN_NODE].push(nextNode);
@@ -25,10 +25,11 @@ let tree_Data_Helper = {
                     rst.push(nextNode);
                 }
                 iter.push(nextNode);
+                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]);
+                private_buildNodeData(iter[i], iter[i][SUB_ID], (treeLevel + 1));
             }
         };
 
@@ -51,7 +52,7 @@ let tree_Data_Helper = {
                 tmpNodes[prefix + data[i][P_ID]][SUB_ID].push(data[i][NODE_ID]);
             }
         }
-        private_buildNodeData(null, topArr);
+        private_buildNodeData(null, topArr, 0);
         //try to release and return
         tmpNodes = null;
         topArr.length = 0;

+ 14 - 2
web/maintain/report/js/rpt_tpl_helper.js

@@ -79,14 +79,26 @@ let tplHelper = {
     saveRptTpl: function () {
         let me = this, params = null;
         if (me.reCombineRptTpl()) {
+            $("#id_after_saved_lbl")[0].style.color = "yellow";
+            $("#id_after_saved_lbl")[0].innerHTML = "正在保存...";
             let rptTpl = zTreeOprObj.currentNode.rptTpl;
             params = {};
             params.rptTpl = JSON.stringify(rptTpl);
             CommonAjax.postEx("report_tpl_api/updateRptTpl", params, 20000, true, function(result){
                     if (result) {
-                        alert('update succeeded!')
+                        //alert('update succeeded!')
+                        $("#id_after_saved_lbl")[0].style.color = "green";
+                        $("#id_after_saved_lbl")[0].innerHTML = "保存成功!";
+                        setTimeout(function(){
+                            $("#id_after_saved_lbl")[0].innerHTML = "";
+                        }, 1000);
                     } else {
-                        alert('update failed!')
+                        // alert('update failed!');
+                        $("#id_after_saved_lbl")[0].style.color = "red";
+                        $("#id_after_saved_lbl")[0].innerHTML = "保存失败!";
+                        setTimeout(function(){
+                            $("#id_after_saved_lbl")[0].innerHTML = "";
+                        }, 2000);
                     }
                 }, null, null
             );

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

@@ -83,14 +83,13 @@ let zTreeOprObj = {
         CommonAjax.postEx("report_tpl_api/updateSubLevelOneNode", params, 5000, isAsync, callback, failCallback, null);
     },
     createIniNode: function() {
-        let rst = {
+        return {
             nodeType: RT.NodeType.TEMPLATE,
             refId: -1,
             name: "",
             ID: -1,
             items: null
         };
-        return rst;
     },
     buildRootNodeDoc: function(topNode, excludeNode) {
         let me = this, rst = null;
@@ -112,7 +111,7 @@ let zTreeOprObj = {
         let me = this, rst = null;
         if (subNode) {
             let isReleased = false;
-            if (subNode.nodeType == RT.NodeType.TEMPLATE) {
+            if (subNode.nodeType === RT.NodeType.TEMPLATE) {
                 isReleased = subNode.checked;
                 // if (subNode.hasOwnProperty("released")) {
                 //     isReleased = subNode.released;
@@ -137,7 +136,7 @@ let zTreeOprObj = {
             for (let item of items) {
                 if (item !== excludeNode) {
                     let isReleased = false;
-                    if (item.nodeType == RT.NodeType.TEMPLATE) {
+                    if (item.nodeType === RT.NodeType.TEMPLATE) {
                         isReleased = item.checked;
                         // if (item.hasOwnProperty("released")) {
                         //     isReleased = item.released;
@@ -159,7 +158,7 @@ let zTreeOprObj = {
 
     addHoverDom: function(treeId, treeNode) {
         let me = zTreeOprObj, sObj = $("#" + treeNode.tId + "_span");
-        if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length > 0 || treeNode.nodeType == RT.NodeType.TEMPLATE) return;
+        if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length > 0 || treeNode.nodeType === RT.NodeType.TEMPLATE) return;
         let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增子目录' onfocus='this.blur();'></span>";
         sObj.after(addStr);
         let btn = $("#addBtn_"+treeNode.tId);

+ 50 - 33
web/maintain/report/js/rpt_tpl_pre_handle.js

@@ -9,46 +9,47 @@ 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: "清单_项目编码", Title: "", Key: "code", Order: "ascend"},
-    {Name: "清单_项目名称", Title: "", Key: "name", Order: "ascend"},
-    {Name: "清单_项目特征", Title: "", Key: "itemCharacterText", Order: "ascend"},
-    {Name: "清单_计量单位", Title: "", Key: "unit", Order: "ascend"},
-    {Name: "清单_工程量", Title: "", Key: "quantity", Order: "ascend"},
-    {Name: "清单_综合单价", Title: "", Key: "unitFee", Order: "ascend"},
-    {Name: "清单_综合合价", Title: "", Key: "totalFee", Order: "ascend"},
-    {Name: "清单_暂估价", Title: "", Key: "tenderUnitFee", Order: "ascend"}
+    {Name: "清单_层次", Title: "", Key: "treeLevel", Order: "ascend"}
+    // {Name: "清单_项目编码", Title: "", Key: "code", Order: "ascend"},
+    // {Name: "清单_项目名称", Title: "", Key: "name", Order: "ascend"},
+    // {Name: "清单_项目特征", Title: "", Key: "itemCharacterText", Order: "ascend"},
+    // {Name: "清单_计量单位", Title: "", Key: "unit", Order: "ascend"},
+    // {Name: "清单_工程量", Title: "", Key: "quantity", Order: "ascend"},
+    // {Name: "清单_综合单价", Title: "", Key: "unitFee", Order: "ascend"},
+    // {Name: "清单_综合合价", Title: "", Key: "totalFee", Order: "ascend"},
+    // {Name: "清单_暂估价", Title: "", Key: "tenderUnitFee", Order: "ascend"}
 ];
 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: "定额_编号", Title: "", Key: "code", Order: "ascend"},
-    {Name: "定额_项目名称", Title: "", Key: "caption", Order: "ascend"},
-    {Name: "定额_单位", Title: "", Key: "unit", Order: "ascend"},
-    {Name: "定额_数量", Title: "", Key: "quantity", Order: "ascend"},
-    {Name: "定额_人工费", Title: "", Key: "labour", Order: "ascend"},
-    {Name: "定额_材料费", Title: "", Key: "material", Order: "ascend"},
-    {Name: "定额_机械费", Title: "", Key: "machine", Order: "ascend"},
-    {Name: "定额_机上人工费", Title: "", Key: "machineLabour", Order: "ascend"},
-    {Name: "定额_人工费调整", Title: "", Key: "adjustLabour", Order: "ascend"},
-    {Name: "定额_材料费调整", Title: "", Key: "'adjustMaterial'", Order: "ascend"},
-    {Name: "定额_机械费调整", Title: "", Key: "adjustMachine", Order: "ascend"},
-    {Name: "定额_机上人工费调整", Title: "", Key: "adjustMachineLabour", Order: "ascend"},
-    {Name: "定额_人工价差", Title: "", Key: "labourDiff", Order: "ascend"},
-    {Name: "定额_材料价差", Title: "", Key: "materialDiff", Order: "ascend"},
-    {Name: "定额_机械价差", Title: "", Key: "machineDiff", Order: "ascend"},
-    {Name: "定额_风险费用", Title: "", Key: "risk", Order: "ascend"}
+    {Name: "定额_所属项目ID", Title: "", Key: "projectID", Order: "ascend"}
+    // {Name: "定额_编号", Title: "", Key: "code", Order: "ascend"},
+    // {Name: "定额_项目名称", Title: "", Key: "caption", Order: "ascend"},
+    // {Name: "定额_单位", Title: "", Key: "unit", Order: "ascend"},
+    // {Name: "定额_数量", Title: "", Key: "quantity", Order: "ascend"},
+    // {Name: "定额_人工费", Title: "", Key: "labour", Order: "ascend"},
+    // {Name: "定额_材料费", Title: "", Key: "material", Order: "ascend"},
+    // {Name: "定额_机械费", Title: "", Key: "machine", Order: "ascend"},
+    // {Name: "定额_机上人工费", Title: "", Key: "machineLabour", Order: "ascend"},
+    // {Name: "定额_人工费调整", Title: "", Key: "adjustLabour", Order: "ascend"},
+    // {Name: "定额_材料费调整", Title: "", Key: "'adjustMaterial'", Order: "ascend"},
+    // {Name: "定额_机械费调整", Title: "", Key: "adjustMachine", Order: "ascend"},
+    // {Name: "定额_机上人工费调整", Title: "", Key: "adjustMachineLabour", Order: "ascend"},
+    // {Name: "定额_人工价差", Title: "", Key: "labourDiff", Order: "ascend"},
+    // {Name: "定额_材料价差", Title: "", Key: "materialDiff", Order: "ascend"},
+    // {Name: "定额_机械价差", Title: "", Key: "machineDiff", Order: "ascend"},
+    // {Name: "定额_风险费用", Title: "", Key: "risk", Order: "ascend"}
     // {Name: "定额_管理费率", Title: "", Key: ""}
 ];
 const exposed_prj_glj_properties = [
     {Name: "工料机_ID", Title: "", Key: "ID"},
     {Name: "工料机_所属定额ID", Title: "", Key: "rationID", Order: "ascend"},
     {Name: "工料机_所属清单ID", Title: "", Key: "billsItemID", Order: "ascend"},
-    {Name: "工料机_所属工程ID", Title: "", Key: "projectID", Order: "ascend"},
-    {Name: "工料机_代码", Title: "", Key: "code", Order: "ascend"},
-    {Name: "工料机_名称", Title: "", Key: "name", Order: "ascend"},
-    {Name: "工料机_单位", Title: "", Key: "unit", Order: "ascend"},
-    {Name: "工料机_数量", Title: "", Key: "quantity", Order: "ascend"}
+    {Name: "工料机_所属工程ID", Title: "", Key: "projectID", Order: "ascend"}
+    // {Name: "工料机_代码", Title: "", Key: "code", Order: "ascend"},
+    // {Name: "工料机_名称", Title: "", Key: "name", Order: "ascend"},
+    // {Name: "工料机_单位", Title: "", Key: "unit", Order: "ascend"},
+    // {Name: "工料机_数量", Title: "", Key: "quantity", Order: "ascend"}
 ];
 const exposed_properties_arr = [exposed_bills_properties, exposed_ration_properties, exposed_prj_glj_properties];
 const fixed_top_bills_nodes = [
@@ -116,12 +117,13 @@ let preHandleObj = {
         let me = this, types = [];
         types.push({Name: JV.PROP_HANDLE_TYPE_SORT, Title: ""});
         types.push({Name: JV.PROP_HANDLE_TYPE_FILTER, Title: ""});
+        types.push({Name: JV.PROP_HANDLE_TYPE_BILLS_DATA_MOVE, Title: ""});
         types.push({Name: JV.PROP_HANDLE_TYPE_SUM, Title: ""});
         types.push({Name: JV.PROP_HANDLE_TYPE_ADJUST, Title: ""});
         types.push({Name: JV.PROP_HANDLE_TYPE_ADD_DUMMY, Title: ""});
         // types.push({Name: "纯手工填写", Title: ""});
         me.typeTreeObj = $.fn.zTree.init($("#pre_handle_type_reversed"), preHandleTypeSetting, types);
-        me.setDisabledBandSelect([0,1,2,3,4]);
+        me.setDisabledBandSelect([0,1,2,3,4,5]);
         me.build_handle_data_selection();
     },
     setDisabledBandSelect: function(disabledIdxArr) {
@@ -149,6 +151,9 @@ let preHandleObj = {
             case JV.PROP_HANDLE_TYPE_FILTER:
                 item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "过滤键值集": []};
                 break;
+            case JV.PROP_HANDLE_TYPE_BILLS_DATA_MOVE:
+                item = {Name: "预处理环节", Title: "", "映射数据对象": "ration", "预处理类型": preHandleType};
+                break;
             case JV.PROP_HANDLE_TYPE_SUM:
                 item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "分组键值集": [], "统计键值集":[]};
                 break;
@@ -179,6 +184,8 @@ let preHandleObj = {
             case JV.PROP_HANDLE_TYPE_FILTER:
                 item[JV.PROP_FILTER_KEYS] = [];
                 break;
+            case JV.PROP_HANDLE_TYPE_BILLS_DATA_MOVE:
+                break;
             case JV.PROP_HANDLE_TYPE_SUM:
                 item[JV.PROP_SUM_GROUP_KEYS] = [];
                 item[JV.PROP_SUM_SUM_KEYS] = [];
@@ -274,7 +281,7 @@ let preHandleObj = {
         //点击预处理环节 节点
         let me = preHandleObj;
         me.currentNode = treeNode;
-        me.setDisabledBandSelect([2,3,4]);
+        me.setDisabledBandSelect([3,4,5]);
         // me.setDisabledBandSelect([]);
         me.refreshByNode(treeNode);
     },
@@ -616,7 +623,7 @@ let preHandleFilterObj = {
                         $("#diySelect_" + keyNode.tId)[0].selectedIndex = condition_types.indexOf(filterItem[JV.PROP_FILTER_CONDITION]);
                         //条件值
                         keyNode[JV.PROP_FILTER_COMPARE_VAL] = filterItem[JV.PROP_FILTER_COMPARE_VAL];
-                        $("#diyInput_" + keyNode.tId)[0].selectedIndex = filterItem[JV.PROP_FILTER_COMPARE_VAL];
+                        $("#diyInput_" + keyNode.tId)[0].value = filterItem[JV.PROP_FILTER_COMPARE_VAL];
                         //其他关联业务数据对象
                         if (filterItem[JV.PROP_FILTER_COMPARE_OBJ]) {
                             let cmpObjDom = $("#diyDataSelect_" + keyNode.tId)[0];
@@ -694,6 +701,10 @@ let preHandleFilterObj = {
         if (sel) {
             sel.bind("change", me.filterConditionChange);
         }
+        sel = $("#diyInput_" + treeNode.tId);
+        if (sel) {
+            sel.bind("change", me.filterCompareValChange);
+        }
         sel = $("#diyDataSelect_" + treeNode.tId);
         if (sel) {
             sel.bind("change", me.filterCompareObjChange);
@@ -703,6 +714,12 @@ let preHandleFilterObj = {
             sel.bind("change", me.filterCompareObjKeyChange);
         }
     },
+    filterCompareValChange(event) {
+        let me = preHandleFilterObj, sel = event.currentTarget, tId = sel.id.slice(9);
+        let node = me.treeObj.getNodeByTId(tId);
+        node[JV.PROP_FILTER_COMPARE_VAL] = sel.value;
+        me.resetFilter();
+    },
     filterConditionChange: function(event) {
         let me = preHandleFilterObj, sel = event.currentTarget, tId = sel.id.slice(10);
         let node = me.treeObj.getNodeByTId(tId);

+ 1 - 0
web/maintain/report/rpt_tpl_preview.html

@@ -3,6 +3,7 @@
         <div class="sub-button p-2">
             <button class="btn btn-primary" onclick="tplHelper.saveRptTpl()">保存</button>
             <button class="btn btn-primary" onclick="preview_util.getPreviewPage($('#tplCanvas')[0], zTreeOprObj.getRefTpl()) ">预览</button>
+            <label id="id_after_saved_lbl" style="color:yellowgreen;font-weight:bold">...</label>
         </div>
         <div class="main-data">
             <canvas id="tplCanvas" height="800" width="900"></canvas>