/** * Created by zhang on 2019/5/15. */ let materialAdjustObj = { spread:null, priceInfoSheet:null, priceCoeSheet:null, priceInfoDatas:[], priceCoeDatas:[], priceInfoSetting:{ header: [ {headerName: "关联", headerWidth: 80, dataCode: "is_related", dataType: "String",cellType:'checkBox'}, {headerName: "材料号", headerWidth: 80, dataCode: "code", dataType: "String"}, {headerName: "材料名称", headerWidth: 160, dataCode: "name", dataType: "String",cellType:'tipsCell'}, {headerName: "规格型号", headerWidth: 120, dataCode: "specs", hAlign: "left", 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: 80, dataCode: "riskCoe", hAlign: "right", dataType: "Number",validator:"number"}, {headerName: "基准单价", headerWidth: 70, dataCode: "standardPrice", hAlign: "right", dataType: "Number",validator:"number"}, {headerName: "投标单价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",validator:"number"}, {headerName: "合价", headerWidth: 90, dataCode: "totalPrice", hAlign: "right", dataType: "Number",validator:"number",decimalField:'bills.totalPrice'}, {headerName: "供货方式", headerWidth: 70, dataCode: "supply", hAlign: "center", dataType: "String",cellType:'comboBox',editorValueType:true,options:supplyComboMap}, {headerName: "备注", headerWidth: 100, dataCode: "remark", hAlign: "left", dataType: "String"} ], view:{ lockColumns: ["is_related","quantity","totalPrice","originPlace","vender","supply"]} }, priceCoeSetting:{ header: [ {headerName: "关联", headerWidth: 80, dataCode: "is_related", dataType: "String",cellType:'checkBox'}, {headerName: "材料号", headerWidth: 80, dataCode: "code", dataType: "String"}, {headerName: "材料名称", headerWidth: 160, dataCode: "name", dataType: "String",cellType:'tipsCell'}, {headerName: "规格型号", headerWidth: 120, dataCode: "specs", hAlign: "left", dataType: "String",cellType:'tipsCell'}, {headerName: "单位", headerWidth: 45, dataCode: "unit", hAlign: "center", dataType: "String"}, {headerName: "变值权重B", headerWidth: 90, dataCode: "varWeight", hAlign: "right", dataType: "Number",validator:"number",formatter:"0.00"}, {headerName: "基本价格指数F0", headerWidth: 70, dataCode: "FO", hAlign: "right", dataType: "Number",validator:"number"}, {headerName: "现行价格指数Ft", headerWidth: 70, dataCode: "FI", hAlign: "right", dataType: "Number",validator:"number"}, {headerName: "数量", headerWidth: 90, dataCode: "quantity", hAlign: "right", dataType: "Number",decimalField:'glj.quantity'}, {headerName: "单价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",validator:"number"}, {headerName: "合价", headerWidth: 90, dataCode: "totalPrice", hAlign: "right", dataType: "Number",validator:"number",decimalField:'bills.totalPrice'}, {headerName: "供货方式", headerWidth: 70, dataCode: "supply", hAlign: "center", dataType: "String",cellType:'comboBox',editorValueType:true,options:supplyComboMap}, {headerName: "备注", headerWidth: 100, dataCode: "remark", hAlign: "left", dataType: "String"} ], view:{ lockColumns: ["is_related","quantity","totalPrice","originPlace","varWeight","vender","supply"]} }, refreshSheetDatas:function () { //读项目属性的值,若没有则默认为造价信息差额调整法 let adjustType = $('#adjustType').val(); if (adjustType === 'priceInfo') { materialAdjustObj.showPriceInfoDatas(); } else { materialAdjustObj.showPriceCoeDatas(); } configMaterialObj.showEvaluateRelateDatas(); }, getSheetDatas:function () { let adjustType = $('#adjustType').val(); return adjustType === 'priceInfo' ? this.priceInfoDatas : this.priceCoeDatas; }, getSheet:function () { let adjustType = $('#adjustType').val(); return adjustType === 'priceInfo' ? this.priceInfoSheet : this.priceCoeSheet; }, initPriceInfoSheet:function () { this.priceInfoSheet = configMaterialObj.configSpread.getSheet(2); sheetCommonObj.initSheet(this.priceInfoSheet,this.priceInfoSetting,30); this.priceInfoSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSheetValueChange); this.priceInfoSheet.bind(GC.Spread.Sheets.Events.SelectionChanged,this.onSelectionChange); this.priceInfoSheet.bind(GC.Spread.Sheets.Events.EditStarting, this.onPriceInfoEditString); this.priceInfoSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onSheetRangeChange); this.priceInfoSheet.name('priceInfoSheet'); this.priceInfoSheet.setRowHeight(0, 36, 1); }, initPriceCoeSheet:function () { this.priceCoeSheet = configMaterialObj.configSpread.getSheet(3); sheetCommonObj.initSheet(this.priceCoeSheet,this.priceCoeSetting,30); this.priceCoeSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSheetValueChange); this.priceCoeSheet.bind(GC.Spread.Sheets.Events.SelectionChanged,this.onSelectionChange); this.priceCoeSheet.bind(GC.Spread.Sheets.Events.EditStarting, this.onPriceInfoEditString); this.priceCoeSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onSheetRangeChange); this.priceCoeSheet.name('priceCoeSheet'); this.priceCoeSheet.setRowHeight(0, 36, 1); }, onSelectionChange:function (sender, args) { let me = configMaterialObj; let newSel = args.newSelections[0]; let oldSel = args.oldSelections?args.oldSelections[0]:{}; if(newSel.row != oldSel.row){ me.showEvaluateRelateDatas(); me.relateFilterAgain = false; } }, onSheetRangeChange:function (a,args) { let me = materialAdjustObj,updateMap = {},tasks=[]; let projectGLJ = projectObj.project.projectGLJ; let setting = $("#adjustType").val() == "priceInfo"?me.priceInfoSetting:me.priceCoeSetting; let datas = $("#adjustType").val() == "priceInfo"?me.priceInfoDatas:me.priceCoeDatas; for(let c of args.changedCells){ let dataCode = setting.header[c.col].dataCode; let value= args.sheet.getCell(c.row, c.col).text(); let recode = datas[c.row]; if(dataCode == "unit" && recode.is_related){ me.refreshSheetDatas(); return ; } if (value&&!sheetCommonObj.checkData(c.col,setting,value)) { alert('输入的数据类型不对,请重新输入!'); me.refreshSheetDatas(); return ; } if(dataCode=='marketPrice'){ dataCode = 'market_price'; if(recode.is_related){//关联的情况下,直接修改工料机价格 return projectGLJ.updatePrice(recode,dataCode,value,'rg',null, projectGljObject.refreshViewsData); } }else { let tem = updateMap[recode.ID]?updateMap[recode.ID]:{}; if(value&&dataCode == "standardPrice") value = scMathUtil.roundForObj(value,getDecimal('glj.unitPrice'))+""; if(value == recode[dataCode]) continue; tem[dataCode] = value; updateMap[recode.ID] = tem; } } for(let ID in updateMap){ let edata = {type:"contractor_list",doc:updateMap[ID],action:"update",ID:ID}; tasks.push(edata); } if(tasks.length > 0) configMaterialObj.updateEvaluateMaterial(tasks,false); }, onPriceInfoEditString:function (a,args) { let me = materialAdjustObj; let setting = $("#adjustType").val() == "priceInfo"?me.priceInfoSetting:me.priceCoeSetting; let datas = $("#adjustType").val() == "priceInfo"?me.priceInfoDatas:me.priceCoeDatas; let dataCode = setting.header[args.col].dataCode; let recorde = datas[args.row]; if(recorde){ if(recorde.is_related && dataCode =="unit") args.cancel = true; } }, onSheetValueChange:function (a,args) { let me = materialAdjustObj,row = args.row, col = args.col; let setting = $("#adjustType").val() == "priceInfo"?me.priceInfoSetting:me.priceCoeSetting; let datas = $("#adjustType").val() == "priceInfo"?me.priceInfoDatas:me.priceCoeDatas; let dataCode = setting.header[col].dataCode; let evaluate = datas[row]; let value = args.newValue; if (value&&! sheetCommonObj.checkData(col,setting,value)) { alert('输入的数据类型不对,请重新输入!'); return me.refreshSheetDatas(); } if(dataCode == 'marketPrice'){ dataCode = 'market_price'; if(evaluate.is_evaluate == 1){ alert("当前材料市场价已被锁定,修改请先返回人材机汇总界面解除锁定。"); return me.refreshSheetDatas(); } if(evaluate.is_related){//关联的情况下,直接修改工料机价格 return projectObj.project.projectGLJ.updatePrice(evaluate,dataCode,value,'rg',null, projectGljObject.refreshViewsData); } } if(dataCode == "standardPrice") value = scMathUtil.roundForObj(value,getDecimal('glj.unitPrice'))+""; let edata = {type:'contractor_list',doc:{},action:"update",ID:evaluate.ID}; if(evaluate[dataCode] == value) return me.refreshSheetDatas(); edata.doc[dataCode] = value; configMaterialObj.updateEvaluateMaterial([edata],false); }, deleteAdjust:function () { let me = this,updateMap={}; let projectGLJ = projectObj.project.projectGLJ; let datas = $("#adjustType").val() == "priceInfo"?me.priceInfoDatas:me.priceCoeDatas; let sels = this.spread.getActiveSheet().getSelections(); let select = sels.length > 0? sels[0]:null; if(!select) return; for(let i =0;i= 0) data.is_evaluate = glj.is_evaluate; data.from = glj; data.is_contractor_material = glj.is_contractor_material; return data; }, checkByType:function (type) { for(let d of this.datas){ d.select = 0; switch (type){ case "全选": d.select = 1; break; case "全选主材": if(d.type == 4) d.select = 1; break; case "全选设备": if(d.type == 5) d.select = 1; break; case "取消": d.select = d.is_contractor_material?1:0; break; } } }, confirmSelect:function () { let tasks = []; let datas = projectObj.project.contractor_list.datas,modelType= 'contractor_list',field= 'is_contractor_material'; let evaluateMap = _.indexBy(datas,"projectGLJID"); let evaluateKeyMap = {};//关键字映射表 for(let e of datas){ let eIndex = gljUtil.getIndex(e,gljUtil.materialKeyArray); evaluateKeyMap[eIndex] = e; } for(let d of this.datas){ if(d.select == 1){//如果是选中状态 if(d[field] == 1) {//如果已经标记为承包人材料 let evl = evaluateMap[d.id]; if(evl){ //这里应该是错误检查的保证,按正常是不应该出现这种情况的 if(evl.is_related !=1) tasks.push({type:modelType,doc:{projectGLJID:d.id,is_related:1},action:"update",ID:evl.ID}); }else { tasks.push(getNewEval(d,modelType)) } }else {//如果不是暂估,要改成暂估 let pdata = {id:d.id,doc:{},action:'update',type:"glj_list"}; pdata.doc[field] = 1; tasks.push(pdata); let evaluate = evaluateKeyMap[gljUtil.getIndex(d,gljUtil.materialKeyArray)]; if(evaluate) {//如果已经存在5个关键字相同的暂估材料,则自动关联起来 let edata = {type:modelType,doc:{projectGLJID:d.id,is_related:1},action:"update",ID:evaluate.ID}; tasks.push(edata); }else {//如果不存在,则生成一条新的 tasks.push(getNewEval(d,modelType)); } } }else {//未选中状态的,检查一下是否存在关联的情况,取消关联 let tdoc = {}; tdoc[field] = 0; if(d[field] == 1) tasks.push({id:d.id,doc:tdoc,action:'update',type:"glj_list"}); let evl = evaluateMap[d.id]; if(evl){ if(evl.is_related ==1) tasks.push({type:modelType,doc:{is_related:0},action:"update",ID:evl.ID}); } let evaluate = evaluateKeyMap[gljUtil.getIndex(d,gljUtil.materialKeyArray)]; if(evaluate) { if(evaluate.is_related ==1) tasks.push({type:modelType,doc:{is_related:0},action:"update",ID:evaluate.ID}); } } } if(tasks.length > 0) configMaterialObj.updateEvaluateMaterial(tasks); function getNewEval(d,m_t) { let ndata = {type:m_t,doc:{},action:"add"}; ndata.doc['ID'] = uuid.v1(); ndata.doc['projectGLJID'] = d.id; ndata.doc['is_related'] = 1; ndata.doc['seq'] = d.code; ndata.doc['projectID'] = d.from.project_id; ndata.doc['code'] = d.code; ndata.doc['name'] = d.name; ndata.doc['specs'] = d.specs; ndata.doc['unit'] = d.unit; ndata.doc['quantity'] = d.quantity; ndata.doc['type'] = d.type; ndata.doc['market_price'] = d.from.unit_price.market_price; ndata.doc['originPlace'] = d.originPlace; ndata.doc['vender'] = d.vender; ndata.doc['remark'] = d.remark; ndata.doc['supply'] = d.supply; ndata.doc['riskCoe'] = ""; ndata.doc['standardPrice'] = d.from.unit_price.market_price; ndata.doc['FO'] = ""; ndata.doc['FI'] = ""; return ndata; } } }; $(function () { $("#adjustType").change(function () { materialAdjustObj.refreshSheetDatas(); let val = $(this).val(); let mixDatas = {projectID: projectObj.project.projectInfo.ID, updateType: 'update', properties: {'property.gljAdjustType': val}, options: {}, labourCoes: {}, rations: [], bills: []}; CommonAjax.post('/pm/api/updateMixDatas', {user_id: userID, mixDataArr: mixDatas}, function (rstData) { projectObj.project.projectInfo.property.gljAdjustType = val; }); }); $('#selectFromGLJ').on('shown.bs.modal',function(e){ gljFromObj.checkType="取消"; gljFromObj.initSpread(); gljFromObj.showDatas(); }); $(".glj_sel_input").change(function () { let check = $(this).prop("checked"); if($(this).val() == 0){//勾选的是全选,其它的勾选项跟着改变 for(let a of $(".glj_sel_input")){ $(a).prop("checked",check) } }else {//勾选其它选项 let a_checked = true; for(let o of $(".glj_sel_input_other")){//如果其它的有一个不勾选,则所有项也不打勾 if($(o).prop("checked") === false){ a_checked = false; break; } } $("#glj_sel_all").prop("checked",a_checked); } gljFromObj.showDatas(); }); $("#glj_sel_btn_find").click(function () { gljFromObj.showDatas(); }); $(".glj_sel_check_btn").click(function () { gljFromObj.checkType = $(this).text(); gljFromObj.refreshDatas(); }) $("#glj_sel_confirm").click(function () { gljFromObj.confirmSelect(); }) });