/**
* 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;
}
}));
}
}
}
});