Ext.define('erp.view.common.dbfind.GridPanel',{ extend: 'Ext.grid.Panel', alias: 'widget.erpDbfindGridPanel', layout : 'fit', id: 'dbfindGridPanel', emptyText : $I18N.common.grid.emptyText, columnLines : true, autoScroll : true, store: [], columns: [], selModel: Ext.create('Ext.selection.CheckboxModel',{ headerWidth: 0 }), BaseUtil: Ext.create('erp.util.BaseUtil'), bodyStyle:'background-color:#f1f1f1;', dockedItems: [{ id : 'pagingtoolbar', xtype: 'erpDbfindToolbar', dock: 'bottom', displayInfo: true }], plugins: [Ext.create('Ext.ux.grid.GridHeaderFilters')], initComponent : function(){ this.callParent(arguments); this.getCount(); }, getColumnsAndStore: function(){ var me = this; var c = condition; if(me.filterCondition){ c += ' AND ' + me.filterCondition; } Ext.Ajax.request({//拿到grid的columns url : basePath + 'common/dbfind.action', method : 'post', params : { which : which, caller : caller, field: key, condition: c, ob: dbOrderby,// dynamic order by page: page, pageSize: pageSize }, callback : function(options,success,response){ var res = new Ext.decode(response.responseText); if(res.exceptionInfo){ showError(res.exceptionInfo);return; } if(res.autoHeight) { me.addCls('custom-grid-autoheight');//自适应样式 } var data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')); if(me.columns && me.columns.length > 2){ me.store.loadData(data); if(me.store.data.items.length != data.length){ me.store.add(data); } //修改pagingtoolbar信息 Ext.getCmp('pagingtoolbar').afterOnLoad(); } else { me.reconfigure(Ext.create('Ext.data.Store', { storeId: 'dbfindGridPanelStore', fields: res.fields, data: data }), res.columns); //修改pagingtoolbar信息 Ext.getCmp('pagingtoolbar').afterOnLoad(); dbfinds = res.dbfinds; me.resetable = res.reset;//允许重置条件 if(me.resetable){ parent.Ext.getCmp('dbwin').down('#reset').show(); } } } }); }, getCount: function(){ var me = this; var c = condition; if(me.filterCondition){ c += ' AND ' + me.filterCondition; } Ext.Ajax.request({//拿到grid的数据总数count url : basePath + 'common/dbfindCount.action', params : { which : which, caller : caller, field: key, condition: c }, method : 'post', callback : function(options,success,response){ var res = new Ext.decode(response.responseText); dataCount = res.count; me.getColumnsAndStore(); } }); }, listeners: { 'beforeheaderfiltersapply': function(grid, filters) { if(this.allowFilter){ var condition = null; for(var fn in filters){ var value = filters[fn]; if(!Ext.isEmpty(value)){ var SimplizedValue=this.BaseUtil.Simplized(value); if(fn.ignoreCase) {// 忽略大小写 fn = 'upper(' + fn + ')'; value = value.toUpperCase(); } if(SimplizedValue!=value){ value = "("+fn + " LIKE '%" + value + "%' or "+fn+" LIKE '%"+SimplizedValue+"%')"; }else value = fn + " LIKE '%" + value + "%' "; Ext.each(grid.columns, function(c){ if(c.dataIndex == fn && c.xtype == 'datecolumn'){//日期形式的特殊处理成oracle支持的格式哦 value = fn + "=to_date('" + Ext.Date.toString(filters[fn]) + "','YYYY-MM-DD') "; } }); if(condition == null){ condition = value; } else { condition = condition + " AND " + value; } } } this.filterCondition = condition; page = 1; this.getCount(); return false; } else { this.allowFilter = true; return false; } } }, reconfigure: function(store, columns){ //改写reconfigure方法 var d = this.headerCt; if (this.columns.length <= 1 && columns) {//this.columns.length > 1表示grid的columns已存在,没必要remove再add if(!Ext.isChrome){//ie,firefox下,format出现NaN-NaN-NaN,暂时作string处理 Ext.each(columns, function(c){ if(c.xtype == 'datecolumn'){ c.xtype = ""; c.format = ""; } }); } d.suspendLayout = true; d.removeAll(); d.add(columns); } if (store) { if(!Ext.isChrome){//ie,firefox下,format出现NaN-NaN-NaN Ext.each(store.fields, function(f){ if(f.type == 'date'){ f.type = "string"; f.format = ""; } }); } this.bindStore(store); } else { this.getView().refresh(); } if (columns) { d.suspendLayout = false; this.forceComponentLayout(); } this.fireEvent("reconfigure", this); }, /** * 重置条件 * dbfindSet.ds_allowreset(1-允许) * dbfindSetUI.ds_allowreset(1-允许) */ resetCondition: function(){ condition = this.getCondition(); this.filterCondition = ''; var fields = this.plugins[0].fields; Ext.each(Ext.Object.getKeys(fields), function(key){ fields[key].reset(); }); }, getCondition: function() { condition = 'upper(' + key + ") like '%%'"; if(!trigger.ownerCt){//如果是grid的dbfind condition = 'upper(' + keyField + ") like '%%'"; if(dbGridCondition && dbGridCondition != null){ condition += " AND " + dbGridCondition.replace(/IS/g, '='); } } if(dbCondition && dbCondition != null){ condition += " AND " + dbCondition.replace(/IS/g, '='); } if(dbBaseCondition && dbBaseCondition != null){ condition += " AND " + dbBaseCondition.replace(/IS/g,'='); } return condition; } });