|  | @@ -5,6 +5,7 @@
 | 
	
		
			
				|  |  |  let materialOjb = {
 | 
	
		
			
				|  |  |      billsSpread:null,
 | 
	
		
			
				|  |  |      materialSpread:null,
 | 
	
		
			
				|  |  | +    allBills:JSON.parse(billsList),
 | 
	
		
			
				|  |  |      billsList:JSON.parse(billsList),
 | 
	
		
			
				|  |  |      materialList:[],
 | 
	
		
			
				|  |  |      billsSetting:{
 | 
	
	
		
			
				|  | @@ -49,6 +50,9 @@ let materialOjb = {
 | 
	
		
			
				|  |  |          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();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -68,14 +72,19 @@ let materialOjb = {
 | 
	
		
			
				|  |  |              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();
 | 
	
	
		
			
				|  | @@ -94,20 +103,53 @@ let materialOjb = {
 | 
	
		
			
				|  |  |                          return !me.canDelete(sheet);
 | 
	
		
			
				|  |  |                      },
 | 
	
		
			
				|  |  |                      callback: function (key, opt) {
 | 
	
		
			
				|  |  | -                        sheet.name() == 'billsSheet' ? me.deleteBills(sheet):"";
 | 
	
		
			
				|  |  | +                        sheet.name() == 'billsSheet' ? me.deleteBills(sheet):me.deleteMaterial(sheet);
 | 
	
		
			
				|  |  |                         console.log( me.rightClickTarget);
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    refreshSheet:function(){
 | 
	
		
			
				|  |  | +    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;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    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 () {
 | 
	
		
			
				|  |  | +        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) {
 | 
	
	
		
			
				|  | @@ -117,14 +159,14 @@ let materialOjb = {
 | 
	
		
			
				|  |  |              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){
 | 
	
		
			
				|  |  | -                        let data = me.getUpdateData(field,newValue,me.billsList[c.row].code);
 | 
	
		
			
				|  |  | -                        if(data) updateDatas.push(data);
 | 
	
		
			
				|  |  | +                         data = me.getUpdateData(field,newValue,me.billsList[c.row].code);
 | 
	
		
			
				|  |  |                      }else if(field == 'code'){//如果是在空白行粘贴,并且是编码列,则是新增,其它的忽略;
 | 
	
		
			
				|  |  | -                        let data = me.getUpdateData(field,newValue,null);
 | 
	
		
			
				|  |  | -                        if(data) updateDatas.push(data);
 | 
	
		
			
				|  |  | +                         data = me.getUpdateData(field,newValue,null);
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | +                    if(data) updateDatas.push(data);
 | 
	
		
			
				|  |  |                  }else {
 | 
	
		
			
				|  |  |                      break;
 | 
	
		
			
				|  |  |                  }
 | 
	
	
		
			
				|  | @@ -136,8 +178,33 @@ let materialOjb = {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |           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(sander,args){
 | 
	
		
			
				|  |  | +    onBillsValueChange: function(sender,args){
 | 
	
		
			
				|  |  |          let me = materialOjb;
 | 
	
		
			
				|  |  |          let field = me.billsSetting.header[args.col].dataCode;
 | 
	
		
			
				|  |  |          let code = null;
 | 
	
	
		
			
				|  | @@ -153,7 +220,35 @@ let materialOjb = {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          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, "");//去除空格换行等字符;
 | 
	
	
		
			
				|  | @@ -168,10 +263,40 @@ let materialOjb = {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          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){//说明是新增
 | 
	
		
			
				|  |  | +            if((!isDef(code) || code =='')&&newValue!=null){//说明是新增
 | 
	
		
			
				|  |  |                  return {
 | 
	
		
			
				|  |  |                      type:'add',
 | 
	
		
			
				|  |  |                      code:newValue,
 | 
	
	
		
			
				|  | @@ -198,6 +323,19 @@ let materialOjb = {
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | +    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);
 | 
	
	
		
			
				|  | @@ -205,30 +343,87 @@ let materialOjb = {
 | 
	
		
			
				|  |  |              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);
 | 
	
		
			
				|  |  | +                    this.allBills = this.allBills.concat(r.list);
 | 
	
		
			
				|  |  |                  }if(r.type == 'update'){
 | 
	
		
			
				|  |  |                      for(let l of r.list){
 | 
	
		
			
				|  |  | -                        this.updateCache(l.code,l.updateData)
 | 
	
		
			
				|  |  | +                       this.updateBillsCache(l.code,l.updateData);
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }if(r.type == 'delete'){
 | 
	
		
			
				|  |  | -                     _.remove(this.billsList,function (item) {
 | 
	
		
			
				|  |  | +                    _.remove(this.allBills,function (item) {
 | 
	
		
			
				|  |  |                          return _.includes(r.list,item.ID)
 | 
	
		
			
				|  |  |                      })
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              if(missCodes.length > 0) alert(`没有找到清单:${missCodes.join("、")}`);
 | 
	
		
			
				|  |  | -            this.refreshSheet();
 | 
	
		
			
				|  |  |          }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);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    updateCache:function (code,updateData) {
 | 
	
		
			
				|  |  | -        let bill = _.find(this.billsList,{'code':code});
 | 
	
		
			
				|  |  | +    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){
 | 
	
		
			
				|  |  | -            bill[key] = updateData[key]
 | 
	
		
			
				|  |  | +            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;
 |