zhangweicheng 7 lat temu
rodzic
commit
3dbf782279

+ 11 - 0
public/web/common_util.js

@@ -35,3 +35,14 @@ function isSubArr(sub, arr){
     }
     return true;
 };
+
+function seqString(num,length){
+    var numstr = num.toString();
+    var l=numstr.length;
+    if (numstr.length>=length) {return numstr;}
+
+    for(var  i = 0 ;i<length - l;i++){
+        numstr = "0" + numstr;
+    }
+    return numstr;
+}

+ 1 - 1
web/building_saas/main/html/main.html

@@ -1139,7 +1139,7 @@
                 </div>
                 <div class="modal-footer">
                     <button class="btn btn-primary" id="select_position_confirm">确定</button>
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
                 </div>
             </div>
         </div>

+ 30 - 15
web/building_saas/main/js/models/installation_fee.js

@@ -276,14 +276,15 @@ var installation_fee = {
                 userID: userID
             };
             let oldITypeRations = _.cloneDeep(project.Ration.getAllInstallTypeRation())//取所有旧的安装增加费定额-没有用的要删除
-            let oldRationMap = {}, deleteRationNodes = [], deleteBillsNodes = [];
+            let oldRationMap = {}, deleteRationNodes = [], deleteBillsNodes = [],reCalBillIDS = [];
             let isChange = newBills.length>0;//记录数据是否发生了改变;
-            for(let o of oldITypeRations){//过滤出要删除的定额
+            for(let o of oldITypeRations){//过滤出要删除的定额 - 同时对应的父项也要重新更新计算
                 if(rationKeyMap[o.installationKey]==undefined){
                     updateData.ration.delete.push(o);
                     let d_node =  project.mainTree.getNodeByID(o.ID);
                     if(d_node){
                         deleteRationNodes.push(d_node);
+                        reCalBillIDS.push(o.billsItemID);
                         isChange = true;
                     }
                 }
@@ -302,8 +303,8 @@ var installation_fee = {
                 }
             }
 
-            for(let tem_bx of BXs){//过滤要删除的补项
-                if(usedBXMap[tem_bx.ParentID]==undefined){
+            for(let tem_bx of BXs){//过滤要删除的 自动生成的补项
+                if(tem_bx.code.startsWith('BAZF')&& usedBXMap[tem_bx.ParentID]==undefined){
                     updateData.bills.delete.push(tem_bx);
                     let b_node =  project.mainTree.getNodeByID(tem_bx.ID);
                     if(b_node){
@@ -331,9 +332,16 @@ var installation_fee = {
                         calRations =  addNewNodes(updateData);
                     });
                     for(let u of updateData.ration.update){
-                        let unode =   projectObj.project.mainTree.findNode(u.ID);
+                        let unode =  projectObj.project.mainTree.findNode(u.ID);
                          unode?calRations.push(unode):'';
                     }
+                    if(reCalBillIDS.length > 0){
+                        reCalBillIDS = _.uniq(reCalBillIDS);
+                        for(let bID of reCalBillIDS){
+                            let bnode =  projectObj.project.mainTree.findNode(bID);
+                            bnode?calRations.push(bnode):''; //现在计算程序支持同时传入清单和定额了,所以能放一起
+                        }
+                    }
                     setTreeSelection(selectedNode);
                     let endTime =  +new Date();
                     console.log(`计算安装增加费时间——${endTime - startTime}`);
@@ -493,13 +501,13 @@ var installation_fee = {
                             projectID: parseInt(project.ID()),
                             ParentID:billID_key,
                             NextSiblingID:-1,
-                            code : 'BAZF',
                             name:'安装增加费',
                             unit:'元',
                             quantity:'1',
                             type:billType.BX
                         };
                         BXNodeData.ID =  uuid.v1();
+                        BXNodeData.code = getBXCode("BAZF",usedBXMap);
                         FBMap[billID_key] = BXNodeData;
                         newBills.push(BXNodeData);
                     }
@@ -519,6 +527,22 @@ var installation_fee = {
                 }
             }
 
+            function getBXCode(code,BXMap) {//自动生成物补项编号加001、002等后缀
+                let codes = [];
+                let i = 1;
+                let newCode = '';
+                for(let key in BXMap){
+                    codes.push(BXMap[key].code);
+                }
+                while (true){
+                    newCode = code + seqString(i,3);
+                    if(codes.indexOf(newCode)==-1){
+                        break;
+                    }
+                    i++;
+                }
+               return newCode;
+            }
 
             function allInOne(item,rule,rations,newBills,pre_key,rationKeyMap) {//统一设置
                 let billData = getBillNodeData(item,rule,newBills);//取对应的清单或生成一个新的清单数据
@@ -562,8 +586,6 @@ var installation_fee = {
                 newRationData = setNewRationProperty(newRationData,nextID,rule);
                 return newRationData;
             }
-
-
             function getBillNodeData(item,rule,newBills) {
                 let billData = null;
                 let billID = null;
@@ -590,7 +612,6 @@ var installation_fee = {
             function getBillsByID(billID){
                 return _.find(allBillsDatas,{"ID":billID});
             }
-
             function getBillsByCode(code){
                 return _.find(allBillsDatas, function(b) {
                     if(b.code&&b.code.indexOf(code)!=-1){
@@ -600,8 +621,6 @@ var installation_fee = {
                     }
                 })
             }
-
-
             function calcQuantity(rule,ration) {//计算单条定额的三个消耗量
                 let gljDecimal = getDecimal('glj.quantity');
                 let labourQuantity = 0, materialQuantity = 0, machineQuantity = 0;
@@ -718,10 +737,6 @@ var installation_fee = {
             });
         };
 
-
-
-
-
         installation_fee.prototype.resetToDefault = function (callback) {
             let me = this;
             let installFees = [];

+ 1 - 1
web/building_saas/main/js/models/project_glj.js

@@ -838,7 +838,7 @@ ProjectGLJ.prototype.isEstimateType = function(type){
 
 ProjectGLJ.prototype.getShortNameByID = function (ID) {
     let gljTypeMap = this.datas.constData.gljTypeMap;
-    return gljTypeMap["typeId" + ID].shortName;
+    return gljTypeMap["typeId" + ID]?gljTypeMap["typeId" + ID].shortName:'';
 };
 
 ProjectGLJ.prototype.calcQuantity  = function (init=false){

+ 2 - 2
web/building_saas/main/js/models/quantity_detail.js

@@ -626,7 +626,6 @@ var quantity_detail = {
             }else {
                 me.updateRationQuantity(value,node,null,editingText);
             }
-            gljOprObj.refreshView();
         };
 
 
@@ -698,6 +697,7 @@ var quantity_detail = {
             if(gljNodes.length>0){
                 projectObj.mainController.refreshTreeNode(gljNodes);
             }
+            gljOprObj.refreshView();
         };
         quantity_detail.prototype.updateRationQuantity=function(value,node,quantityEXP,editingText){
             node.data.quantityEXP = quantityEXP?quantityEXP:editingText;
@@ -723,7 +723,7 @@ var quantity_detail = {
                 }
             });
             projectObj.mainController.refreshTreeNode(node.children);//刷新子工料机总消耗量
-            gljOprObj.showRationGLJSheetData();
+            gljOprObj.refreshView();
         };
         quantity_detail.prototype.getDecimal=function (node) {
             var decimal = 3;

+ 1 - 0
web/building_saas/main/js/views/glj_view.js

@@ -730,6 +730,7 @@ var gljOprObj = {
         var projectGljs = projectGLJData.gljList;
         var mixRatioMap = projectGLJData.mixRatioMap;
         if (ration_gljs && ration_gljs.length > 0 && projectGljs && projectGljs.length > 0) {
+
             for (var i = 0; i < ration_gljs.length; i++) {
                 var glj = _.find(projectGljs, {'id': ration_gljs[i].projectGLJID});
                 if (glj) {

+ 13 - 5
web/building_saas/main/js/views/installation_fee_view.js

@@ -331,6 +331,8 @@ let installationFeeObj={
         if(this.feeItemSpread == null){
             this.initInstallationFeeSpread();
         }else {
+            this.feeItemSpread.refresh();
+            this.feeDetailSpread.refresh();
             let sel_f = this.feeItemSheet.getSelections()[0];
             let sel_d = this.feeDetailSheet.getSelections()[0];
             this.showFeeItemData();
@@ -648,11 +650,15 @@ let installationFeeObj={
                recode:me.positionData[args.row]
            }
         }else {
-            if(args.row==me.positionSelectedObject.row){//如果是在已选中的记录中再点一次选中复框,则去掉选中记录
-                me.positionSelectedObject = null;
+            if(me.positionData[args.row].ID == me.positionSelectedObject.recode.ID){//行相同的时候有两种情况,一种是没有做过滤的情况,行相等就说明是要去掉选中记录。
+                // 另外一种有可能是过滤后刚好和初始的选中位置显示的时候相等,这里其实是不同的记录,所以行相等的时候用ID判断是不是来的记录才准确
+                    me.positionSelectedObject = null;  //如果是在已选中的记录中再点一次选中复框,则去掉选中记录
             }else {//切换选中记录
-                //去掉之前选中位置的打勾
-                args.sheet.getCell(me.positionSelectedObject.row, me.positionSelectedObject.col).value(0);
+                //去掉之前选中位置的打勾 - 要先查找原先的位置,因为过滤功能的原因,有可能选中的与当前的行数已经不一样了
+                let oldIndex = _.findIndex(me.positionData,{'ID':me.positionSelectedObject.recode.ID});
+                if(oldIndex != -1){
+                    args.sheet.getCell(oldIndex, me.positionSelectedObject.col).value(0);
+                }
                 me.positionSelectedObject ={
                     row : args.row,
                     col: args.col,
@@ -1364,7 +1370,9 @@ $(function () {
     });
     $('#calc_position').on('shown.bs.modal',function () {
         installationFeeObj.positionSelectedObject = null;
-        if (!installationFeeObj.positionSpread) {
+        if (installationFeeObj.positionSpread) {
+            installationFeeObj.positionSpread.refresh();
+        }else {
             installationFeeObj.initPositionSpread();
         }
         installationFeeObj.loadSelectionNodes();