Ext.define('erp.view.sys.base.SimpleActionGrid',{ extend: 'Ext.grid.Panel', columns:[], alias: 'widget.simpleactiongrid', columnLines: true, viewConfig: { stripeRows: true, enableTextSelection: true//允许选中文字 }, frame: true, initComponent : function(){ if(this.autoRender)this.getGridColumnsAndStore(this, 'common/singleGridPanel.action', this.params); this.callParent(arguments); }, getGridColumnsAndStore: function(grid, url, param, no){ var me = this; var params={ caller:this.caller, condition:'1=1' }; //this.getGridColumnsAndStore(this, 'common/singleGridPanel.action', params, ""); grid.setLoading(true); Ext.Ajax.request({ url : basePath + url, params: param, async: (grid.sync ? false : true), method : 'post', callback : function(options,success,response){ grid.setLoading(false); if (!response) return; var res = new Ext.decode(response.responseText); if(res.exceptionInfo){ showError(res.exceptionInfo);return; } if(res.columns){ var limits = res.limits, limitArr = new Array(); if(limits != null && limits.length > 0) {//权限外字段 limitArr = Ext.Array.pluck(limits, 'lf_field'); } Ext.each(res.columns, function(column, y){ // column有取别名 if(column.dataIndex.indexOf(' ') > -1) { column.dataIndex = column.dataIndex.split(' ')[1]; } //power if(limitArr.length > 0 && Ext.Array.contains(limitArr, column.dataIndex)) { column.hidden = true; } if(column.xtype=='checkcolumn') delete column['renderer']; }); //data var data = []; if(res.data && res.data.length > 2){ data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')); } //store var store = me.setStore(grid, res.fields, data, grid.groupField, grid.necessaryField); //view if(grid.selModel && grid.selModel.views == null){ grid.selModel.views = []; } //dbfind if(res.dbfinds && res.dbfinds.length > 0){ grid.dbfinds = res.dbfinds; } //reconfigure res.columns=me.setColumns(res.columns); var columns=Ext.Array.insert(res.columns,0, [Ext.create('Ext.grid.RowNumberer'),{ xtype:'actioncolumn', width:45, text :'操作', items:[{ iconCls:'btn-edit', tooltip:'修改', handler:function(grid, rowIndex, colIndex,item) { var record = grid.getStore().getAt(rowIndex),gridpanel=grid.ownerCt; var win=Ext.widget('detailwindow',{ title:gridpanel.title, items:[Ext.widget('formportal',{ region:'center', caller:gridpanel.caller, updateUrl: gridpanel.updateUrl, currentTab:gridpanel, saveSuccess:me.DetailUpdateSuccess, emptyGrid:gridpanel.emptyGrid, condition:gridpanel.keyField+'='+record.get(gridpanel.keyField) })] }); win.showRelyBtn(win,grid); } }, { iconCls:'btn-delete', tooltip:'删除', width:75, handler:function(grid, rowIndex, colIndex) { Ext.Msg.confirm('删除数据?', '确定要删除当前选中行(行号:'+(rowIndex+1)+')?', function(choice) { if(choice === 'yes') { //var reviewStore = Ext.data.StoreMgr.lookup('reviewStore'); var record = grid.getStore().getAt(rowIndex),gridpanel=grid.ownerCt; gridpanel.removeDetail(gridpanel,record.get(gridpanel.keyField)); //var reviewIndex = reviewStore.find('employee_id', employee.get('id')); //reviewStore.removeAt(reviewIndex); //grid.getStore().removeAt(rowIndex); } } ); } }] }]); if(grid.sync) {//同步加载的Grid grid.reconfigure(store, columns); /* grid.on('afterrender', function(){ me.setToolbar(grid, grid.columns, grid.necessaryField, limitArr); });*/ } else { grid.reconfigure(store, columns); } } else { grid.hide(); } } }); }, setStore: function(grid, fields, data, groupField, necessaryField){ Ext.each(fields, function(f){ if(f.name.indexOf(' ') > -1) {// column有取别名 f.name = f.name.split(' ')[1]; } if(!Ext.isChrome){ if(f.type == 'date'){ f.dateFormat = 'Y-m-d H:m:s'; } } }); var modelName = 'ext-model-' + grid.id; Ext.define(modelName, { extend: 'Ext.data.Model', fields: fields }); var config = { model: modelName, groupField: groupField, getSum: function(records, field) { if (arguments.length < 2) { return 0; } var total = 0, i = 0, len = records.length; if(necessaryField) { for (; i < len; ++i) {//重写getSum,grid在合计时,只合计填写了必要信息的行 var necessary = records[i].get(necessaryField); if(necessary != null && necessary != ''){ total += records[i].get(field); } } } else { for (; i < len; ++i) { total += records[i].get(field); } } return total; }, getCount: function() { if(necessaryField) { var count = 0; Ext.each(this.data.items, function(item){//重写getCount,grid在合计时,只合计填写了必要信息的行 if(item.data[necessaryField] != null && item.data[necessaryField] != ''){ count++; } }); return count; } return this.data.items.length; } }; if(grid.buffered) {//grid数据缓存 config.buffered = true; config.pageSize = 200; config.purgePageCount = 0; config.proxy = { type: 'memory' }; } else { config.data = data; } var store = Ext.create('Ext.data.Store', config); store.each(function(item, x){ item.index = x; }); if(grid.buffered) { var ln = data.length, records = [], i = 0; for (; i < ln; i++) { records.push(Ext.create(modelName, data[i])); } store.cacheRecords(records); } return store; }, loadNewStore: function(grid, param){ var me = this; param=param||grid.params; grid.setLoading(true);//loading... Ext.Ajax.request({//拿到grid的columns url : basePath + "common/loadNewGridStore.action", params: param, method : 'post', callback : function(options,success,response){ grid.setLoading(false); var res = new Ext.decode(response.responseText); if(res.exceptionInfo){ showError(res.exceptionInfo);return; } var data = res.data; if(!data || data.length == 0){ grid.store.removeAll(); me.add10EmptyItems(grid); } else { grid.store.loadData(data); } //自定义event grid.addEvents({ storeloaded: true }); grid.fireEvent('storeloaded', grid, data); } }); }, removeDetail:function(grid,id){ grid.setLoading(true); Ext.Ajax.request({ url : basePath + grid.deleteUrl, params: { id: id }, method : 'post', callback : function(options,success,response){ grid.setLoading(false); var localJson = new Ext.decode(response.responseText); if(localJson.exceptionInfo){ showError(localJson.exceptionInfo);return; } if(localJson.success){ showResult('提示','删除成功!'); grid.loadNewStore(grid,grid.params); } else { delFailure(); } } }); }, setColumns:function(columns){ Ext.Array.each(columns,function(column){ if(column.xtype=='yncolumn'){ column.xtype='checkcolumn'; column.editor= { xtype: 'checkbox', cls: 'x-grid-checkheader-editor' }; } }); return columns; }, DetailUpdateSuccess:function(activeTab,btn){ activeTab.loadNewStore(activeTab,activeTab.params); var win=btn.up('window'); if(win) win.close(); } })