Ext.define('erp.view.common.multiDbfind.GridPanel',{ extend: 'Ext.grid.Panel', alias: 'widget.erpMultiDbfindGridPanel', layout : 'fit', id: 'dbfindGridPanel', emptyText : $I18N.common.grid.emptyText, columnLines : true, autoScroll : true, multiselected: [], store: [], columns: [], multiselected: new Array(), selModel: Ext.create('Ext.selection.CheckboxModel',{ ignoreRightMouseSelection : false, checkOnly: true, listeners:{ selectionchange:function(selModel, selected, options){ selModel.view.ownerCt.setMultiValues(selected); trigger.multiRecords = selected; } } }), plugins: [Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit: 1 }), Ext.create('Ext.ux.grid.GridHeaderFilters')], initComponent : function(){ this.callParent(arguments); this.getCount(); }, RenderUtil: Ext.create('erp.util.RenderUtil'), setMultiValues: function(selected) { if(selected.length > 0) { if(dbfinds){ var keys = Ext.Object.getKeys(selected[0].data); Ext.Array.each(selected, function(item){ var keyValues = item.data; Ext.each(keys, function(k){ Ext.Array.each(dbfinds,function(ds){ if(k == ds.dbGridField) { if(ds.field && parent.Ext.getCmp(ds.field)){ if(trigger.multiValue == null){ trigger.multiValue = new Object(); } if(trigger.multiValue[ds.field] == null || trigger.multiValue[ds.field] == ''){ trigger.multiValue[ds.field] = keyValues[k]; } else if(!contains(trigger.multiValue[ds.field], keyValues[k], true)){ trigger.multiValue[ds.field] = trigger.multiValue[ds.field] + '#' + keyValues[k]; } } } }); }); }); } else { trigger.multiValue = selected; } } else { if(dbfinds) trigger.multiValue = {}; else trigger.multiValue = []; } }, getColumnsAndStore: function(c, d, g, s){ var me = this; c = c || caller; d = d || condition; g = g || page; s = s || pageSize; var f = d; if(me.filterCondition){ if(d == null || d == ''){ f = me.filterCondition; } else { f += ' AND ' + me.filterCondition; } } me.setLoading(true); Ext.Ajax.request({//拿到grid的columns url : basePath + 'common/dbfind.action', method : 'post', params : { which : which, caller : c, field: key, condition: f, page: g, pageSize: s }, callback : function(options, success, response){ me.setLoading(false); var res = new Ext.decode(response.responseText); if(res.exceptionInfo){ showError(res.exceptionInfo);return } 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); } me.selectDefault(); } else { //处理render var grid = this; Ext.Array.each(res.columns, function(column, y) { if(!column.haveRendered && column.renderer != null && column.renderer != ""){ if(!grid.RenderUtil){ grid.RenderUtil = Ext.create('erp.util.RenderUtil'); } var renderName = column.renderer; if(contains(column.renderer, ':', true)){ var args = new Array(); Ext.each(column.renderer.split(':'), function(a, index){ if(index == 0){ renderName = a; } else { args.push(a); } }); if(!grid.RenderUtil.args[renderName]){ grid.RenderUtil.args[renderName] = new Object(); } grid.RenderUtil.args[renderName][column.dataIndex] = args; } column.renderer = grid.RenderUtil[renderName]; column.haveRendered = true; } }); me.reconfigure(Ext.create('Ext.data.Store', { fields: res.fields, data: data }), res.columns); Ext.getCmp('pagingtoolbar').afterOnLoad(); dbfinds = res.dbfinds; me.selectDefault(); } } }); }, getCount: function(c, d){ var me = this; c = c || caller; d = d || condition; var f = d; if(me.filterCondition){ if(d == null || d == ''){ f = me.filterCondition; } else { f += ' AND ' + me.filterCondition; } } Ext.Ajax.request({//拿到grid的数据总数count url : basePath + 'common/dbfindCount.action', params : { which : which, caller : c, field: key, condition: f }, method : 'post', callback : function(options,success,response){ var res = new Ext.decode(response.responseText); dataCount = res.count; me.getColumnsAndStore(c, d); } }); }, selectDefault: function(){ var grid = this; if(!Ext.isEmpty(trigger.value)){ var f = ''; Ext.each(dbfinds, function(d){ if(d.field == key){ f = d.dbGridField; } }); var arr = trigger.value.split('#'); var def = new Array(); Ext.each(grid.store.data.items, function(item){ if(Ext.Array.contains(arr, item.data[f])){ def.push(item); var keyValues = item.data; Ext.each(Ext.Object.getKeys(keyValues), function(k){ Ext.Array.each(dbfinds,function(ds){ if(k == ds.dbGridField) { if(parent.Ext.getCmp(ds.field)){ if(trigger.multiValue == null){ trigger.multiValue = new Object(); } if(trigger.multiValue[ds.field] == null || trigger.multiValue[ds.field] == ''){ trigger.multiValue[ds.field] = keyValues[k]; } else if(!contains(trigger.multiValue[ds.field], keyValues[k], true)){ trigger.multiValue[ds.field] = trigger.multiValue[ds.field] + '#' + keyValues[k]; } } } }); }); } }); grid.selModel.select(def); } }, listeners: { 'headerfiltersapply': function(grid, filters) { if(this.allowFilter){ var condition = null; for(var fn in filters){ var value = filters[fn],f = grid.getHeaderFilterField(fn); if(!Ext.isEmpty(value)){ if(f.filtertype) { if (f.filtertype == 'numberfield') { value = fn + "=" + value + " "; } } else { if(Ext.isDate(value)){ value = Ext.Date.toString(value); value = "to_char(" + fn + ",'yyyy-MM-dd')='" + value + "' "; } else { var exp_t = /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/, exp_d = /^(\d{4})\-(\d{2})\-(\d{2})$/; if(exp_d.test(value)){ value = "to_char(" + fn + ",'yyyy-MM-dd')='" + value + "' "; } else if(exp_t.test(value)){ value = "to_char(" + fn + ",'yyyy-MM-dd')='" + value.substr(0, 10) + "' "; } else{ if(!f.autoDim) { value = fn + " LIKE '" + value + "%' "; } else { value = fn + " LIKE '%" + value + "%' "; } } } } if(condition == null){ condition = value; } else { condition = condition + " AND " + value; } } } this.filterCondition = condition; page = 1; this.getCount(); } else { this.allowFilter = true; } return false; } } });