Ext.QuickTips.init(); Ext.define('erp.controller.fa.ars.VoucherNumber', { extend: 'Ext.app.Controller', FormUtil: Ext.create('erp.util.FormUtil'), BaseUtil: Ext.create('erp.util.BaseUtil'), GridUtil: Ext.create('erp.util.GridUtil'), views:[ 'fa.ars.VoucherNumber', 'core.form.MonthDateField', 'common.editorColumn.GridPanel' ], init:function(){ var me = this; this.control({ 'button[id=query]': { click: function(btn) { var grid = btn.up('form').ownerCt.down('gridpanel'); me.query(grid); } }, 'button[id=number]': { click: function(btn) { var grid = btn.up('form').ownerCt.down('gridpanel'); me.insertBreakNumber(grid); Ext.getCmp('vo_breaks').setValue(''); grid.store.sort({ property : 'vo_number', direction: 'ASC' }); } }, 'button[id=save]': { click: function(btn) { var grid = btn.up('form').ownerCt.down('gridpanel'); me.save(grid); } }, 'monthdatefield': { change: function(f) { if(f.hasValid()) { var grid = f.up('form').ownerCt.down('gridpanel'); me.query(grid); } } } }); }, getForm: function(btn){ return btn.ownerCt.ownerCt; }, query: function(grid){ grid.getGridColumnsAndStore('vo_yearmonth=' + Ext.getCmp('vo_yearmonth').value + ' order by vo_number'); this.getBreakNumber(grid); }, getBreakNumber: function(grid){ var max = grid.store.max('vo_number'),diff = []; if(max > 0) { var numbers = []; for(var i = 1;i <= max;i++) { numbers.push(i); } var nums = []; grid.store.each(function(item){ nums.push(Number(item.get('vo_number'))); }); grid.difference = diff = Ext.Array.difference(numbers, nums); Ext.getCmp('vo_breaks').setValue('断号:' + Ext.Array.concate(diff, '   ')); } else { Ext.getCmp('vo_breaks').setValue(''); } }, insertBreakNumber: function(grid){ var items = grid.store.data.items,len = items.length; for(var i = len-1;i>=0;i--) { if(grid.difference.length > 0) { if(grid.difference[0] < Number(items[i].get('vo_number'))) { items[i].set('vo_number', grid.difference[0]); Ext.Array.remove(grid.difference, grid.difference[0]); } } else { return; } } }, save: function(grid){ var dir = new Array(),numbers = [],num,bool = true,i = 0; grid.store.each(function(item){ i++; num = item.get('vo_number'); if(!Ext.Array.contains(numbers, num)) { numbers.push(num); } else { showError('有重号,位于第' + i + '行,凭证号:' + num); bool = false;return; } if(item.dirty) { dir.push({ vo_id: item.get('vo_id'), vo_number: num }); } }); if(bool && dir.length > 0) { grid.setLoading(true); Ext.Ajax.request({ url: basePath + 'fa/ars/insertBreakVoNumber.action', params: { data: Ext.encode(dir) }, async: false, callback: function(opt, s, r) { grid.setLoading(false); var res = Ext.decode(r.responseText); if(res.success) { alert('保存成功'); } } }); this.query(grid); } } });