/** * Created by CSL on 2017-05-12. */ var gljOprObj = { sheet: null, libID: null, ration: null, sheetData:[], coeSheetData:[], checkb:null, coeSheet:null, assSheet:null, assSheetData:[], detailSheet:null, detailData:[], GLJSelection:[], selectedGLJClass:null, parentNodeIds:{}, activeTab:'#linkGLJ', setting: { header: [ {headerName: "编码", headerWidth: 100, dataCode: "code", dataType: "String", formatter: "@"}, {headerName: "名称", headerWidth: 160, dataCode: "name", dataType: "String"}, {headerName: "规格型号", headerWidth: 90, dataCode: "specs", dataType: "String", hAlign: "left"}, {headerName: "单位", headerWidth: 45, dataCode: "unit", dataType: "String", hAlign: "center"}, {headerName: "类型", headerWidth: 45, dataCode: "shortName", dataType: "String", hAlign: "center"}, {headerName: "定额消耗", headerWidth: 80, dataCode: "rationItemQuantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"}, // dataType: "Number", formatter: "0.00" {headerName: "自定消耗", headerWidth: 80, dataCode: "customQuantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"}, {headerName: "消耗量", headerWidth: 80, dataCode: "quantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"}, {headerName: "总消耗量", headerWidth: 80, dataCode: "totalQuantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"}, {headerName: "定额价", headerWidth: 80, dataCode: "basePrice", dataType: "Number", hAlign: "right",decimalField:"glj.unitPrice"}, {headerName: "调整价", headerWidth: 80, dataCode: "adjustPrice", dataType: "Number", hAlign: "right",decimalField:"glj.unitPrice"}, {headerName: "市场价", headerWidth: 80, dataCode: "marketPrice", dataType: "Number", hAlign: "right",decimalField:"glj.unitPrice"}, {headerName: "是否暂估", headerWidth: 65, dataCode: "isEstimate", dataType: "String", hAlign: "center",vAlign:"center",cellType:"checkBox"} ], view: { comboBox: [{row: -1, col: 12, rowCount: -1, colCount: 1}], lockedCells: [{row: -1, col: 3, rowCount: -1, colCount: 1}], lockColumns:[0,4,5,7,8,9,10,12] }, notEditedType: ['砼','桨','配比','机'] }, coeSetting:{ header:[ {headerName: "调整", headerWidth: 100, dataCode: "isAdjust", dataType: "String",cellType:"checkBox"}, {headerName: "条件", headerWidth: 120, dataCode: "name", dataType: "String",cellType:"button"}, {headerName: "内容", headerWidth: 350, dataCode: "content", dataType: "String", hAlign: "left"} ], view:{ lockColumns:[0,1,2] } }, assSetting:{ header:[ {headerName: "调整名称", headerWidth: 100, dataCode: "name", dataType: "String"}, {headerName: "定额值", headerWidth: 120, dataCode: "stdValue", hAlign: "right", dataType: "String"}, {headerName: "实际值", headerWidth: 120, dataCode: "actualValue", hAlign: "right", dataType: "String"} ], view:{ lockColumns:[0,1] } }, detailSetting:{ header:[ {headerName: "名称", headerWidth: 100, dataCode: "name", dataType: "String"}, {headerName: "计算式", headerWidth: 120, dataCode: "regex", dataType: "String"}, {headerName: "结果(C)", headerWidth: 120, dataCode: "result", dataType: "Number",decimalField:"quantity_detail"}, {headerName: "累加", headerWidth: 120, dataCode: "isSummation", dataType: "String",cellType:"checkBox"} ], view:{ lockColumns:[2,3] } }, gljTreeSetting:{ view: { //addHoverDom: gljTypeTreeOprObj.addHoverDom, //removeHoverDom: gljTypeTreeOprObj.removeHoverDom, expandSpeed: "", selectedMulti: false }, edit: { enable: false, editNameSelectAll: true, showRemoveBtn: true, showRenameBtn: true, removeTitle: "删除节点", renameTitle: "更改名称" }, data: { keep: { parent:true, leaf:true }, key: { children: "items", name: "Name" }, simpleData: { enable: false, idKey: "ID", pIdKey: "ParentID", rootPId: -1 } }, callback:{ onClick: function(event,treeId,treeNode) { if(treeId=='gljTree'){ let me = gljOprObj, gljTypeId = treeNode.ID; if(me.gljCurTypeId !== treeNode.ID){ me.gljCurTypeId = treeNode.ID; me.filterLibGLJSheetData(); me.showLibGLJSheetData(); } }else { if(treeNode.isParent){ $('#class_selected_conf').attr("disabled","disabled"); $('#selected_class').val(""); }else { $('#class_selected_conf').removeAttr("disabled"); $('#selected_class').val(treeNode.ID); } } } } }, gljLibSheetSetting:{ owner:'gljTree', header: [ {headerName:"选择", headerWidth: 40, dataCode: "select", hAlign: "center", vAlign: "center",cellType:"checkBox"}, {headerName:"编码",headerWidth:80,dataCode:"code", dataType: "String", formatter: "@", hAlign: "left", vAlign: "center"}, {headerName:"名称",headerWidth:120,dataCode:"name", dataType: "String", hAlign: "left", vAlign: "center"}, {headerName:"规格型号",headerWidth:80,dataCode:"specs", dataType: "String", hAlign: "center", vAlign: "center"}, {headerName:"计量单位",headerWidth:80,dataCode:"unit", dataType: "String", hAlign: "center", vAlign: "center"}, {headerName:"单价",headerWidth:80,dataCode:"basePrice", dataType: "Number", formatter: "0.00", hAlign: "right", vAlign: "center"}, {headerName:"类型",headerWidth:80,dataCode:"gljType", dataType: "String", hAlign: "center", vAlign: "center"} ], view:{ lockColumns:[0,1,2,3,4,5,6] } }, gljLibSheet:null, initSheet: function(sheet) { var me = this; me.sheet = sheet; sheetCommonObj.initSheet(me.sheet, me.setting, 30); sheet.name('ration_glj'); me.bindSheetEvent(sheet); sheet.bind(GC.Spread.Sheets.Events.CellClick, me.onCellClick); gljContextMenu.loadGLJSpreadContextMenu(); }, initCoeSheet:function (sheet) { var me = this; me.coeSheet = sheet; sheetCommonObj.initSheet(me.coeSheet, me.coeSetting, 30); sheet.name('ration_coe'); me.bindSheetEvent(sheet); sheet.bind(GC.Spread.Sheets.Events.CellClick, me.onCoeCellClick); subSpread.bind(GC.Spread.Sheets.Events.ButtonClicked,me.onButtonClick); }, initAssSheet: function(sheet) { var me = this; me.assSheet = sheet; sheetCommonObj.initSheet(me.assSheet, me.assSetting, 30); sheet.name('ration_ass'); me.bindSheetEvent(sheet); }, initDetailSheet: function(sheet) { var me = this; me.detailSheet = sheet; sheetCommonObj.initSheet(me.detailSheet, me.detailSetting, 30); // me.detailSheet.selectionUnit(0);//0 cell,1 row,2 col; sheet.name('quantity_detail'); me.bindSheetEvent(sheet); }, showCoeData:function(sheet,setting,datas){ sheet.floatingObjects.remove("customerCoe"); sheetCommonObj.showData(sheet,setting,datas); if(datas.length>0){ var cus_index= _.findIndex(datas,function(item){ return item.coeID==-1; }) if(cus_index!=-1){ this.addDropDownList(); this.addCusButton(cus_index,1,datas[cus_index].name); } } }, bindSheetEvent:function (sheet) { var me = this; sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting); sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted); sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded); sheet.bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged); // sheet.bind(GC.Spread.Sheets.Events.CellClick, me.onCellClick); }, onClipboardPasting: function(sender, args) { var me = gljOprObj; if (!me.ration) { args.cancel = true; } }, onClipboardPasted: function(e, info) { var me = gljOprObj; console.log('past'); // if (!me.ration) {return;}; // your code... }, onEditEnded: function(sender,args){ var me = gljOprObj; if(args.sheetName=='ration_glj'){ me.onEditGLJSheet(args) } if(args.sheetName=='ration_ass'){ me.onEditAssSheet(args); } if(args.sheetName=='quantity_detail'){ me.onEditDetailSheet(args); } }, onEditDetailSheet:function(args){ var me = gljOprObj; if(args.row>me.detailData.length){ return; } if(args.row==me.detailData.length&&args.editingText==null){ return; } var selected = projectObj.project.mainTree.selected;//因为使用了延时方法,所以要先取得选中行; var detailList = me.detailData; args.editingText = args.editingText.replace(/(/g,"(");//替换中文左右括号; args.editingText = args.editingText.replace(/)/g,")"); setTimeout(function () {//这里须用延时执行的办法,不然的弹窗确认窗口会和spreadjs 的事件有冲突,造成定额工料机数据不会根据树结点更新的问题 if(args.row==detailList.length){ projectObj.project.quantity_detail.saveQuantityDetail(args,me.detailSetting.header[args.col].dataCode,selected); } if(args.row=me.sheetData.length){ me.sheet.getCell(args.row, args.col).value(null); return; } me.updateRationGLJ(args); }, onEditAssSheet:function(args){ var me = gljOprObj; if(args.row>=me.assSheetData.length){ me.assSheet.getCell(args.row, args.col).value(null); return; } if(me.assSetting.header[args.col].dataCode=='actualValue'){//自定义消耗量 me.updateRationAss(args); } }, onButtonClick:function (sender,args) { var me = gljOprObj; var sheet = args.sheet, row = args.row, col = args.col; var cellType = sheet.getCellType(row, col); if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) { me.onCusButtonClick(sender,args); }else { me.onCheckBoxClick(sender,args) } }, onCheckBoxClick:function(sender,args){ if(args.sheetName=='ration_glj'){ return; } var checkboxValue = args.sheet.getCell(args.row, args.col).value(); var newval = 0; if(checkboxValue){ newval = 0; args.sheet.getCell(args.row, args.col).value(newval); }else { newval=1 args.sheet.getCell(args.row, args.col).value(newval); } if(args.sheetName=='ration_coe'){ gljOprObj.updateRationCoe(args,newval) }else if(args.sheetName=='quantity_detail'){ projectObj.project.quantity_detail.isSummationUpdate(args,gljOprObj.detailData,newval); }else if(args.sheetName=='glj_lib'){ gljOprObj.setGLJSelection(args,newval); } }, onCusButtonClick:function (sender,args){ var me = gljOprObj; var floatingObject = me.coeSheet.floatingObjects.get('customerCoe'); var isVisable = floatingObject.isVisible(); if(!isVisable){ me.coeSheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).locked(false); me.showFloationObject(floatingObject,me.coeSheetData[args.row]); }else { var result = me.checkIfNeedUpdate(); if(result.isNeed){ projectObj.project.ration_coe.updateCustomerCoe(result); } floatingObject.isVisible(false); } }, onCellClick: function(sender,args){ var me = gljOprObj; if(args.row>=me.sheetData.length){ return; } me.editChecking(args); }, onCoeCellClick:function (sender,args) { var me = gljOprObj; var floatingObject = me.coeSheet.floatingObjects.get('customerCoe'); var isVisable = floatingObject.isVisible(); /* if($('#dropdown').css("display") == 'none'){ if(args.col==1&&me.coeSheetData.length>args.row&&me.coeSheetData[args.row].coeID==-1){ me.showFloationObject(floatingObject,me.coeSheetData[args.row]); } }*/ if(isVisable){ var result = me.checkIfNeedUpdate(); if(result.isNeed){ projectObj.project.ration_coe.updateCustomerCoe(result); } floatingObject.isVisible(false); // $('#dropdown').hide(); } }, showFloationObject(floatingObject,data){ floatingObject.isVisible(true); var sheet = this.coeSheet; var startRow = this.coeSheetData.length; var endRow = startRow+7; floatingObject.startRow(startRow); floatingObject.startColumn(1); floatingObject.endColumn(2); floatingObject.endRow(endRow); this.bindFloadingObjectValue(data); sheet.repaint(); // var editPosition = $("#edit").offset(); //$('#dropdown').show(); //var top =editPosition.top>=825?825:editPosition.top //$('#dropdown').offset({left:editPosition.left,top:top});//top: 791px; left:70px; }, bindFloadingObjectValue(data){ $('#coe_ration').val(data.coes[0].amount); $('#manual').val(data.coes[1].amount); $('#material').val(data.coes[2].amount); $('#manchine').val(data.coes[3].amount); $('#mainM').val(data.coes[4].amount); $('#equipment').val(data.coes[5].amount); }, onInputChange(id,name){ var coe = _.find(gljOprObj.coeSheetData,function (c) { return c.coeID == -1; }); var newValue = gljOprObj.numberValueChecking($('#'+id).val()); if(newValue){ newValue=_.round(newValue,2); if(newValue==coe.coes[name].amount) return; if(id=='coe_ration'){ $('#coe_ration').val(newValue); $('#manual').val(newValue); $('#material').val(newValue); $('#manchine').val(newValue); $('#mainM').val(newValue); $('#equipment').val(newValue); }else { $('#'+id).val(newValue); } }else { $('#'+id).val(coe.coes[name].amount); } }, checkIfNeedUpdate(){ var data = _.find(gljOprObj.coeSheetData,function (c) { return c.coeID == -1; }); var result = { isNeed:false } var coe_ration = $('#coe_ration').val(); var manual=$('#manual').val(); var material = $('#material').val(); var manchine= $('#manchine').val(); var mainM = $('#mainM').val(); var equipment=$('#equipment').val(); if(coe_ration!=data.coes[0].amount){ result.isNeed =true; data.coes[0].amount =coe_ration; } if(manual!=data.coes[1].amount){ result.isNeed =true; data.coes[1].amount =manual; } if(material!=data.coes[2].amount){ result.isNeed =true; data.coes[2].amount =material; } if(manchine!=data.coes[3].amount){ result.isNeed =true; data.coes[3].amount =manchine; } if(mainM!=data.coes[4].amount){ result.isNeed =true; data.coes[4].amount =mainM; } if(equipment!=data.coes[5].amount){ result.isNeed =true; data.coes[5].amount =equipment; } if(result.isNeed){ result.doc = { coes:data.coes }; result.query = { projectID:data.projectID, ID:data.ID, rationID:data.rationID }; } return result; }, editChecking:function (args) { var me = gljOprObj; var header = me.setting.header; var disable = null; if(me.sheetData[args.row]!=undefined){ if(me.sheetData[args.row].isMixRatio){ disable = true; } } if(header[args.col]&&header[args.col].dataCode=='marketPrice'){ var type = me.sheetData[args.row].shortName; var index= _.indexOf(me.setting.notEditedType,type); disable=index==-1?false:true; } if(header[args.col]&&header[args.col].dataCode=='basePrice'){ var isAdd= me.sheetData[args.row].isAdd; var type_b = me.sheetData[args.row].shortName; var index_b= _.indexOf(me.setting.notEditedType,type); disable=isAdd==1&&index_b==-1?false:true } if(disable!=null){ me.sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).locked(disable); } }, addDropDownList:function () { var sheet = this.coeSheet; sheet.suspendPaint(); var customFloatingObject = new GC.Spread.Sheets.FloatingObjects.FloatingObject("customerCoe"); var div = document.createElement('div'); div.innerHTML = this.generateHtmlString(); customFloatingObject.startRow(1); customFloatingObject.startColumn(1); customFloatingObject.endColumn(2); customFloatingObject.endRow(2); $(div).css('background', 'white'); customFloatingObject.content(div); sheet.floatingObjects.add(customFloatingObject); customFloatingObject.isVisible(false); sheet.resumePaint(); }, addCusButton:function(row,col,text){ var cus_button = new GC.Spread.Sheets.CellTypes.Button(); gljOprObj.coeSheet.setCellType(row, col, cus_button, GC.Spread.Sheets.SheetArea.viewport); cus_button.marginLeft(0); cus_button.marginTop(0); cus_button.marginRight(0); cus_button.marginBottom(0); cus_button.text(text); cus_button.buttonBackColor('white'); gljOprObj.coeSheet.repaint(); }, onRangeChanged: function(sender, args) { var me = gljOprObj; if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) { args.editingText=null; if(args.sheetName=='ration_glj'){ me.onEditGLJSheet(args); } if(args.sheetName=='ration_ass'){ me.updateRationAss(args); } }; }, generateHtmlString:function () { // return "
"; var newString = "
自定义系数" newString += this.getOneRow('定额',0,'coe_ration'); newString += this.getOneRow('人工',1,'manual'); newString += this.getOneRow('材料',2,'material'); newString += this.getOneRow('机械',3,'manchine'); newString += this.getOneRow('主材',4,'mainM'); newString += this.getOneRow('设备',5,'equipment'); newString +="
"; return newString; //"
定额:
定额:
定额:
定额:
定额:
"; }, getOneRow:function (text,name,id) { var rowstr = ""+text +":"; return rowstr; }, showDataIfRationSelect:function (node) { var isShow = false; if(node){ if(this.selectedNodeId&&this.selectedNodeId==node.getID()){ return; }else { this.selectedNodeId=node.getID(); } if(node.sourceType=="ration"){ this.showRationGLJData(node); this.showRationCoeData(node); this.showRationAssData(node); isShow=true; } this.showQuantityDetailData(node); }else { this.selectedNodeId=null; } if(!isShow){ this.clearSheetData(); } //hide floatingObject var floatingObject = this.coeSheet.floatingObjects.get('customerCoe'); if(floatingObject){ floatingObject.isVisible(false); } // $('#dropdown').hide(); }, showRationGLJData:function (node) { var gljList = []; var ration_glj = projectObj.project.ration_glj; node=node?node:projectObj.project.mainTree.selected; if(node.sourceType==ModuleNames.ration){ let ration = node.data; gljList=this.filterGljByRation(ration,ration_glj.datas); this.showInSheet(gljList); } }, showRationGLJSheetData:function (init) { this.sheet.setRowCount(0); //console.log(+new Date()) //this.sheet.getRange(0,-1,this.sheet.getRowCount(),-1).visible(true); //这个方法导致加载缓慢 this.sheetData=sortRationGLJ(this.sheetData); this.sumQuantity();//计算总消耗量 this.addMixRatioToShow();//显示组成物信息 this.initRationTree(init); sheetCommonObj.showData(this.sheet,this.setting,this.sheetData); }, initRationTree:function (init) { this.sheet.getRange(-1, 0, -1, 1).cellType(this.getTreeNodeCellType(this.sheetData)); for(var i =0;i0){ gljList = _.filter(datas,{'rationID':ration.ID}) } return gljList; }, showInSheet:function(gljList){ this.sheetData=this.combineWithProjectGlj(gljList); this.showRationGLJSheetData(true); }, sumQuantity:function (node) { if(this.sheetData.length>0){ node=node?node:projectObj.project.mainTree.selected; let ration = node.data; let quantity = ration.quantity; quantity = (quantity==0||quantity==undefined||quantity==null||quantity=="")?1:quantity; for(let glj of this.sheetData){ if(glj.isMixRatio==true){//如果是用于显示的组成物,则不用计算,跳过 continue; } quantity = scMathUtil.roundForObj(quantity,getDecimal("ration.quantity")); glj.quantity=scMathUtil.roundForObj(glj.quantity,getDecimal("glj.quantity")); glj.totalQuantity = scMathUtil.roundToString(quantity*glj.quantity,getDecimal("glj.quantity")); if(glj.hasOwnProperty('subList')){//需要计算glj下挂的组成物的总消耗量 for(let subG of glj.subList){ subG.rationItemQuantity=scMathUtil.roundForObj(subG.rationItemQuantity,getDecimal("glj.quantity")); glj.totalQuantity=scMathUtil.roundForObj(glj.totalQuantity,getDecimal("glj.quantity")); subG.totalQuantity = scMathUtil.roundToString(subG.rationItemQuantity*glj.totalQuantity,getDecimal("glj.quantity")); } } } } }, addMixRatioToShow:function () { var newList=[]; _.remove(this.sheetData,{'isMixRatio':true}); for(var i =0;i0&&projectGljs&&projectGljs.length>0){ for(var i =0;i0){ coeList = _.filter(ration_coe.datas,{'projectID':ration.projectID,'rationID':ration.ID}) } this.showCoeData(this.coeSheet,this.coeSetting,coeList); this.coeSheetData=coeList; }, showRationAssData:function (node) { var assList = node.data.rationAssList ? node.data.rationAssList : []; sheetCommonObj.showData(this.assSheet,this.assSetting,assList); this.assSheetData =assList; }, showQuantityDetailData:function (node) { var details=[]; node =node?node:projectObj.project.mainTree.selected; var quantity_detail =projectObj.project.quantity_detail; if(node.sourceType==ModuleNames.ration){ details=_.filter(quantity_detail.datas,{'rationID':node.data.ID}); }else if(node.sourceType==ModuleNames.bills){ details=_.filter(quantity_detail.datas,{'billID':node.data.ID}); } details=_.sortBy(details,'seq'); sheetCommonObj.showData(this.detailSheet,this.detailSetting,details); this.detailData = details; if(MainTreeCol.readOnly.forQuantifyDetail(node)){ this.detailSheet.getRange(-1,0,-1,this.detailSetting.header.length).locked(true); } }, clearSheetData:function () { sheetCommonObj.showData(this.sheet,this.setting,[]); sheetCommonObj.showData(this.coeSheet,this.coeSetting,[]); sheetCommonObj.showData(this.assSheet,this.assSetting,[]); // sheetCommonObj.showData(this.detailSheet,this.detailSetting,[]); this.sheetData = []; this.coeSheetData = []; this.assSheetData = []; //this.detailData=[]; }, /* lockRationGLJCell:function(){ sheetCommonObj.lockCells(this.sheet,this.setting); }, lockRationCoeCell:function () { sheetCommonObj.lockCells(this.coeSheet,this.coeSetting); /!* if(this.coeSheetData){ for(var i =0;imaxValue){ alert('实际值应≤'+maxValue); return false; } } if(maxExist&&minExist){ if(newvalmaxValue){ alert('实际值应介于'+minValue+'~'+maxValue+'之间'); return false; } } return true; }, showLibGLJSheetData:function () { this.gljLibSheetData=_.sortBy(this.gljLibSheetData, 'code'); this.gljLibSheet.setRowCount(this.gljLibSheetData.length); sheetCommonObj.showData(this.gljLibSheet,this.gljLibSheetSetting,this.gljLibSheetData,gljOprObj.distTypeTree); }, filterLibGLJSheetData:function () { let me=this; let val = $("input[name='glj']:checked").val(); if(val=='allGljs'){ me.gljLibSheetData =me.stdGLJ.concat(me.complementaryGLJs); }else { me.gljLibSheetData=me[val]; } if($('#actionType').val()=='replace'||$('#actionType').val()=='m_replace'){ me.filterLibGLJByType(); } if(me.gljCurTypeId==undefined){ return; } if (me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]) { me.gljLibSheetData= _.filter(me.gljLibSheetData, function(n) { return _.includes(me.parentNodeIds["_pNodeId_" + me.gljCurTypeId],n.gljClass); }); } else { me.gljLibSheetData = _.filter(me.gljLibSheetData,{'gljClass':me.gljCurTypeId}); } }, setGLJSelection:function (args,newVal) { if($('#actionType').val()=='add'||$('#actionType').val()=='insert'){ this.addGLJsSelection(args,newVal); }else { this.replaceGLJSelection(args,newVal); } }, addGLJsSelection:function (args,newVal) { var con_key = this.getIndex(this.gljLibSheetData[args.row],['code','name','specs','unit','gljType']) if(newVal==1){ this.GLJSelection.push(con_key); this.gljLibSheetData[args.row].select=1; }else if(newVal==0){ _.pull(this.GLJSelection,con_key); this.gljLibSheetData[args.row].select=0; } }, replaceGLJSelection:function (args,newVal) { var me =this; var oldSelection=this.GLJSelection[0]; if(newVal==0){ args.sheet.getCell(args.row, args.col).value(1); return; } this.GLJSelection=[me.getIndex(this.gljLibSheetData[args.row],['code','name','specs','unit','gljType'])]; this.gljLibSheetData[args.row].select=1; var oindex = _.findIndex(this.gljLibSheetData,function (item) { var i_key = me.getIndex(item,['code','name','specs','unit','gljType']); return oldSelection==i_key; }); if(oindex!=-1){ args.sheet.getCell(oindex, args.col).value(0); this.gljLibSheetData[oindex].select=0; }else { var oldData = _.find(gljOprObj.AllRecode,function (item) { var i_key = me.getIndex(item,['code','name','specs','unit','gljType']); return oldSelection==i_key; }); oldData?oldData.select=0:""; } }, filterLibGLJByType:function () { var me=this; var selected=me.sheetData[gljContextMenu.selectedRow]; me.gljLibSheetData=_.filter(me.gljLibSheetData,{'gljType':selected.type}); }, getComboData: function (gljDistType) { let me = this; let distType; let distTypeTree = { prefix : 'gljType', distTypes: {}, comboDatas: [], distTypesArr: [] }; gljDistType.forEach(function (typeData) { let typeObj = { data: typeData, children: [], parent: null } distTypeTree.distTypes[distTypeTree.prefix + typeData.ID] = typeObj; distTypeTree.distTypesArr.push(typeObj); }); gljDistType.forEach(function (typeData) { distType = distTypeTree.distTypes[distTypeTree.prefix + typeData.ID]; let parent = distTypeTree.distTypes[distTypeTree.prefix + typeData.ParentID]; if(parent){ distType.parent = parent; parent.children.push(distType); } }); distTypeTree.distTypesArr.forEach(function (distTypeObj) { if(distTypeObj.data.fullName !== '材料' && distTypeObj.data.fullName !== '机械'){ distTypeTree.comboDatas.push({text: distTypeObj.data.fullName, value: distTypeObj.data.ID}); } }); return distTypeTree; }, doInsertGLJ:function () { var selected = projectObj.project.mainTree.selected; var project= projectObj.project; if(gljOprObj.GLJSelection.length<=0){ return; } $("#glj_tree_div").modal('hide'); project.ration_glj.insertGLJAsRation(gljOprObj.GLJSelection,selected,function (result) { project.projectGLJ.loadData(); gljOprObj.showRationGLJSheetData(); }) }, doAddGLJ:function () { var selected = projectObj.project.mainTree.selected; var project= projectObj.project; gljOprObj.GLJSelection= _.filter(gljOprObj.GLJSelection,function (n) { var rg = _.find(gljOprObj.sheetData,function (item) { var i_key = gljOprObj.getIndex(item,['code','name','specs','unit','type']); return n==i_key }) return rg?false:true; }) if(gljOprObj.GLJSelection.length>0&&selected&&selected.sourceType==ModuleNames.ration){ $("#glj_tree_div").modal('hide'); project.ration_glj.addGLJByLib(gljOprObj.GLJSelection,selected.data,function (result) { if(result){ selected.data.adjustState=result.adjustState; //project.ration_glj.datas = project.ration_glj.datas.concat(result.newRecodes);//显示和缓存统一,这样的话就不用更新两个位置了 project.ration_glj.datas = project.ration_glj.datas.concat(result.showData); gljOprObj.sheetData = gljOprObj.sheetData.concat(result.showData); gljOprObj.showRationGLJSheetData(); project.ration_glj.addToMainTree(result.showData); project.projectGLJ.loadData(); project.calcProgram.calculate(selected); project.calcProgram.saveNode(selected); projectObj.mainController.refreshTreeNode([selected]); $.bootstrapLoading.end(); } });//doc.rationID=selected.data.ID; }else { $("#glj_tree_div").modal('hide'); } }, doReplaceGLJ:function () { var me=this; var oldData=me.sheetData[gljContextMenu.selectedRow]; var project= projectObj.project; var selectCode=gljOprObj.GLJSelection[0]; var selected = projectObj.project.mainTree.selected; $("#glj_tree_div").modal('hide'); project.ration_glj.replaceGLJ(selectCode,oldData,function (result) { if(result){ //result.adjustState; var data =result.data; var index = _.findIndex(gljOprObj.sheetData,{'ID':data.ID}); var nodes = [selected]; gljOprObj.sheetData[index]=data; gljOprObj.showRationGLJSheetData(); if(project.ration_glj.needShowToTree(data)){//当替换的是主材或设备时,刷新对应的树节点 var node = project.ration_glj.findGLJNodeByID(data.ID); if(node){ project.ration_glj.transferToNodeData(data); node.source = data; node.data = data; } node?nodes.push(node):""; } //project.ration_glj.addToMainTree(data); project.projectGLJ.loadData(); selected.data.adjustState=result.adjustState; projectObj.mainController.refreshTreeNode(nodes); project.calcProgram.calculate(selected); project.calcProgram.saveNode(selected); } $.bootstrapLoading.end(); }) }, doMReplaceGLJ:function () { var me=this; var oldData=me.sheetData[gljContextMenu.selectedRow]; var project= projectObj.project; var selectCode=me.GLJSelection[0]; $("#glj_tree_div").modal('hide'); project.ration_glj.mReplaceGLJ(selectCode,oldData,function (result) { var data=result.data; var stateList= result.stateList; var n_index = me.getIndex(data.query,['code','name','specs','unit','type']); var nodes=[]; _.forEach(project.ration_glj.datas,function (t) { var t_index =me.getIndex(t,['code','name','specs','unit','type']); if(n_index==t_index){ me.updateProperty(t,data.doc); if(project.ration_glj.needShowToTree(t)){//如果是造价书中的树节点,则也须刷新 project.ration_glj.transferToNodeData(t); var node = project.ration_glj.findGLJNodeByID(t.ID); nodes.push(node); } } }) me.showRationGLJSheetData(); project.projectGLJ.loadData(); var rationNodes= me.refreshStateAfterMreplace(stateList,nodes); project.calcProgram.calcRationsAndSave(rationNodes); $.bootstrapLoading.end(); }) }, updateProperty:function (obj,doc) { _.forEach(doc, function(n, key) { obj[key] = n; }); }, refreshStateAfterMreplace:function (stateList,gljNodes) { var nodes=[]; var rationNodes=[]; _.forEach(stateList,function (s) { var node = _.find(projectObj.project.mainTree.items,function (n) { return n.sourceType==ModuleNames.ration&&n.data.ID==s.rationID; }) if(node){ node.data.adjustState=s.adjustState; nodes.push(node); rationNodes.push(node); } }); gljNodes.length>0?nodes = nodes.concat(gljNodes):""; projectObj.mainController.refreshTreeNode(nodes); return rationNodes; }, refreshView:function () { this.showRationGLJData(); }, // refreshTreeNode:function (obj) { if(!obj){ return; } var objectArray =[]; var nodes =[]; if(obj instanceof Array){ objectArray.concat(obj); }else { objectArray.push(obj); } for(let o of objectArray ){ var node = _.find(projectObj.project.mainTree.items,function (n) { return n.sourceType==o.type&&n.data.ID==o.ID; }) if(node){ for (var k in o.data){ node.data[k] = o.data[k]; } nodes.push(node); } } projectObj.mainController.refreshTreeNode(nodes); }, getTreeNodeCellType:function (data) { var ns = GC.Spread.Sheets; var rectW = 10; var rectH = 10; var margin = 3; function TreeNodeCellType() { } function drowRect(ctx,x,y,w,h) { ctx.save(); ctx.strokeStyle = "gray"; ctx.translate(0.5,0.5); ctx.beginPath(); var rectX = x+margin; var rectY = y+ Math.round(h/2)-rectH/2; ctx.moveTo(rectX, rectY); ctx.lineTo(rectX, rectY+rectH); ctx.lineTo(rectX+rectW, rectY+rectH); ctx.lineTo(rectX+rectW, rectY); ctx.lineTo(rectX, rectY); ctx.moveTo(rectX+rectW, y+Math.round(h/2)); ctx.lineTo(rectX+rectW+5, y+Math.round(h/2)); ctx.stroke(); ctx.restore(); } function drowSymbol(ctx,x,y,w,h,collapsed) { ctx.save(); ctx.strokeStyle = "#000000"; ctx.translate(0.5, 0.5); ctx.beginPath(); ctx.moveTo(x+margin+2, y+Math.round(h/2)); ctx.lineTo(x+margin+8, y+Math.round(h/2)); var rectY = y+ Math.round(h/2)-rectH/2; if(collapsed){ ctx.moveTo(x+margin+rectW/2,rectY+2); ctx.lineTo(x+margin+rectW/2,rectY+2+6); } ctx.stroke(); ctx.restore(); } function drowSubItem(ctx,x,y,w,h,offset,nextItem) { offset+=6; ctx.save(); ctx.strokeStyle = "gray"; ctx.translate(0.5, 0.5); ctx.beginPath(); ctx.moveTo(x+offset, y); ctx.lineTo(x+offset, y+Math.round(h/2)); offset+=9; ctx.lineTo(x+offset, y+Math.round(h/2)); if(nextItem&&nextItem.isMixRatio){ ctx.moveTo(x+offset-9, y+Math.round(h/2)); ctx.lineTo(x+offset-9, y+h); } ctx.stroke(); ctx.restore(); return offset; } TreeNodeCellType.prototype = new ns.CellTypes.Text(); TreeNodeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) { if(value!=null){ var offset = margin+rectW+6; var recode = data[options.row]; if(recode&&recode.hasOwnProperty('subList')){ drowRect(ctx,x,y,w,h); var collapsed = recode.collapsed==undefined?true:recode.collapsed;//options.sheet.getTag(options.row,options.col); drowSymbol(ctx,x,y,w,h,collapsed); }else if(recode&&recode.isMixRatio){ offset= drowSubItem(ctx,x,y,w,h,offset,data[options.row+1]); offset+=1; } ctx.fillText(value,x+offset+ctx.measureText(value).width,y+h-5); } }; // override getHitInfo to allow cell type get mouse messages TreeNodeCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) { return { x: x, y: y, row: context.row, col: context.col, cellStyle: cellStyle, cellRect: cellRect, sheetArea: context.sheetArea }; } TreeNodeCellType.prototype.processMouseDown = function (hitinfo) { var recode = data[hitinfo.row]; if(recode&&recode.hasOwnProperty('subList')){ var hoffset= hitinfo.cellRect.x+3; if (hitinfo.x > hoffset && hitinfo.x < hoffset + 10){ var collapsed = recode.collapsed==undefined?true:recode.collapsed; collapsed = !collapsed recode.collapsed=collapsed; //hitinfo.sheet.setTag(hitinfo.row,hitinfo.col,collapsed); hitinfo.sheet.getRange(hitinfo.row+1, -1, recode.subList.length, -1).visible(!collapsed); hitinfo.sheet.invalidateLayout(); hitinfo.sheet.repaint(); } } }; return new TreeNodeCellType() }, marketPriceReadOnly:function(node){ return node.data.type==gljType.CONCRETE||node.data.type==gljType.MORTAR||node.data.type==gljType.MIX_RATIO||node.data.type==gljType.GENERAL_MACHINE||node.data.isEstimate==1 } } $(function(){ $('#glj_tree_div').on('shown.bs.modal', function (e) { if(gljOprObj.gljLibSpresd==undefined){ gljOprObj.gljLibSpresd=sheetCommonObj.buildSheet($('#gljLibSheet')[0], gljOprObj.gljLibSheetSetting, gljOprObj.stdGLJ.length+gljOprObj.complementaryGLJs.length); gljOprObj.gljLibSpresd.bind(GC.Spread.Sheets.Events.ButtonClicked,gljOprObj.onButtonClick); gljOprObj.gljLibSheet = gljOprObj.gljLibSpresd.getSheet(0); gljOprObj.gljLibSheet.options.isProtected = true; gljOprObj.gljLibSheet.name('glj_lib'); } gljOprObj.gljLibSheetData =gljOprObj.AllRecode; var selected=null; if($('#actionType').val()=='add'||$('#actionType').val()=='insert'){ gljOprObj.GLJSelection=[]; }else { selected=gljOprObj.sheetData[gljContextMenu.selectedRow]; var connect_key = gljOprObj.getIndex(selected,['code','name','specs','unit','type']) gljOprObj.GLJSelection=[connect_key]; gljOprObj.filterLibGLJByType(); } if(selected!=null){ var s_key = gljOprObj.getIndex(selected,['code','name','specs','unit','gljType']); var r = _.find(gljOprObj.gljLibSheetData,function (item) { var item_key = gljOprObj.getIndex(item,['code','name','specs','unit','type']); return s_key == item_key; }); r?r.select=1:""; } gljOprObj.showLibGLJSheetData(); }); $('.glj-radio').change(function () { let val = $("input[name='glj']:checked").val(); if(val=='allGljs'){ gljOprObj.gljLibSheetData =gljOprObj.AllRecode; gljOprObj.filterLibGLJSheetData(); gljOprObj.showLibGLJSheetData(); }else { gljOprObj.gljLibSheetData=gljOprObj[val]; gljOprObj.filterLibGLJSheetData(); gljOprObj.showLibGLJSheetData(); } }) $('#glj_selected_conf').click(function () { if(gljOprObj.GLJSelection.length<1){ return; } if($('#actionType').val()=='insert'){ //造价书页面中插入定额类型的工料机 gljOprObj.doInsertGLJ(); }else if($('#actionType').val()=='add'){ //添加工料机 gljOprObj.doAddGLJ(); }else if($('#actionType').val()=='replace'){//替换工料机 gljOprObj.doReplaceGLJ(); }else if($('#actionType').val()=='m_replace'){//批量替换工料机 gljOprObj.doMReplaceGLJ(); } }) $('#class_selected_conf').click(function () { var gljClass = $('#selected_class').val(); var glj = gljOprObj.selectedGLJClass; if(glj&&gljClass&&gljClass!=""){ //保存到我的工料机库 /*1 检查是否有组成物 * 2 如果有,则检查组成物中是否有新增的记录,如果有,查看是否已经保存了,没有的话,要先添加组成物到补充工料机库 * 3 保存 * */ var newItem={ code:glj.code, name:glj.name, specs:glj.specs, unit:glj.unit, basePrice:glj.basePrice, gljType:glj.type, shortName:glj.shortName, component:[], gljClass:gljClass }; if(glj.hasOwnProperty("subList")&&glj.subList.length>0){//有组成物,检查组成物信息,目前组成物不允许修改,所以暂时不用考虑组成物是新增的情况 for(var i=0;i