| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478 | 
							- /**
 
-  * Created by zhang on 2018/8/23.
 
-  */
 
- let materialOjb = {
 
-     billsSpread:null,
 
-     materialSpread:null,
 
-     allBills:JSON.parse(billsList),
 
-     billsList:JSON.parse(billsList),
 
-     stdBills:JSON.parse($("#testStd").val()),
 
-     materialList:[],
 
-     billsTreeSetting: {
 
-         treeCol: 0,
 
-         emptyRows: 0,
 
-         headRows: 1,
 
-         headRowHeight: [40],
 
-         defaultRowHeight: 21,
 
-         cols: [{
 
-             width: 200,
 
-             readOnly: true,
 
-             head: {
 
-                 titleNames: ["项目编码"],
 
-                 spanCols: [1],
 
-                 spanRows: [1],
 
-                 vAlign: [1],
 
-                 hAlign: [1],
 
-                 font: ["Arial"]
 
-             },
 
-             data: {
 
-                 field: "code",
 
-                 vAlign: 1,
 
-                 hAlign: 0,
 
-                 font: "Arial"
 
-             }
 
-         }, {
 
-             width: 200,
 
-             readOnly: true,
 
-             head: {
 
-                 titleNames: ["项目名称"],
 
-                 spanCols: [1],
 
-                 spanRows: [1],
 
-                 vAlign: [1],
 
-                 hAlign: [1],
 
-                 font: ["Arial"]
 
-             },
 
-             data: {
 
-                 field: "name",
 
-                 vAlign: 1,
 
-                 hAlign: 0,
 
-                 font: "Arial"
 
-             }
 
-         }]
 
-     },
 
-    /* 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",formatter: "@"},
 
-             {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.billsSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onBillsRangeChange);
 
-         this.initRightClick("billsSpread",this.billsSpread);
 
-         this.materialSheet = this.materialSpread .getSheet(0);
 
-         sheetCommonObj.initSheet(this.materialSheet,this.materialSetting, 30);
 
-         this.materialSheet.name('materialSheet');
 
-         this.materialSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onMaterialValueChange);
 
-         this.materialSheet.bind(GC.Spread.Sheets.Events.EditStarting, this.onMaterialEditStarting);
 
-         this.materialSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onMaterialRangeChange);
 
-         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<sel.rowCount;i++){
 
-             if(me.billsList[sel.row + i]) deleteList.push(getDeleteDatas(me.billsList[sel.row + i]));
 
-         }
 
-         if(deleteList.length > 0) await me.saveBills(deleteList);
 
-         function getDeleteDatas(tem) {
 
-             return {type:'delete', ID:tem.ID}
 
-         }
 
-     },
 
-     deleteMaterial:async function(sheet){
 
-         let me = this,deleteList = [];
 
-         let sel = sheet.getSelections()[0];
 
-         for(let i = 0; i<sel.rowCount;i++){
 
-             if(me.materialList[sel.row + i]) deleteList.push(me.getMaterialUpdateData(null,me.materialList[sel.row + i].ID,true));
 
-         }
 
-         if(deleteList.length > 0) await me.saveMaterial(deleteList);
 
-     },
 
-     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):me.deleteMaterial(sheet);
 
-                        console.log( me.rightClickTarget);
 
-                     }
 
-                 }
 
-             }
 
-         });
 
-     },
 
-     refreshSheet:async function(){
 
-         this.getBillsList();
 
-         sheetCommonObj.showData(this.billsSheet,this.billsSetting,this.billsList);
 
-         this.billsSheet.setRowCount(this.billsList.length + 30);
 
-         this.showMaterialList();
 
-     },
 
-     getBillsList:function () {
 
-         let keyword = $("#keyword").val();
 
-         if(isDef(keyword)&&keyword!==''){
 
-             this.billsList = _.filter(this.allBills,function (item) {
 
-                 return item.code.indexOf(keyword)!=-1 || item.name.indexOf(keyword)!=-1;
 
-             })
 
-         }else {
 
-             this.billsList = this.allBills;
 
-         }
 
-         this.billsList = _.sortBy(this.billsList,'code');
 
-     },
 
-     getMateriaList:async function () {
 
-         let billsItemID =  this.getCurrentBillsID();
 
-         if(billsItemID){
 
-             this.materialList = await this.getMaterialByBillsID(billsItemID)//getMaterialByBills
 
-         }else {
 
-             this.materialList = [];
 
-         }
 
-     },
 
-     showMaterialList:async function () {
 
-         await this.getMateriaList();
 
-         this.refreshMaterialSheet();
 
-     },
 
-     refreshMaterialSheet:function () {
 
-         this.materialList = _.sortBy(this.materialList,'code');
 
-         sheetCommonObj.showData(this.materialSheet,this.materialSetting,this.materialList);
 
-         this.materialSheet.setRowCount(this.materialList.length + 30);
 
-     },
 
-     onBillsSelectionChange:function (sender,args) {
 
-         let me = materialOjb;
 
-         let nsel = args.newSelections?args.newSelections[0]:null;
 
-         let osel = args.oldSelections?args.oldSelections[0]:null;
 
-         if(nsel && osel && nsel.row != osel.row){
 
-             me.showMaterialList();
 
-             me.materialSheet.showRow(0, GC.Spread.Sheets.VerticalPosition.top);
 
-         }
 
-         args.sheet.repaint();
 
-     },
 
-     onBillsRangeChange:function (sender,args) {
 
-         let me = materialOjb;
 
-         let updateDatas = [];
 
-         if(args.action == GC.Spread.Sheets.RangeChangedAction.paste){
 
-             for(let c of args.changedCells){
 
-                 let field = me.billsSetting.header[c.col].dataCode;
 
-                 let newValue =  args.sheet.getCell(c.row,c.col).value();
 
-                 let data = null;
 
-                 if(me.validateBills(field,newValue)){
 
-                     if(c.row < me.billsList.length){
 
-                          data = me.getUpdateData(field,newValue,me.billsList[c.row].code);
 
-                     }else if(field == 'code'){//如果是在空白行粘贴,并且是编码列,则是新增,其它的忽略;
 
-                          data = me.getUpdateData(field,newValue,null);
 
-                     }
 
-                     if(data) updateDatas.push(data);
 
-                 }else {
 
-                     break;
 
-                 }
 
-             }
 
-             if(updateDatas.length > 0){
 
-                 me.saveBills(updateDatas);
 
-                 return;
 
-             }
 
-         }
 
-          me.refreshSheet();
 
-     },
 
-     onMaterialRangeChange:function(sender,args){
 
-         let me = materialOjb;
 
-         let updateDatas = [];
 
-         if(args.action == GC.Spread.Sheets.RangeChangedAction.paste){
 
-             for(let c of args.changedCells){
 
-                 let code =  args.sheet.getCell(c.row,c.col).value(),data = null;
 
-                 if(me.validateMaterial(code)){
 
-                     if(c.row < me.materialList.length){
 
-                          data = me.getMaterialUpdateData(code,me.materialList[c.row].ID);
 
-                     }else {//如果是在空白行粘贴,并且是编码列,则是新增,其它的忽略;
 
-                          data = me.getMaterialUpdateData(code,null);
 
-                     }
 
-                     if(data) updateDatas.push(data);
 
-                 }else {
 
-                     break;
 
-                 }
 
-             }
 
-             if(updateDatas.length > 0){
 
-                 me.saveMaterial(updateDatas);
 
-                 return;
 
-             }
 
-         }
 
-         me.showMaterialList();
 
-     },
 
-     onBillsValueChange: function(sender,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();
 
-     },
 
-     onMaterialEditStarting : function (sender,args) {
 
-         let me = materialOjb;
 
-         if(!me.getCurrentBillsID()) args.cancel = true; //如果没选中清单则不能编辑
 
-     },
 
-     onMaterialValueChange:function(sender,args){
 
-         let me = materialOjb;
 
-         let ID = null;
 
-         if(args.row < me.materialList.length){
 
-             ID = me.materialList[args.row].ID;
 
-         }
 
-         if(me.validateMaterial(args.newValue)){
 
-             let data = me.getMaterialUpdateData(args.newValue,ID);
 
-             if(data){
 
-                 me.saveMaterial([data]);
 
-                 return
 
-             }
 
-         }
 
-         me.showMaterialList();
 
-     },
 
-     validateMaterial:function (value) {
 
-         value = value.toString().replace(/[\s\r\n]/g, "");//去除空格换行等字符;
 
-         if(_.find(this.materialList,{code:value})){
 
-             alert("人材机:"+value+" 已存在");
 
-             return false;
 
-         }
 
-         return true;
 
-     },
 
-     validateBills:function (field,value) {
 
-         if(field == 'code'){
 
-             value = value.toString().replace(/[\s\r\n]/g, "");//去除空格换行等字符;
 
-             if(value.length !== 9){
 
-                 alert("清单长度不正确");
 
-                 return false;
 
-             }
 
-             if(_.find(this.billsList,{'code':value})) {
 
-                 alert("清单:"+value+" 已存在");
 
-                 return false;
 
-             }
 
-         }
 
-         return true;
 
-     },
 
-     getCurrentBillsID:function(){
 
-       let sel = this.billsSheet.getSelections()[0];
 
-       if(sel.row < this.billsList.length){
 
-            return this.billsList[sel.row].ID;
 
-       }
 
-       return null;
 
-     },
 
-     getMaterialUpdateData:function(code,ID,isDelete){
 
-         if(isDelete == true){
 
-             return {type:'delete', ID:ID}
 
-         }
 
-         code = code.toString().replace(/[\s\r\n]/g, "");//去除空格换行等字符;
 
-         if((!isDef(ID)||ID=='')&& code != null){//新增
 
-             let billsItemID = this.getCurrentBillsID();
 
-             return {
 
-                 type:'add',
 
-                 code:code,
 
-                 billsItemID:billsItemID,
 
-                 libID:$('#libID').val(),
 
-                 gljLibID:parseInt($('#gljLibID').val())
 
-             }
 
-         }else { //替换材料
 
-             return {
 
-                 type:'update',
 
-                 ID:ID,
 
-                 code:code,
 
-                 gljLibID:parseInt($('#gljLibID').val())
 
-             }
 
-         }
 
-     },
 
-     getUpdateData:function (field,newValue,code) {
 
-         if(field == 'code'){
 
-             newValue = newValue.toString().replace(/[\s\r\n]/g, "");//去除空格换行等字符;
 
-             if((!isDef(code) || code =='')&&newValue!=null){//说明是新增
 
-                 return {
 
-                     type:'add',
 
-                     code:newValue,
 
-                     libID:$('#libID').val(),
 
-                     billsLibId:parseInt($('#billsLibId').val())
 
-                 }
 
-             }else {//说明是替换
 
-                 return {
 
-                     type:'update',
 
-                     oldCode:code.toString(),
 
-                     newCode:newValue,
 
-                     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
 
-             }
 
-         }
 
-     },
 
-     saveMaterial:async function(datas){
 
-         try {
 
-             let result = await ajaxPost("/materialReplace/saveMaterial",datas);
 
-             let missCodes = [];
 
-             for(let r of result){
 
-                 if(r.missCodes && r.missCodes.length >0) missCodes =missCodes.concat(r.missCodes);
 
-             }
 
-             if(missCodes.length > 0) alert(`没有找到人材机:${missCodes.join("、")}`);
 
-         }catch (err){
 
-             console.log(err);
 
-         }
 
-         this.showMaterialList();
 
-     },
 
-     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.allBills = this.allBills.concat(r.list);
 
-                 }if(r.type == 'update'){
 
-                     for(let l of r.list){
 
-                        this.updateBillsCache(l.code,l.updateData);
 
-                     }
 
-                 }if(r.type == 'delete'){
 
-                     _.remove(this.allBills,function (item) {
 
-                         return _.includes(r.list,item.ID)
 
-                     })
 
-                 }
 
-             }
 
-             if(missCodes.length > 0) alert(`没有找到清单:${missCodes.join("、")}`);
 
-         }catch (err){
 
-             console.log(err);
 
-         }
 
-         this.refreshSheet();
 
-     },
 
-     saveDatas:async function (datas,type ='bills') {
 
-         try {
 
-             let currentList = type =='bills'?this.billsList:this.materialList;
 
-             let url = type =='bills'?"/materialReplace/saveBills":"/materialReplace/saveMaterial";
 
-             let text = type =='bills'?"清单":"人材机";
 
-             let result = await ajaxPost(url,datas);
 
-             let missCodes = [];
 
-             for(let r of result){
 
-                 if(r.missCodes && r.missCodes.length >0) missCodes =missCodes.concat(r.missCodes);
 
-                 if(r.type == 'add'){
 
-                     currentList = currentList.concat(r.list);
 
-                 }if(r.type == 'update'){
 
-                     for(let l of r.list){
 
-                         type =='bills'?this.updateBillsCache(l.code,l.updateData):this.updateMaterialCache(l.ID,l.updateData);
 
-                     }
 
-                 }if(r.type == 'delete'){
 
-                     _.remove(currentList,function (item) {
 
-                         return _.includes(r.list,item.ID)
 
-                     })
 
-                 }
 
-             }
 
-             if(missCodes.length > 0) alert(`没有找到${text}:${missCodes.join("、")}`);
 
-         }catch (err){
 
-             console.log(err);
 
-         }
 
-     },
 
-     getMaterialByBillsID:async function(billsItemID){
 
-         try {
 
-             let result = await ajaxPost("/materialReplace/findMaterial",{billsItemID:billsItemID});
 
-             return result;
 
-         }catch (err){
 
-             console.log(err);
 
-             return [];
 
-         }
 
-     },
 
-     updateMaterialCache:function (ID,updateData) {
 
-         this.updateCache(this.materialList,{'ID':ID},updateData)
 
-     },
 
-     updateBillsCache:function (code,updateData) {
 
-          this.updateCache(this.allBills,{'code':code},updateData)
 
-     },
 
-     updateCache:function (list,condition,updateData) {
 
-         let item = _.find(list,condition);
 
-         for(let key in updateData){
 
-             item[key] = updateData[key]
 
-         }
 
-     }
 
- };
 
- let last = 0;
 
- $(document).ready(function () {
 
-     $("#keyword").on('input propertychange', function(event) {
 
-         last = event.timeStamp;//利用event的timeStamp来标记时间,这样每次事件都会修改last的值,注意last必需为全局变量
 
-         setTimeout(function () {    //设时延迟0.5s执行
 
-             if (last - event.timeStamp == 0) { //如果时间差为0(也就是你停止输入0.5s之内都没有其它的keyup事件发生)则做你想要做的事
 
-                materialOjb.refreshSheet();
 
-             }
 
-         }, 500);
 
-     })
 
- });
 
- function isDef(obj) {
 
-     return obj!==undefined && obj!==null;
 
- }
 
- materialOjb.initSpread();
 
 
  |