|
|
@@ -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);
|
|
|
});
|
|
|
|
|
|
});
|