/**
* ERP项目groupgrid样式:hrjob分组
*/
Ext.define('erp.view.core.grid.GroupPower',{
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:'pp_see',
type:'bool'
},{
name:'pp_selflist',
type:'bool'
},{
name:'pp_alllist',
type:'bool'
},{
name:'pp_add',
type:'bool'
},{
name:'pp_delete',
type:'bool'
},{
name:'pp_save',
type:'bool'
},{
name:'pp_saveoth',
type:'bool'
},{
name:'pp_commit',
type:'bool'
},{
name:'pp_uncommit',
type:'bool'
},{
name:'pp_audit',
type:'bool'
},{
name:'pp_unaudit',
type:'bool'
},{
name:'pp_print',
type:'bool'
},{
name:'pp_printoth',
type:'bool'
},{
name:'pp_disable',
type:'bool'
},{
name:'pp_undisable',
type:'bool'
},{
name:'pp_closed',
type:'bool'
},{
name:'pp_unclosed',
type:'bool'
},{
name:'pp_posting',
type:'bool'
},{
name:'pp_unposting',
type:'bool'
},{
name: 'pp_more',
type: 'string'
}],
sorters: [{
property : 'jo_id',
direction: 'ASC'
}],
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: 'pp_add'
},{
text: '
浏览',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_see'
},{
text: '
删除',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_delete'
},{
text: '
修改',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_save'
},{
text: '修
改他人',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_saveoth'
},{
text: '
提交',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_commit'
},{
text: '反
提交',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_uncommit'
},{
text: '
审核',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_audit'
},{
text: '反
审核',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_unaudit'
},{
text: '
打印',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_print'
},{
text: '打印
他人',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_printoth'
},{
text: '
禁用',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_disable'
},{
text: '反
禁用',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_undisable'
},{
text: '
操作',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_closed'
},{
text: '反
操作',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_unclosed'
},{
text: '
过账',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_posting'
},{
text: '反
过账',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_unposting'
},{
text: '更多',
width: 45,
cls: 'x-grid-header',
dataIndex: 'pp_more',
xtype: 'numbercolumn',
renderer: function(val, meta){
meta.tdCls = 'x-grid-search-trigger';
meta.style = 'cursor:pointer;';
return val;
},
processEvent: function(type, view, cell, recordIndex, cellIndex, e) {
if (type == 'mousedown' || (type == 'keydown' && (e.getKey() == e.ENTER || e.getKey() == e.SPACE))) {
var grid = view.ownerCt, record = grid.store.getAt(recordIndex);
grid.setMore(grid.pp_caller, record.data.jo_id);
}
return false;
}
},{
text: '特殊',
width: 45,
cls: 'x-grid-header',
dataIndex: 'pp_special',
xtype: 'numbercolumn',
renderer: function(val, meta){
meta.tdCls = 'x-grid-search-trigger';
meta.style = 'cursor:pointer;';
return val;
},
processEvent: function(type, view, cell, recordIndex, cellIndex, e) {
if (type == 'mousedown' || (type == 'keydown' && (e.getKey() == e.ENTER || e.getKey() == e.SPACE))) {
var grid = view.ownerCt, record = grid.store.getAt(recordIndex);
grid.setSpecial(grid.pp_caller, record.data.jo_id);
}
return false;
}
}]
}],
listColumns: [{
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: 'pp_selflist'
},{
text: '浏
览所有',
width: 45,
cls: 'x-grid-header',
xtype: 'checkcolumn',
editor: {
xtype: 'checkbox',
cls: 'x-grid-checkheader-editor'
},
dataIndex: 'pp_alllist'
}]
},{
text: '更多',
width: 45,
cls: 'x-grid-header',
dataIndex: 'pp_more',
xtype: 'numbercolumn',
renderer: function(val, meta){
meta.tdCls = 'x-grid-search-trigger';
meta.style = 'cursor:pointer;';
return val;
},
processEvent: function(type, view, cell, recordIndex, cellIndex, e) {
if (type == 'mousedown' || (type == 'keydown' && (e.getKey() == e.ENTER || e.getKey() == e.SPACE))) {
var grid = view.ownerCt, record = grid.store.getAt(recordIndex);
grid.setMore(grid.pp_caller, record.data.jo_id);
}
return false;
}
}],
dealColumns: [{
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: 'pp_see'
}]
},{
text: '特殊',
width: 45,
cls: 'x-grid-header',
dataIndex: 'pp_special',
xtype: 'numbercolumn',
renderer: function(val, meta){
meta.tdCls = 'x-grid-search-trigger';
meta.style = 'cursor:pointer;';
return val;
},
processEvent: function(type, view, cell, recordIndex, cellIndex, e) {
if (type == 'mousedown' || (type == 'keydown' && (e.getKey() == e.ENTER || e.getKey() == e.SPACE))) {
var grid = view.ownerCt, record = grid.store.getAt(recordIndex);
grid.setSpecial(grid.pp_caller, record.data.jo_id);
}
return false;
}
}],
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;
}
}));
}
}
}
}
},{
text: '个人权限',
cls: 'x-btn-blue',
margin: '0 5 0 0',
id: 'personal_set'
},{
text: '特殊权限设置',
cls: 'x-btn-blue',
margin: '0 5 0 0',
id: 'special_set'
},{
text: '复制权限',
cls: 'x-btn-blue',
margin: '0 5 0 0',
id: 'power_copy'
},{
text: '权限同步',
cls: 'x-btn-blue',
margin: '0 5 0 0',
id: 'power_sync'
},{
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.pp_caller = grid.pp_caller;
positionpower.pp_id = d.data['pp_id'];
if(grid._self) {
positionpower.pp_emid = d.data['jo_id'];
} else {
positionpower.pp_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/updateJobPower.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(){
if(grid._self) {
grid.getPersonalData(grid.urlType, grid._persons);
} else {
grid.getGroupData(grid.urlType);
}
});
}
}
});
}
}
}, '->'],
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: ['pp_see', 'pp_selflist', 'pp_alllist', 'pp_add', 'pp_delete', 'pp_save', 'pp_saveoth', 'pp_commit',
'pp_uncommit', 'pp_audit', 'pp_unaudit', 'pp_print', 'pp_printoth', 'pp_disable',
'pp_undisable', 'pp_closed', 'pp_unclosed', 'pp_posting', 'pp_unposting'],
listSet:['pp_selflist','pp_alllist'],
dealSet:['pp_see'],
defaultSet:['pp_add','pp_see', 'pp_delete', 'pp_save','pp_saveoth','pp_commit','pp_uncommit','pp_audit','pp_unaudit','pp_print','pp_printoth','pp_disable', 'pp_undisable', 'pp_closed', 'pp_unclosed', 'pp_posting', 'pp_unposting'],
getGroupData: function(type){
var me = this;
me.setLoading(true);
Ext.Ajax.request({
url : basePath + 'hr/employee/getHrJob.action',
params: {
caller: me.pp_caller,
utype: type,
_self: false
},
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.positionpower, function(pp){
if(j.jo_id == pp.pp_joid){
j = Ext.Object.merge(j, pp);
j.pp_id = pp.pp_id;
Ext.each(me.powerSet, function(s){
j[s] = pp[s] == 1;
});
}
});
data.push(j);
});
me.formdetail = res.formdetail;
me.detailgrid = res.detailgrid;
me.datalist = res.datalist;
me.relativedatalist = res.relativedatalist;
me.store.loadData(data);
var cm = me.down('gridcolumn[dataIndex=jo_name]');
cm.setText('岗位名称');
me._self = false;
if(type != null) {
if(type == 'list' && me.urlType != 'list') {
me.reconfigure(me.store, me.listColumns);
} else if(type == 'deal' && me.urlType != 'deal') {
me.reconfigure(me.store, me.dealColumns);
}
} else {
if(me.urlType != null) {
me.reconfigure(me.store, me.defaultColumns);
}
}
me.urlType = type;
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 = null;
if(me.urlType=='list'){
set=me.listSet;
}else if(me.urlType=='deal') set=me.dealSet;
else set=me.defaultSet;
Ext.each(set, function(s){
record.set(s, true);
});
},
deselectAllPower: function(record){
var me = this, set = null;
if(me.urlType=='list'){
set=me.listSet;
}else if(me.urlType=='deal') set=me.dealSet;
else set=me.defaultSet;
Ext.each(set, function(s){
record.set(s, false);
});
},
setMore: function(caller, id){
var me = this,
winId = 'win_' + caller + '_' + id + '_' + (me.urlType || '') + '_' + me._self,
win = Ext.getCmp(winId);
if(win) {
win.show();
} else {
win = Ext.create('Ext.Window', {
id: winId,
title: me.down('#power_title').el.dom.innerHTML + '