Ext.define('erp.view.oa.attention.AttentionSubGrid',{ extend: 'Ext.grid.Panel', alias: 'widget.AttentionSubGridPanel', id: 'AttentionSubGrid', layout : 'auto', emptyText : '无数据', columnLines : true, autoScroll : true, store: [], columns: [], multiselected: [], bodyStyle: 'background: #f1f1f1;', GridUtil: Ext.create('erp.util.GridUtil'), BaseUtil: Ext.create('erp.util.BaseUtil'), plugins: Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit: 1 }), selModel: Ext.create('Ext.selection.CheckboxModel',{ ignoreRightMouseSelection : false, id:'subgrid', listeners:{ selectionchange:function(selectionModel, selected, options){ } }, renderer: function(value, metaData, record, rowIndex, colIndex, store, view) { metaData.tdCls = Ext.baseCSSPrefix + 'grid-cell-special'; if(record.data.ap_isuse==1||record.data.aa_isuse==1){ var grid=Ext.getCmp('AttentionSubGrid'); grid.multiselected.push(record); grid.getSelectionModel().select(grid.multiselected); } return '
 
'; }, onRowMouseDown: function(view, record, item, index, e) {//改写的onRowMouseDown方法 var me = Ext.getCmp('AttentionSubGrid'); var bool = true; var items = me.selModel.getSelection(); Ext.each(items, function(item, index){ if(item&&item.data == record.data){ bool = false; me.selModel.deselect(record); Ext.Array.remove(items, item); Ext.Array.remove(me.multiselected, record); } }); Ext.each(me.multiselected, function(item, index){ items.push(item); }); me.selModel.select(items); if(bool){ view.el.focus(); var checkbox = item.childNodes[0].childNodes[0].childNodes[0]; if(checkbox.getAttribute('class') == 'x-grid-row-checker'){ me.multiselected.push(record); items.push(record); me.selModel.select(items); } else { me.selModel.deselect(record); Ext.Array.remove(me.multiselected, record); } } }, onHeaderClick: function(headerCt, header, e) { if (header.isCheckerHd) { e.stopEvent(); var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on'); if (isChecked) { this.deselectAll(true); var grid = Ext.getCmp('AttentionGridPanel'); this.deselect(grid.multiselected); grid.multiselected = new Array(); var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements; Ext.each(els, function(el, index){ el.setAttribute('class','x-grid-row-checker'); }); header.el.removeCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个 } else { header.el.addCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个 var grid = Ext.getCmp('AttentionGridPanel'); this.deselect(grid.multiselected); grid.multiselected = new Array(); var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements; Ext.each(els, function(el, index){ el.setAttribute('class','x-grid-row-checker'); }); this.selectAll(true); header.el.addCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个 } } } }), initComponent : function(){ this.addEvents({ mouseover: true }); condition = this.BaseUtil.getUrlParam('urlcondition'); condition = (condition == null) ? "1=1": condition; condition = condition.replace(/@/,"'%").replace(/@/,"%'"); this.defaultCondition = condition; var attenedemid=this.BaseUtil.getUrlParam('emid'); /**if(attenedemid){ condition="ap_attentedemid="+attenedemid+" AND ap_emid="+emid; }else condition="ap_emid="+0;**/ var gridParam = {caller: caller, condition: condition}; this.GridUtil.getGridColumnsAndStore(this, 'common/singleGridPanel.action?', gridParam, ""); this.callParent(arguments); }, viewConfig: { stripeRows: true }, loadNewStore: function(grid, param){ var me = this; var main = parent.Ext.getCmp("content-panel"); if(!main) main = parent.parent.Ext.getCmp("content-panel"); if(main){ main.getActiveTab().setLoading(true);//loading... } Ext.Ajax.request({//拿到grid的columns url : basePath + "common/loadNewGridStore.action", params: param, async: false, method : 'post', callback : function(options,success,response){ if(main){ main.getActiveTab().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){ data = []; me.add10EmptyData(grid.detno, data); me.add10EmptyData(grid.detno, data);//添20条吧 } grid.store.loadData(data); //自定义event grid.addEvents({ storeloaded: true }); grid.fireEvent('storeloaded', grid); } }); }, getMultiSelected: function(){ var grid = this; var items = grid.selModel.getSelection(); Ext.each(items, function(item, index){ if(this.data[grid.keyField] != null && this.data[grid.keyField] != '' && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){ grid.multiselected.push(item); } }); var records=Ext.Array.unique(grid.multiselected); var params = new Object(); params.caller = caller; var data = new Array(); console.log(grid.necessaryFields); Ext.each(records, function(record, index){ var o = new Object(); if(grid.necessaryFields){ Ext.each(grid.necessaryFields, function(f, index){ var v = record.data[f]; if(Ext.isDate(v)){ v = Ext.Date.toString(v); } o[f] = v; }); } data.push(o); }); params.data = Ext.encode(data); return params; }, add10EmptyData: function(detno, data){ if(detno){ var index = data.length == 0 ? 0 : Number(data[data.length-1][detno]); for(var i=0;i<10;i++){ var o = new Object(); o[detno] = index + i + 1; data.push(o); } } else { for(var i=0;i<10;i++){ var o = new Object(); data.push(o); } } }, getSearchValue: function() { var me = this, value = Ext.getCmp('search').getValue(); if (value === '') { return null; } if (!me.regExpMode) { value = value.replace(me.regExpProtect, function(m) { return '\\' + m; }); } else { try { new RegExp(value); } catch (error) { me.statusBar.setStatus({ text: error.message, iconCls: 'x-status-error' }); return null; } // this is stupid if (value === '^' || value === '$') { return null; } } return value; }, });