/** * PDA 权限分配Grid */ Ext.define('erp.view.core.grid.PDAGroupPower',{ extend: 'Ext.grid.Panel', alias: 'widget.grouppower', requires: ['erp.view.core.grid.HeaderFilter'], layout : 'fit', id: 'grid', emptyText : $I18N.common.grid.emptyText, columnLines : true, autoScroll : true, iconCls: 'icon-grid', frame: true, bodyStyle:'background-color:#f1f1f1;', features: [Ext.create('Ext.grid.feature.Grouping',{ startCollapsed: false, groupHeaderTpl: '{name} ({rows.length})' })], plugins: [Ext.create('erp.view.core.grid.HeaderFilter')], store: Ext.create('Ext.data.Store', { fields: [{ name: 'em_id', type: 'number' },{ name: 'jo_orgid', type: 'number' },{ name:'jo_orgname', type:'string' },{ name:'jo_description', type:'string' },{ name:'jo_name', type:'string' },{ name:'jo_id', type:'number' },{ name:'ejp_see', type:'bool' },{ name:'ejp_seeother', type:'bool' }], groupField: 'jo_orgname' }), defaultColumns: [{ text: 'ID', hidden: true, dataIndex: 'jo_id' },{ text: '组织ID', hidden: true, dataIndex: 'jo_orgid' },{ text: '组织名称', hidden: true, dataIndex: 'jo_orgname' },{ text: '岗位名称', width: 220, cls: 'x-grid-header', dataIndex: 'jo_name', filter: {xtype: 'textfield', filterName: 'jo_name'}, setPadding: Ext.emptyFn },{ text: '操作名称', columns: [{ text: '
浏览', width: 45, cls: 'x-grid-header', xtype: 'checkcolumn', editor: { xtype: 'checkbox', cls: 'x-grid-checkheader-editor' }, dataIndex: 'ejp_see' },{ text: '
浏览
他人', width: 45, cls: 'x-grid-header', xtype: 'checkcolumn', editor: { xtype: 'checkbox', cls: 'x-grid-checkheader-editor' }, dataIndex: 'ejp_seeother' }] }], tbar: [{ xtype: 'tbtext', id: 'power_title' },'->',{ xtype: 'combo', fieldLabel: '搜索岗位', margin: '0 5 0 0', width: 300, labelWidth: 80, id: 'job_combo', displayField: 'display', valueField: 'value', queryMode: 'local', anyMatch: true, store: new Ext.data.Store({ fields: ['display', 'value'] }), listeners: { change: function(c) { var v = c.value, grid = c.ownerCt.ownerCt; if(!Ext.isEmpty(v)) { grid.store.clearFilter(true); if(v != ' ') { grid.store.filter(new Ext.util.Filter({ filterFn: function(item) { return item.get('jo_name') == v; } })); } else { grid.store.filter(new Ext.util.Filter({ filterFn: function(item) { return true; } })); } } } } },{ iconCls: 'tree-save', cls: 'x-btn-blue', text: $I18N.common.button.erpSaveButton, handler: function(){ var grid = Ext.getCmp('grid'),set = grid.powerSet; var positionpowers = []; var positionpower = null; Ext.each(grid.store.data.items, function(d){ if(this.dirty){ positionpower = new Object(); positionpower.ejp_caller = grid.ejp_caller; positionpower.ejp_id = d.data['ejp_id']; positionpower.ejp_joid = d.data['jo_id']; Ext.each(set, function(s){ positionpower[s] = d.data[s] ? 1 : 0; }); positionpowers.push(positionpower); } }); if(positionpowers.length > 0){ grid.setLoading(true); Ext.Ajax.request({//拿到grid的columns url : basePath + 'hr/employee/updatePDAJobPower.action', params: { update: Ext.encode(positionpowers), _self: grid._self }, method : 'post', timeout : 240000, callback : function(options,success,response){ grid.setLoading(false); var res = new Ext.decode(response.responseText); if(res.exception || res.exceptionInfo){ showError(res.exceptionInfo); return; } if(res.success){ updateSuccess(function(){ grid.getGroupData(); }); } } }); } } }, '->'], initComponent : function(){ this.columns = this.defaultColumns; this.callParent(arguments); }, listeners: {//滚动条有时候没反应,添加此监听器 scrollershow: function(scroller) { if (scroller && scroller.scrollEl) { scroller.clearManagedListeners(); scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller); } } }, powerSet: ['ejp_see', 'ejp_seeother'], getGroupData: function(){ var me = this; me.setLoading(true); Ext.Ajax.request({ url : basePath + 'hr/employee/getPDAHrJob.action', params: { caller: me.ejp_caller }, method : 'post', callback : function(options,success,response){ me.setLoading(false); var res = new Ext.decode(response.responseText); if(res.exception || res.exceptionInfo){ showError(res.exceptionInfo); return; } if(!res.hrjob){ return; } else { var data = new Array(); Ext.each(res.hrjob, function(){ var j = this; Ext.each(res.pdapositionpower, function(pp){ if(j.jo_id == pp.ejp_joid){ j = Ext.Object.merge(j, pp); j.ejp_id = pp.ejp_id; Ext.each(me.powerSet, function(s){ j[s] = pp[s] == 1; }); } }); data.push(j); }); me.store.loadData(data); var cm = me.down('gridcolumn[dataIndex=jo_name]'); cm.setText('岗位名称'); me._self = false; me.reconfigure(me.store, me.defaultColumns); me.filterJob(res.hrjob); me.resetHeaderChecker(); me.rememberLastFilter(); me.plugins[0].renderFilters(); } } }); }, rememberLastFilter: function() { var me = this, filter = this.store.filters.findBy(function(filter){ return filter.property == '$all'; }); if(filter && filter.filterArr) { me.headerFilters = {}; Ext.Array.each(filter.filterArr, function(f){ me.headerFilters[f.property] = f.value; }); } }, resetHeaderChecker: function() { var columns = this.headerCt.getGridColumns(); Ext.Array.each(columns, function(c){ if(c.headerCheckable) { var ch = Ext.get(c.dataIndex + '-checkbox'); ch && (ch.dom.checked = false); } }); }, selModel: Ext.create('Ext.selection.CheckboxModel',{ listeners:{ 'select': function(selModel, record){ selModel.view.ownerCt.selectAllPower(record); }, 'deselect': function(selModel, record){ selModel.view.ownerCt.deselectAllPower(record); } }, onHeaderClick: function(headerCt, header, e) { var grid = headerCt.ownerCt; if (header.isCheckerHd) { var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on'); if (!isChecked) { grid.store.each(function(item){ grid.selectAllPower(item); }); grid.selModel.selectAll(); } else { grid.store.each(function(item){ grid.deselectAllPower(item); }); grid.selModel.deselectAll(); } } } }), selectAllPower: function(record){ var me = this, set = me.powerSet; Ext.each(set, function(s){ record.set(s, true); }); }, deselectAllPower: function(record){ var me = this, set = me.powerSet; Ext.each(set, function(s){ record.set(s, false); }); }, filterJob: function(jobs) { var c = this.down('#job_combo'); this.jobs = jobs; if(!c.store || c.store.data.length == 0) { var ns = Ext.Array.pluck(jobs, 'jo_name'), data = new Array(), fd = new Array(); data.push({display: '--所有--', value: ' '}); Ext.each(ns, function(){ if(!Ext.Array.contains(fd, String(this))) { data.push({display: this, value: this}); fd.push(String(this)); } }); c.store.loadData(data); } var v = c.value; if(!Ext.isEmpty(v)) { grid.store.clearFilter(true); if(v != ' ') { this.store.filter(new Ext.util.Filter({ filterFn: function(item) { return item.get('jo_name') == v; } })); } else { grid.store.filter(new Ext.util.Filter({ filterFn: function(item) { return true; } })); } } } });