/** * Created by zhang on 2018/8/23. */ let materialOjb = { billsSpread:null, materialSpread:null, billsList:JSON.parse(billsList), materialList:[], billsSetting:{ header: [ {headerName: "清单编号", headerWidth: 180, dataCode: "code", dataType: "String",formatter: "@"}, {headerName: "清单名称", headerWidth: 240, dataCode: "name", dataType: "String"}, {headerName: "规则", headerWidth: 150, dataCode: "rule", hAlign: "left", dataType: "String",cellType:'comboBox',editorValueType:true,options:[{text:"规则1",value:1},{text:"规则2",value:2}]} ], view: { lockColumns: [1] }, headerHeight:45 }, materialSetting:{ header: [ {headerName: "材料编号", headerWidth: 180, dataCode: "code", dataType: "String"}, {headerName: "材料名称", headerWidth: 240, dataCode: "name", dataType: "String",cellType:'tipsCell'}, {headerName: "规格", headerWidth: 150, dataCode: "specs", hAlign: "left", dataType: "String",cellType:'tipsCell'} ], view: { lockColumns: [1,2] }, headerHeight:45 }, initSpread:function () { if(!this.billsSpread){ this.billsSpread = SheetDataHelper.createNewSpread($("#billsSpread")[0]); } if(!this.materialSpread){ this.materialSpread = SheetDataHelper.createNewSpread($("#materialSpread")[0]); } this.billsSheet = this.billsSpread .getSheet(0); sheetCommonObj.initSheet(this.billsSheet,this.billsSetting, 30); this.billsSheet.name('billsSheet'); this.billsSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onBillsValueChange); this.billsSheet.bind(GC.Spread.Sheets.Events.SelectionChanged,this.onBillsSelectionChange); this.initRightClick("billsSpread",this.billsSpread); this.materialSheet = this.materialSpread .getSheet(0); sheetCommonObj.initSheet(this.materialSheet,this.materialSetting, 30); this.materialSheet.name('materialSheet'); this.initRightClick("materialSpread",this.materialSpread); this.refreshSheet(); }, canDelete : function (sheet) { let me = this; let sel = sheet.getSelections()[0]; let datas = sheet.name() == 'billsSheet'?me.billsList:me.materialList; if(sel.row === undefined || sel.row < 0) return false ;//一行都没选中时,不能删除 if((sel.row + sel.rowCount) > datas.length) return false;//选中了空行,不能删除 return true; }, deleteBills : async function(sheet){ let me = this,deleteList = []; let sel = sheet.getSelections()[0]; for(let i = 0;i 0) await me.saveBills(deleteList); function getDeleteDatas(tem) { return {type:'delete', ID:tem.ID} } }, initRightClick : function(id,spread) { let me = this; let sheet = spread.getActiveSheet(); $.contextMenu({ selector: '#'+id, build: function ($trigger, e) { me.rightClickTarget = SheetDataHelper.safeRightClickSelection($trigger, e, spread); return me.rightClickTarget.hitTestType === GC.Spread.Sheets.SheetArea.viewport || me.rightClickTarget.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader; }, items: { "delete": { name: "删除", icon: 'fa-trash-o', disabled: function () { return !me.canDelete(sheet); }, callback: function (key, opt) { sheet.name() == 'billsSheet' ? me.deleteBills(sheet):""; console.log( me.rightClickTarget); } } } }); }, refreshSheet:function(){ sheetCommonObj.showData(this.billsSheet,this.billsSetting,this.billsList); this.billsSheet.setRowCount(this.billsList.length + 1); }, onBillsSelectionChange:function (sander,args) { args.sheet.repaint(); }, onBillsValueChange: function(sander,args){ let me = materialOjb; let field = me.billsSetting.header[args.col].dataCode; let code = null; if(args.row < me.billsList.length){ code = me.billsList[args.row].code; } if(me.validateBills(field,args.newValue)){ let data = me.getUpdateData(field,args.newValue,code); if (data){ me.saveBills([data]); return; } } me.refreshSheet(); }, validateBills:function (field,value) { if(field == 'code'){ if(value.length !== 9){ alert("清单长度不正确"); return false; } if(_.find(this.billsList,{'code':value})) { alert("清单已存在"); return false; } } return true; }, getUpdateData:function (field,newValue,code) { if(field == 'code'){ if(!isDef(code) || code ==''&&newValue!=null){//说明是新增 return { type:'add', code:newValue.toString(), libID:$('#libID').val(), billsLibId:parseInt($('#billsLibId').val()) } }else {//说明是替换 return { type:'update', oldCode:code.toString(), newCode:newValue.toString(), libID:$('#libID').val(), billsLibId:parseInt($('#billsLibId').val()) } } }else if(isDef(code)){ let updateData = {}; updateData[field] = newValue; return { type:'update', oldCode:code.toString(), libID:$('#libID').val(), updateData:updateData } } }, saveBills:async function (datas) { try { let result = await ajaxPost("/materialReplace/saveBills",datas); let missCodes = []; for(let r of result){ if(r.missCodes && r.missCodes.length >0) missCodes =missCodes.concat(r.missCodes); if(r.type == 'add'){ this.billsList = this.billsList.concat(r.list); }if(r.type == 'update'){ for(let l of r.list){ this.updateCache(l.code,l.updateData) } }if(r.type == 'delete'){ _.remove(this.billsList,function (item) { return _.includes(r.list,item.ID) }) } } if(missCodes.length > 0) alert(`没有找到清单:${missCodes.join("、")}`); this.refreshSheet(); }catch (err){ console.log(err); } }, updateCache:function (code,updateData) { let bill = _.find(this.billsList,{'code':code}); for(let key of updateData){ bill[key] = updateData[key] } } }; function isDef(obj) { return obj!==undefined && obj!==null; } materialOjb.initSpread();