Sfoglia il codice sorgente

从建筑同步调价功能。

chenshilong 5 anni fa
parent
commit
1968f20359

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

@@ -66,7 +66,7 @@
                 <li class="nav-item"><a data-toggle="tab" href="#fee_rates" id="tab_fee_rate" role="tab" >费率</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#divide" id="tab_divide" role="tab" style="display: none;">分摊</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#calc_program_manage" id="tab_calc_program_manage" role="tab" style="display:none">总计算程序</a></li>
-               <!-- <li class="nav-item"><a data-toggle="tab" href="#tender_price" id="tab_tender_price" role="tab">调价</a></li>-->
+                <li class="nav-item"><a data-toggle="tab" href="#tender_price" id="tab_tender_price" role="tab">调价</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#reports" role="tab" id="tab_report" onclick="rptTplObj.iniPage();">报表</a></li>
             </ul>
         </div>

File diff suppressed because it is too large
+ 684 - 406
web/building_saas/main/js/models/calc_program.js


+ 1 - 1
web/building_saas/main/js/views/calc_program_view.js

@@ -41,7 +41,7 @@ let calcProgramObj = {
 
     // 刷新显示当前选中树结点的计算程序。
     // treeNode:末指定时默认是造价书当前选中树结点
-    // refreshKind: 1 仅刷新 2 计算并刷新但无需保存 3 计算保存并刷新
+    // refreshKind: 1 仅刷新   2 计算+刷新     3 计算+保存+刷新      4 仅计算
     refreshCalcProgram: function (treeNode, refreshKind = 1) {
         var me = this;
         me.treeNode = treeNode;

+ 62 - 19
web/building_saas/main/js/views/glj_col.js

@@ -14,11 +14,13 @@ let gljCol = {
             {headerName: "消耗量", headerWidth: 65, dataCode: "quantity", dataType: "Number", hAlign: "right", decimalField: "glj.quantity"},
             {headerName: "定额价", headerWidth: 65, dataCode: "basePrice", dataType: "Number", hAlign: "right"},//, decimalField: "glj.unitPrice"
             {headerName: "定额消耗", headerWidth: 65, dataCode: "rationItemQuantity", dataType: "Number", hAlign: "right", decimalField: "glj.quantity"},   // dataType: "Number", formatter: "0.00"
-            {headerName: "总消耗量", headerWidth: 80, dataCode: "totalQuantity", dataType: "Number", hAlign: "right", decimalField: "glj.quantity"}
-            //{headerName: "暂估", headerWidth: 45, dataCode: "isEstimate", dataType: "String", hAlign: "center", vAlign: "center", cellType: "checkBox"}
+            {headerName: "总消耗量", headerWidth: 80, dataCode: "totalQuantity", dataType: "Number", hAlign: "right", decimalField: "glj.quantity"},
+            // {headerName: "暂估", headerWidth: 45, dataCode: "isEstimate", dataType: "String", hAlign: "center", vAlign: "center", cellType: "checkBox"},
+            {headerName: "调后市场价", headerWidth: 80, dataCode: "tenderPrice", dataType: "Number", hAlign: "right", visible: false},
+            {headerName: "调后消耗量", headerWidth: 80, dataCode: "tenderQuantity", dataType: "Number", hAlign: "right", decimalField: "glj.quantity", visible: false}
         ],
         view: {
-            lockColumns: [ "adjustPrice", "rationItemQuantity", "quantity", "totalQuantity", "isEstimate"],
+            lockColumns: [ "adjustPrice", "rationItemQuantity", "quantity", "totalQuantity", "isEstimate", "tenderPrice", "tenderQuantity"],
             rowHeaderWidth:25
         },
         getStyle:function (data) {
@@ -33,21 +35,23 @@ let gljCol = {
     },
     project_glj_setting:{
         header: [
-            {headerName: "编号", headerWidth: 80, dataCode: "code", dataType: "String"},
-            {headerName: "名称", headerWidth: 160, dataCode: "name", dataType: "String",cellType:'tipsCell'},
-            {headerName: "单位", headerWidth: 45, dataCode: "unit", hAlign: "center", dataType: "String"},
-            {headerName: "总消耗量", headerWidth: 90, dataCode: "quantity", hAlign: "right", dataType: "Number",decimalField:'glj.quantity'},
-            {headerName: "定额价", headerWidth: 70, dataCode: "basePrice", hAlign: "right", dataType: "Number",validator:"number"},//decimalField:'glj.unitPrice',
-            {headerName: "预算价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",validator:"number"},//,decimalField:"glj.unitPrice"
-            {headerName: "规格", headerWidth: 120, dataCode: "specs", hAlign: "left", dataType: "String",cellType:'tipsCell'},
-            {headerName: "主要\n材料", headerWidth: 45, dataCode: "is_main_material", hAlign: "center", dataType: "String",cellType:'checkBox'},
-            {headerName: "新工料机", headerWidth: 50, dataCode: "is_add", hAlign: "center", dataType: "String",cellType:'checkBox'},
-            {headerName: "不调价", headerWidth: 55, dataCode: "is_adjust_price", dataType: "String",cellType: "checkBox",},
-            {headerName: "类型", headerWidth: 45, dataCode: "short_name", hAlign: "center", dataType: "String"},
-            {headerName: "备注", headerWidth: 100, dataCode: "remark", hAlign: "left", dataType: "String"}
+            {headerName: "编号", headerWidth: 80, dataCode: "code", dataType: "String",spanRows: [2]},
+            {headerName: "名称", headerWidth: 160, dataCode: "name", dataType: "String",cellType:'tipsCell',spanRows: [2]},
+            {headerName: "单位", headerWidth: 45, dataCode: "unit", hAlign: "center", dataType: "String",spanRows: [2]},
+            {headerName: "总消耗量", headerWidth: 90, dataCode: "quantity", hAlign: "right", dataType: "Number",decimalField:'glj.quantity',spanRows: [2]},
+            {headerName: "定额价", headerWidth: 70, dataCode: "basePrice", hAlign: "right", dataType: "Number",validator:"number", spanRows: [2]},
+            {headerName: "预算价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",validator:"number",spanRows: [2]},
+            {headerName: "规格", headerWidth: 120, dataCode: "specs", hAlign: "left", dataType: "String",cellType:'tipsCell',spanRows: [2]},
+            {headerName: "主要\n材料", headerWidth: 45, dataCode: "is_main_material", hAlign: "center", dataType: "String",cellType:'checkBox',spanRows: [2]},
+            {headerName: "新工料机", headerWidth: 50, dataCode: "is_add", hAlign: "center", dataType: "String",cellType:'checkBox',spanRows: [2]},
+            {headerName: "不调价", headerWidth: 55, dataCode: "is_adjust_price", dataType: "String",cellType: "checkBox",spanRows: [2]},
+            {headerName: "类型", headerWidth: 45, dataCode: "short_name", hAlign: "center", dataType: "String",spanRows: [2]},
+            {headerName: "备注", headerWidth: 100, dataCode: "remark", hAlign: "left", dataType: "String",spanRows: [2]},
+            {headerName: ["调价后","市场价"], headerWidth: 75, dataCode: "tenderPrice", hAlign: "right", dataType: "Number",validator:"number",spanCols: [2,1], visible: false},
+            {headerName: ["","总消耗量"], headerWidth: 90, dataCode: "tenderQuantity", hAlign: "right", dataType: "Number",decimalField:'glj.quantity',spanCols: [2,1], visible: false}
         ],
         view: {
-            lockColumns: ["code","name","specs","unit","short_name","quantity","is_add"]
+            lockColumns: ["code","name","specs","unit","short_name","quantity","is_add","tenderPrice","tenderQuantity"]
         },
         getStyle:function (data,row,activeRow) {
             if(row == activeRow){//选中黄色显示
@@ -226,7 +230,7 @@ let gljCol = {
             setting.view.lockColumns = newArray;
         }
     },
-    initGljCol:function (showAdjustPrice) {
+    initGljCol:function (showAdjustPrice, showTenderFields) {
         let me = gljCol;
         if(showAdjustPrice !== true){
             me.removeCol('adjustPrice',me.ration_glj_setting);
@@ -236,12 +240,52 @@ let gljCol = {
         if(projectObj.project.projectInfo.property && projectObj.project.projectInfo.property.valuationType == "bill"){
             me.removeCol('is_adjust_price',me.project_glj_setting);
         }
-        gljOprObj.setting = me.ration_glj_setting;
+        
+	me.showTenderFields(showTenderFields, false);
+	gljOprObj.setting = me.ration_glj_setting;
         projectGljObject.projectGljSetting = me.project_glj_setting;
         projectGljObject.mixRatioSetting = me.mixRatio_Setting;
         me.setScopeFormater();
         gljOprObj.scopeSetting = me.scopeSetting;
     },
+    showTenderFields: function (showFields = false, needRefresh = false){
+        let me = gljCol;
+
+        let PGLJHeader = me.project_glj_setting.header;
+        for (let e of PGLJHeader){
+            if (e.dataCode == 'tenderPrice' || e.dataCode == 'tenderQuantity'){
+                e.visible = showFields;
+            }
+        };
+
+        let RGLJHeader = me.ration_glj_setting.header;
+        for (let e of RGLJHeader){
+            if (e.dataCode == 'tenderPrice' || e.dataCode == 'tenderQuantity'){
+                e.visible = showFields;
+            }
+        };
+
+        let CalcProgramHeader = calcProgramObj.setting.header;
+        for (let e of CalcProgramHeader){
+            if (e.dataCode == 'tenderUnitFee' || e.dataCode == 'tenderTotalFee'){
+                e.visible = showFields;
+            }
+        };
+
+        if (needRefresh){
+            if(projectGljObject.projectGljSpread) {
+                projectGljObject.projectGljSheet = projectGljObject.projectGljSpread .getSheet(0);
+                projectGljObject.initSheet(projectGljObject.projectGljSheet, projectGljObject.projectGljSetting);
+            }
+            if (subSpread) {
+                gljOprObj.refreshView();
+                calcProgramObj.refreshCalcProgram(projectObj.project.mainTree.selected);
+
+                //gljOprObj.initSheet(subSpread.getSheet(0), false);
+                //gljOprObj.initSheet(subSpread.getSheet(2), false);
+            }
+        };
+    },
     setScopeFormater:function () {
         // 综合单价、综合合价,小数部分应补0对齐。  CSL
         for(let col of this.scopeSetting.cols){
@@ -249,7 +293,6 @@ let gljCol = {
             if (col.data.field== "unitPrice")  col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.unitPrice, true);
         }
     }
-
 };
 /*
 $(function () {

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

@@ -989,6 +989,7 @@ var projectObj = {
                 if(projectReadOnly){
                     disableSpread(that.mainSpread);
                 }
+                projectObj.project.calcProgram.doTenderCalc();  // 打开标段后,进行一次全部计算,包括调价计算。
                 $.bootstrapLoading.end();
             }
             else {

+ 87 - 63
web/building_saas/main/js/views/tender_price_view.js

@@ -14,13 +14,13 @@ let tender_obj={
             {headerName: "项目名称", headerWidth: 200, dataCode: "name",showHint:true, hAlign: "left", dataType: "String",spanRows: [2]},
             {headerName: "计量\n单位", headerWidth: 60, dataCode: "unit", hAlign: "center", dataType: "String",spanRows: [2]},
             {headerName: "工程量", headerWidth: 70, dataCode: "quantity", hAlign: "right", dataType: "Number",validator:"number",spanRows: [2],getText:'getText.quantity'},
-            {headerName: "不调价", headerWidth: 55, dataCode: "is_adjust_price", hAlign: "center", cellType : "checkBox",dataType: "Number",spanRows: [2]},
-            {headerName: ["初始报价","综合单价"], headerWidth: 80, dataCode: "feesIndex.common.unitFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [2,1]},
-            {headerName: ["","综合合价"], headerWidth: 80, dataCode: "feesIndex.common.totalFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [0,1]},
-            {headerName: ["目标造价","综合单价"], headerWidth: 80, dataCode: "targetUnitFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [2,1]},
-            {headerName: ["","综合合价"], headerWidth: 80, dataCode: "targetTotalFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [0,1]},
-            {headerName: ["调整后报价","综合单价"], headerWidth: 80, dataCode: "feesIndex.common.tenderUnitFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [2,1]},
-            {headerName: ["","综合合价"], headerWidth: 80, dataCode: "feesIndex.common.tenderTotalFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [0,1]},
+            // {headerName: "不调价", headerWidth: 55, dataCode: "is_adjust_price", hAlign: "center", cellType : "checkBox",dataType: "Number",spanRows: [2]},
+            {headerName: ["初始报价","综合单价"], headerWidth: 100, dataCode: "feesIndex.common.unitFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [2,1]},
+            {headerName: ["","综合合价"], headerWidth: 100, dataCode: "feesIndex.common.totalFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [0,1]},
+            {headerName: ["目标造价","综合单价"], headerWidth: 100, dataCode: "targetUnitFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [2,1]},
+            {headerName: ["","综合合价"], headerWidth: 100, dataCode: "targetTotalFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [0,1]},
+            {headerName: ["调整后报价","综合单价"], headerWidth: 100, dataCode: "feesIndex.common.tenderUnitFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [2,1]},
+            {headerName: ["","综合合价"], headerWidth: 100, dataCode: "feesIndex.common.tenderTotalFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [0,1]},
             {headerName: ["消耗量调整系数","人工"], headerWidth: 80, dataCode: "quantityCoe.labour", hAlign: "right", dataType: "Number",validator:"number",spanCols : [5,1]},
             {headerName: ["","材料"], headerWidth: 80, dataCode: "quantityCoe.material", hAlign: "right", dataType: "Number",validator:"number",spanCols : [0,1]},
             {headerName: ["","机械"], headerWidth: 80, dataCode: "quantityCoe.machine", hAlign: "right", dataType: "Number",validator:"number",spanCols : [0,1]},
@@ -29,7 +29,8 @@ let tender_obj={
             {headerName: "子目工程量\n调整系数", headerWidth: 80, dataCode: "rationQuantityCoe", hAlign: "right", dataType: "Number",spanRows: [2],validator:"number"}
         ],
         view: {
-            lockColumns: [0,1,2,3,4,6,7,10,11]
+            // lockColumns: [0,1,2,3,4,6,7,10,11]
+            lockColumns: [0,1,2,3,4,5,6,9,10]
         }
     },
     tenderTreeSetting:{
@@ -47,12 +48,13 @@ let tender_obj={
         this.tenderSheet = this.tenderSpread.getSheet(0);
         this.tenderTree = cacheTree.createNew(this);
         this.tenderTreeSetting = this.createTenderTreeSetting();
+        // console.log(this.tenderTreeSetting);
         TREE_SHEET_HELPER.initSetting($('#tenderSpread')[0], this.tenderTreeSetting );
         this.tenderTreeSetting.setAutoFitRow = MainTreeCol.getEvent("setAutoFitRow");
         this.tenderController = TREE_SHEET_CONTROLLER.createNew(this.tenderTree, this.tenderSheet, this.tenderTreeSetting);
         this.tenderSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSheetValueChange);
-        this.tenderSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onTenderRangeChange);
         this.tenderSheet.bind(GC.Spread.Sheets.Events.EnterCell, this.onEnterCell);
+        this.tenderSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onTenderRangeChange);
         this.tenderSheet.bind(GC.Spread.Sheets.Events.EditStarting,this.onEditStarting);
         this.tenderController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, this.treeSelectedChanged);
        // this.tenderController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, this.onSelectionChange);
@@ -174,11 +176,18 @@ let tender_obj={
         //在目标造价综合单价中输入数值,按项目属性中的清单单价精度取舍,并清空当前行的目标造价综合合价
         if(dataCode == 'targetUnitFee'){
             value = scMathUtil.roundForObj(value,getDecimal('unitPrice',node));
-            updateData?updateData.data["targetTotalFee"] = null:'';
+	    // updateData?updateData.data["targetTotalFee"] = null:'';
+            updateData?updateData.data["targetTotalFee"] = (value * node.data.quantity).toDecimal(decimalObj.decimal('totalPrice', node)):'';
         }
         if(dataCode == 'targetTotalFee'){
             value = scMathUtil.roundForObj(value,getDecimal('totalPrice',node));
-            updateData?updateData.data["targetUnitFee"] = null:'';
+            // updateData?updateData.data["targetUnitFee"] = null:'';
+            let rst = '';
+            if (updateData){
+                if (calcTools.hasQuantity(node))
+                   rst = (value / node.data.quantity).toDecimal(decimalObj.decimal('unitPrice', node));
+            };
+            updateData.data["targetUnitFee"] = rst;
         }
         updateData.data[dataCode] = value;
         updateNodes.push(updateData);
@@ -205,20 +214,23 @@ let tender_obj={
     },
     onEnterCell : function (sender,args) {
         let me = tender_obj, row = args.row, col = args.col;
-        if ([8, 9].includes(col)){
-            let node = me.tenderTree.items[row];
-            if (node.children && node.children.length > 0) {   // 父结点只读
-                me.tenderSheet.getCell(row, col).locked(true);// = true;
-            }
+        if ([7, 8].includes(col)){                                  // 目标单价、目标合价
+            let treeNode = me.tenderTree.items[row];
+            if (calcTools.isCalcBaseBill(treeNode)){                    // 公式结点只读
+                me.tenderSheet.getCell(row, col).locked(true);
+            };
         }
     },
     updateChildrenValue:function (node,dataCode,value,datas,nodes) {
          if(node.children.length > 0){
             for(let c of node.children){
-                this.updateChildrenValue(c,dataCode,value,datas,nodes);
+                let v = value;
+                if ((dataCode.indexOf("quantityCoe.") != -1) && (calcTools.isVolumePrice(c) || calcTools.isGljRation(c)))
+                    v = 0;
+                this.updateChildrenValue(c,dataCode,v,datas,nodes);
                 let updateData = {type:c.sourceType,data:{'ID' : c.data.ID}};
-                updateData.data[dataCode] = value;
-                if(dataCode == 'is_adjust_price' && value == 1){
+                updateData.data[dataCode] = v;
+                if(dataCode == 'is_adjust_price' && v == 1){
                     updateData = this.cleanTenderCoe(updateData,c);
                 }else if(dataCode.indexOf("Coe")!= -1 && c.data.is_adjust_price == 1){//更新调整系数时忽略不调价的行
                     continue;
@@ -248,31 +260,22 @@ let tender_obj={
     cleanTenderPrice:function (updateData,node) {//清空调整后报价
         if(node.data.fees){
             for(let i =0; i< node.data.fees.length; i++){
-                node.data.fees[i].tenderUnitFee?updateData.data["fees."+i+'.tenderUnitFee'] = 0:'';
-                node.data.fees[i].tenderTotalFee?updateData.data["fees."+i+'.tenderTotalFee'] = 0:'';
+                // 问题:清空调价后,报表显示为空。解决:清空后仍然要保留调后单价和调后金额,初始化使之与原始综合单价、综合合价相等。
+                // node.data.fees[i].tenderUnitFee?updateData.data["fees."+i+'.tenderUnitFee'] = 0:'';
+                // node.data.fees[i].tenderTotalFee?updateData.data["fees."+i+'.tenderTotalFee'] = 0:'';
+                node.data.fees[i].tenderUnitFee?updateData.data["fees."+i+'.tenderUnitFee'] = node.data.fees[i].unitFee:'';
+                node.data.fees[i].tenderTotalFee?updateData.data["fees."+i+'.tenderTotalFee'] = node.data.fees[i].totalFee:'';
             }
         }
     },
-    cleanCacheCoes: function (){
-        for(let node of tender_obj.tenderTree.items){
-            if (node.data.rationQuantityCoe) node.data.rationQuantityCoe = null;
-            let qcObj = node.data.quantityCoe;
-            if (qcObj){
-                for (let pn in qcObj){
-                    qcObj[pn] = null;
-                };
-            };
-        };
-    },
-
     calcOptionsChecking:function (option) {//调整选项检查,返回需要更新的数组
         let datas = [];
         let me = tender_obj;
         for(let node of me.tenderTree.items){
             let tem_updateData = {type:node.sourceType,data:{}};
-            if(option == 'coeBase') { //当值为“根据调整系数计算报价”时,清空目标报价。
+            if(option == 'coeBase') {                           // 正向:当值为“根据调整系数计算报价”时,清空目标报价。
                 me.cleanTargetPrice(tem_updateData,node);
-            }else if(option == 'priceBase'){//当值为“根据报价计算调整系数”时,清空调整系数。
+            }else if(option == 'priceBase_RCJ' || option == 'priceBase_ZM'){                    // 反向:当值为“根据报价计算调整系数”时,清空调整系数。
                 me.cleanTenderCoe(tem_updateData,node);
             }
             if(!_.isEmpty(tem_updateData.data)){//如果需要更新
@@ -359,8 +362,7 @@ let tender_obj={
         let me = tender_obj, row = args.row, col = args.col;
         if(me.editChecking(row,col) == false){
             args.cancel = true;
-        }
-
+        };
     },
     editChecking:function (row,col,isPaste = false) {//return false表示不能编辑
         let me = tender_obj;
@@ -384,41 +386,41 @@ let tender_obj={
             }
         }
         if(dataCode.indexOf('Coe') != -1){//如果是调整系数列
-            if($('#calcPriceOption').val() =='priceBase'){//下拉按钮显示为“根据报价计算调整系数”时,只读。
+            if($('#calcPriceOption').val() =='priceBase_RCJ' || $('#calcPriceOption').val() =='priceBase_ZM'){//下拉按钮显示为“根据报价计算调整系数”时,只读。
                 return false;
             }else if(me.tenderTree.items[row].data.is_adjust_price === 1){//打勾了不调价,只读。
                 return false;
             }
         }
+        // 量价类,工料机消耗量调整系数不允许输入
+        let treeNode = me.tenderTree.items[row];
+        if (calcTools.isVolumePrice(treeNode) || calcTools.isGljRation(treeNode)){
+            if ([11,12,13,14,15].includes(col))
+                return false;
+        };
         return true;
     },
-    initPageContent : function () {
+    initPageContent: function () {
         let tenderSetting = projectObj.project.property.tenderSetting;
-        let calcPriceOption = tenderSetting && tenderSetting.calcPriceOption? tenderSetting.calcPriceOption :"coeBase";
         let gljPriceTenderCoe = tenderSetting && tenderSetting.gljPriceTenderCoe?tenderSetting.gljPriceTenderCoe:1;
+        let showTenderFields = tenderSetting && tenderSetting.showTenderFields?tenderSetting.showTenderFields:false;
+        let calcPriceOption = calcTools.getTenderCalcType();
         $('#calcPriceOption').val(calcPriceOption);
         $('#gljPriceTenderCoe').val(gljPriceTenderCoe);
+        $('#cbShowTenderFields').prop("checked", showTenderFields);
         if(calcPriceOption == 'coeBase'){
-            if(!projectReadOnly){
-                $('#tenderPrice').removeAttr("disabled");
-            }
+            $('#gljPriceTenderCoe').removeAttr("disabled");
             $('#tenderGLJQuantity').attr("disabled",true);
             $('#tenderRationQuantity').attr("disabled",true);
+            if(!projectReadOnly){
+                $('#tenderPrice').removeAttr("disabled");
+            };
         }else {
-            $('#tenderPrice').attr("disabled",true);
+            $('#gljPriceTenderCoe').attr("disabled",true);
             $('#tenderGLJQuantity').removeAttr("disabled");
             $('#tenderRationQuantity').removeAttr("disabled");
-        }
-        //gljPriceTenderCoe
-    },
-    doTenderCalc: function(tender){
-        if (tender != tenderTypes.ttCalc)
-            tender_obj.cleanCacheCoes();
-        let callback = function () {
-            projectObj.project.saveProperty('hasTender', true);
-            tender_obj.showTenderData();
+            // $('#tenderPrice').attr("disabled",true);
         };
-        projectObj.project.calcProgram.calcAllNodesAndSave(calcAllType.catAll, callback, tender);
     }
 };
 
@@ -431,6 +433,8 @@ $(function () {
             tender_obj.showTenderData();
             tender_obj.initPageContent();
         }
+        else tender_obj.showTenderData();
+
         autoFlashHeight();
         tender_obj.tenderSpread.refresh();
     });
@@ -452,20 +456,26 @@ $(function () {
             }
         }
         datas.push({type:ModuleNames.project,data:{'ID' : projectObj.project.ID(),'property.tenderSetting.gljPriceTenderCoe':1}});//恢复人材机单价调整系数为1。
-        datas.push({type:ModuleNames.project,data:{'ID' : projectObj.project.ID(),'property.hasTender': false}});
+        // datas.push({type:ModuleNames.project,data:{'ID' : projectObj.project.ID(),'property.hasTender': false}});
         me.updateTenderData(datas,function () {
             me.refreshTenderTreeByDatas(datas);
         });
+        $('#calcTender').trigger('click');
     });
 
     $('#calcPriceOption').change(function(){
         let me = tender_obj;
+
         let newVal = $(this).val();
         let datas = me.calcOptionsChecking(newVal);
         let updateData = {type:ModuleNames.project,data:{'ID' : projectObj.project.ID(),'property.tenderSetting.calcPriceOption':newVal}};
         datas.push(updateData);
         me.updateTenderData(datas,function () {
             me.refreshTenderTreeByDatas(datas);
+            // 反向调价时,一切换,就先把单价系数显示成1。这里仅表皮显示变了,满足客户的好奇心,后台没有同步。真正干活的是在点了调价按钮之时。
+            let tenderType = $('#calcPriceOption').val();
+            if(tenderType == 'priceBase_RCJ' || tenderType == 'priceBase_ZM')
+                $('#gljPriceTenderCoe').val(1);
         });
     });
 
@@ -474,22 +484,36 @@ $(function () {
         let process = getDecimal('process');
         var newVal = $(this).val();
         process = scMathUtil.roundForObj(newVal,process);
+        if (process == 0) process = 1;    // 清空系数时,强制给1
         let updateData = {type:ModuleNames.project,data:{'ID' : projectObj.project.ID(),'property.tenderSetting.gljPriceTenderCoe':process}};
         me.updateTenderData([updateData],function () {
             me.initPageContent();
         });
     });
 
-    $('#tenderPrice').on('click', function () {
-        tender_obj.doTenderCalc(tenderTypes.ttCalc);
-    });
-
-    $('#tenderGLJQuantity').on('click', function () {
-        tender_obj.doTenderCalc(tenderTypes.ttReverseGLJ);
+    $('#calcTender').on('click', function () {
+        let callback = function () {
+            // projectObj.project.saveProperty('hasTender', true);  // 一定调价,这个属性已失去意义
+            if (projectObj.project.property.needRestoreGgljPriceTenderCoe){         // 入库存储,清理标记,刷新UI显示
+                projectObj.project.saveProperty('tenderSetting.gljPriceTenderCoe', 1);
+                delete projectObj.project.property.needRestoreGgljPriceTenderCoe;
+                $('#gljPriceTenderCoe').val(1);
+            }
+            tender_obj.showTenderData();
+            projectObj.project.projectGLJ.calcQuantity();
+            // 刷新造价书界面的相关显示。刷新放在这里是为了切换UI时体验更流畅。
+            if($('#linkJSCX').hasClass('active'))
+                calcProgramObj.refreshCalcProgram(projectObj.project.mainTree.selected, 2)
+            if($('#linkGLJ').hasClass('active'))
+                gljOprObj.refreshView();
+        };
+        projectObj.project.calcProgram.doTenderCalc(callback);
     });
 
-    $('#tenderRationQuantity').on('click', function () {
-        tender_obj.doTenderCalc(tenderTypes.ttReverseRation);
+    $('#cbShowTenderFields').on('click', function () {
+        let showFields = $('#cbShowTenderFields').prop("checked");
+        projectObj.project.saveProperty('tenderSetting.showTenderFields', showFields);
+        gljCol.showTenderFields(showFields, true);
     });
 
 });