| 
					
				 | 
			
			
				@@ -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; 
			 |