瀏覽代碼

强制修改综合单价。

chenshilong 3 年之前
父節點
當前提交
0a601c1098

+ 21 - 29
web/building_saas/main/js/models/calc_program.js

@@ -54,13 +54,9 @@ let calcTools = {
   isBill_BX: function (treeNode) {
     return this.isBill(treeNode) && treeNode.data.type == billType.BX;
   },
-  isNullBill: function (treeNode) {
-    return (
-      this.isLeafBill(treeNode) &&
-      treeNode.children.length === 0 &&
-      !treeNode.data.calcBase &&
-      !treeNode.data.lockUnitPrice
-    );
+  // 用户手工输入单价或金额的清单。叶子清单(且无定额无公式 或 有锁定单价)
+  isCustomBill: function (treeNode) {
+    return this.isLeafBill(treeNode) && ((treeNode.children.length === 0 && !treeNode.data.calcBase) || treeNode.data.lockUnitPrice);
   },
   isInvalidNode: function (treeNode) {
     // 无效的、影响正常计算的行(无意义的空行、没有金额的行等)
@@ -978,8 +974,8 @@ let calcTools = {
   getCalcType: function (treeNode) {
     if (this.isRationCategory(treeNode)) {
       return treeNodeCalcType.ctRationCalcProgram;
-    } else if (this.isNullBill(treeNode)) {
-      return treeNodeCalcType.ctNull;
+    } else if (this.isCustomBill(treeNode)) {
+      return treeNodeCalcType.ctCustom;
     } else if (this.isLeafBill(treeNode)) {
       if (treeNode.data.lockUnitPrice)  // 叶子清单锁定单价(有定额或无定额)
         return treeNodeCalcType.ctLockUnitPrice
@@ -2137,8 +2133,8 @@ class CalcProgram {
     // 叶子清单:公式计算
     else if (treeNode.calcType == treeNodeCalcType.ctCalcBaseValue)
       me.innerCalcBillExpr(treeNode)
-    // 叶子清单:手工修改单价或金额(无定额、无公式计算,什么都没有时)
-    else if (treeNode.calcType == treeNodeCalcType.ctNull)
+    // 叶子清单:手工修改单价或金额。
+    else if (treeNode.calcType == treeNodeCalcType.ctCustom)
       me.innerCalcBillCustom(treeNode);
     // 定额:计算程序
     else me.innerCalcRation(treeNode, tenderType);
@@ -2151,7 +2147,9 @@ class CalcProgram {
       changedArr.push(treeNode);
   }
 
-  // 清单部分抽取出来,供分摊清单公用。commonCalcType:1 叶子清单汇总定额的费用类别; 2 父清单汇总子清单的费用类别。3: 分摊:叶子清单汇总定额的费用类别。
+  // 清单部分抽取出来,供分摊清单公用。
+    // commonCalcType:1 叶子清单汇总定额的费用类别; 2 父清单汇总子清单的费用类别。
+    // 3: 分摊:叶子清单汇总定额的费用类别。4: 清单单价锁定。
   innerCalcBill(treeNode, commonCalcType, tender = tenderTypes.ttCalc) {
     let me = this;
     treeNode.data.programID = null;
@@ -2355,22 +2353,17 @@ class CalcProgram {
     me.deleteUselessFees(treeNode, ["rationCommon"]);
 
     // 2017-09-27 需求改了,除了第 1 、 2.2部分以外,都可以手工修改综合单价、综合合价并参与计算
-    // 在没有公式的情况下可以手工修改综合单价并参与计算
-    if (calcTools.canCalcToTalFeeByOwn(treeNode)) {
-      if (treeNode.data.feesIndex && treeNode.data.feesIndex.common) {
-        let ftObj = { fieldName: "common" };
-        let nQ = calcTools.uiNodeQty(treeNode);
-        let nTQ = calcTools.uiNodeTenderQty(treeNode);
-        ftObj.unitFee = parseFloatPlus(treeNode.data.feesIndex.common.unitFee);
-        ftObj.totalFee = (ftObj.unitFee * nQ).toDecimal(
-          decimalObj.bills.totalPrice
-        );
-        ftObj.tenderUnitFee = ftObj.unitFee;
-        ftObj.tenderTotalFee = (ftObj.tenderUnitFee * nTQ).toDecimal(
-          decimalObj.bills.totalPrice
-        );
-        calcTools.checkFeeField(treeNode, ftObj);
-      }
+    // 2021-09-14 增加强制修改综合单价功能,所以“除了第 1 、 2.2部分以外,...” 这里的业务取消。
+    // if (calcTools.canCalcToTalFeeByOwn(treeNode)) {
+    if (treeNode.data.feesIndex && treeNode.data.feesIndex.common) {
+      let ftObj = { fieldName: "common" };
+      let nQ = calcTools.uiNodeQty(treeNode);
+      let nTQ = calcTools.uiNodeTenderQty(treeNode);
+      ftObj.unitFee = parseFloatPlus(treeNode.data.feesIndex.common.unitFee); // 以单价为基础数据。金额从单价计算获得。
+      ftObj.totalFee = (ftObj.unitFee * nQ).toDecimal(decimalObj.bills.totalPrice);
+      ftObj.tenderUnitFee = ftObj.unitFee;
+      ftObj.tenderTotalFee = (ftObj.tenderUnitFee * nTQ).toDecimal(decimalObj.bills.totalPrice);
+      calcTools.checkFeeField(treeNode, ftObj);
     } else {
       if (treeNode.data.fees && treeNode.data.fees.length > 0) {
         treeNode.data.fees = null;
@@ -2378,7 +2371,6 @@ class CalcProgram {
         treeNode.changed = true;
       }
     }
-
     treeNode.data.calcTemplate = { calcItems: [] };
   }
 

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

@@ -84,7 +84,7 @@ const treeNodeCalcType = {
     ctGatherRationsFees: 3,     // 汇总定额的各个费
     ctGatherBillsFees: 4,       // 汇总清单的各个费
     ctCalcBaseValue: 5,
-    ctNull: 6,
+    ctCustom: 6,
     ctLockUnitPrice: 7         // 锁定单价
 };
 

+ 14 - 8
web/building_saas/main/js/views/main_tree_col.js

@@ -122,6 +122,11 @@ let MainTreeCol = {
             // 2018-11-15 zhang
             let Bills =projectObj.project.Bills;
             if(node.sourceType == ModuleNames.bills){//针对清单、分项部分
+                // 强制修改综合单价模式:可修改单价
+                if (projectObj.project.property?.tenderSetting?.calcPriceOption == 'priceBase_unitPrice'){
+                    if (calcTools.isLeafBill(node)) return false;
+                }
+
                 // 属于标题清单,只读
                 if (calcTools.isTitleBills(node)) {
                     return true;
@@ -130,6 +135,7 @@ let MainTreeCol = {
                 if (Bills.cantCalcToTalFeeByOwn(node)) {
                     return true;
                 }
+
                 // 不属于分部分项、施工技术措施项目的部分,如果不是叶子清单,或有基数计算/定额/量价/人材机 只读
                 if(!calcTools.isLeafBill(node)||calcTools.isCalcBaseBill(node)||node.children.length > 0)return true;
             }
@@ -270,7 +276,7 @@ let MainTreeCol = {
             if(MainTreeCol.readOnly.glj(node)|| (node.sourceType === projectObj.project.Ration.getSourceType()&&node.data.type===rationType.gljRation)){//是主材或者设备、或者是工料机类型的定额
                 return true;
             }
-            
+
             //2020-11-30 为了多行复制时,遇到只读的大项费,spreadjs 粘贴事件能触发,放开这里的只读限制
            /*  if(Bills.isTopThreeNode(node)){//是大项1、2、3项的编号设置为只读
                 return true;
@@ -333,7 +339,7 @@ let MainTreeCol = {
             const isOverHeight = OVER_HEIGHT.isOverHeight(node);
             const notFBFXAndMeasure = !projectObj.project.Bills.isFBFX(node)
                 && !projectObj.project.Bills.isMeasure(node);
-            const hasCalcBase = !!node.data.calcBase;    
+            const hasCalcBase = !!node.data.calcBase;
             return isOverHeight || notFBFXAndMeasure || hasCalcBase;
         }
     },
@@ -344,11 +350,11 @@ let MainTreeCol = {
              if(node.sourceType == ModuleNames.bills){//清单悬浮提示
                 //显示工程量计算规则
                 if(node.data.ruleText){
-                    tips += `<label class="font_blue">工程量计算规则:<br>${node.data.ruleText.replace(/\n/g,"<br>")}</label>`; 
+                    tips += `<label class="font_blue">工程量计算规则:<br>${node.data.ruleText.replace(/\n/g,"<br>")}</label>`;
                 }
                 if(projectObj.ifItemCharHiden(setting)){//项目特征列隐藏的时候
                     tips += node.data.itemCharacterText?`<br>${node.data.itemCharacterText}`:'';
-                } 
+                }
              }
             if(node.sourceType == ModuleNames.ration && node.data.type == rationType.ration){//定额类型时,显示人材机,工作内容等
                 //这里的人材机需要进行过滤,在初始化时组装会影响性能,应实时显示
@@ -443,7 +449,7 @@ let MainTreeCol = {
         },
         mainBills:function (node) {
             if(MainTreeCol.mainBillsEnable(node)) {
-                return projectObj.project.projectInfo.property.lockBills 
+                return projectObj.project.projectInfo.property.lockBills
                     ? sheetCommonObj.getReadOnlyCheckBox()
                     : sheetCommonObj.getCheckBox(true)
             };
@@ -630,10 +636,10 @@ let MainTreeCol = {
         let isFBNode = node.sourceType == ModuleNames.bills&&node.data.type == billType.FB;
         if(isFBNode){
            let CELL =sheetCommonObj.getCusButtonCellType(()=>{
-            $("#selectFBFor").val("replace");   
+            $("#selectFBFor").val("replace");
             $('#selectFBDiv').modal('show');
             })
-            cell.cellType(CELL); 
+            cell.cellType(CELL);
         }
     }
 };
@@ -759,7 +765,7 @@ let colSettingObj = {
         for(let i = 0; i < cols.length; i++){
             let colSetting = cols[i];
             if(colSetting.data.field === field){
-                
+
                 return i;
             }
         }