Ext.define('erp.controller.sys.step.HrController', { extend: 'Ext.app.Controller', id:'HrController', views:['sys.hr.HrPortal','sys.plugin.Spotlight','sys.hr.OrgTreePanel','sys.hr.EmployeeGrid','sys.hr.JprocessGrid','sys.hr.StandardJobGrid','sys.hr.PowerJobGrid'], init:function(){ var me=this; this.control({ 'button[id=change]':{ 'click':function(btn){ var tabp=Ext.getCmp('hrgrouptabpanel'); spot.show(tabp.down('treepanel').getView().getNodes()[2].id); var win= Ext.create('widget.window', { title: 'Layout Window with title after tools', header: { titlePosition: 2, titleAlign: 'center' }, closable: true, closeAction: 'hide', width: 600, minWidth: 350, height: 350, modal:true, tools: [{type: 'pin'}], layout: { type: 'border', padding: 5 }, items: [{ region: 'west', title: 'Navigation', width: 200, split: true, collapsible: true, floatable: false }, { region: 'center', xtype: 'tabpanel', items: [{ // LTR even when example is RTL so that the code can be read rtl: false, title: 'Bogus Tab', html: '
Window configured with:
header: {\n titlePosition: 2,\n titleAlign: "center"\n},\ntools: [{type: "pin"}],\nclosable: true'
}, {
title: 'Another Tab',
html: 'Hello world 2'
}, {
title: 'Closable Tab',
html: 'Hello world 3',
closable: true
}]
}]
});
win.show();
}
},
'button[itemId=adddepart]':{
click:function(btn){
var departgrid=Ext.getCmp('departgrid');
var win = Ext.widget('detailwindow',{
title:'核算部门',
items:[Ext.widget('formportal',{
region:'center',
caller:'Department',
saveUrl: 'hr/employee/saveDepartment.action',
deleteUrl: 'hr/employee/deleteDepartment.action',
updateUrl: 'hr/employee/updateDepartment.action',
getIdUrl: 'common/getId.action?seq=Department_SEQ',
saveSuccess:me.addDepartSuccess,
keyField: 'dp_id',
currentTab:departgrid
})]
});
win.showRelyBtn(win,btn);
}
},
'grouptabpanel>treepanel':{
itemmousedown:function(selModel,record){
if(record.get('id')=='powerinfo'){
Ext.getCmp('powerjobgrid').getStore().load();
}else if(record.get('id')=='jobdetail'){
Ext.getCmp('jobdetail').getStore().load();
}
}
},
'button[itemId=loadStandardData]':{
click:function(){
Ext.Msg.confirm('确认载入?', '载入标准人事数据将清除掉现有的数据包括(核算部门,组织,岗位)?',
function(choice) {
if(choice === 'yes') {
Ext.Ajax.request({//拿到tree数据
url : basePath + 'ma/sysinit/InitHrDataFromStandard.action',
method:'post',
callback : function(options,success,response){
showResult('提示','载入成功!');
Ext.getCmp('departgrid').store.load();
Ext.getCmp('orgtree').getTreeGridNode({parentId: 0});
Ext.getCmp('jobgrid').store.load();
}
});
}
});
}
},
'button[itemId=loadprocess]':{
click:function(){
Ext.Msg.confirm('确认载入?', '载入标准流程数据将清除掉现有的数据包括(已定义流程以及流程设置)?',
function(choice) {
if(choice === 'yes') {
Ext.Ajax.request({//拿到tree数据
url : basePath + 'ma/sysinit/InitProcessDataFromStandard.action',
method:'post',
callback : function(options,success,response){
showResult('提示','载入成功!');
Ext.getCmp('jprocessgrid').store.load();
}
});
}
});
}
},
'menuitem[itemId=addOrg]':{
click:me.handleAddOrgClick
},
'menuitem[itemId=topOrg]':{
click:me.handleAddTopOrgClick
},
'button[itemId=addjob]':{
click:me.handleAddJobClick
},
'button[itemId=savejob]':{
click:me.handleSaveJobClick
},
'button[itemId=canceljob]':{
click:me.handCancelJobclick
},
'button[itemId=saveemployee]':{
click:me.handleSaveEmployeeClick
},
'button[itemId=addemployee]':{
click:me.handleaddEmployeeClick
},
'button[itemId=deleteemployee]':{
click:me.handleDeleteEmployeeClick
},
'button[itemId=copypower]':{
click:me.handCopyPowerClick
},
'orgtreepanel': {
itemmousedown:function(selModel, record){
me.reloadJob(record);
},
itemmouseenter: me.showActions,
itemmouseleave: me.hideActions,
beforeitemmouseenter:me.showActions,
removeclick:me.handleRemoveClick,
speexpandclick:me.handleSpeExpandClick
},
'jprocessgrid':{
itemmousedown:function(selModel,record){
me.loadJprocessSet(record.get('jd_caller'));
}
}
});
var app=erp.getApplication();
var hrportal = activeItem.child('hrportal');
if(!hrportal){
var hrportal = Ext.widget('hrportal',{desc:'组织人员'});
activeItem.add(hrportal);
}
/* var spot = Ext.create('erp.view.sys.plugin.Spotlight', {
easing: 'easeOut',
duration: 300
});*/
},
loadNode: function(record){
var me = this;
if (record.data['or_id']) {
if(record.isExpanded() && record.childNodes.length > 0){
me.flag = true;
} else {
if(record.childNodes.length == 0){
Ext.Ajax.request({//拿到tree数据
url : basePath + 'hr/getTreeNode.action',
params: {
parentId: record.data['id']
},
callback : function(options,success,response){
var res = new Ext.decode(response.responseText);
if(res.result && res.result.length>0){
var tree = res.result;
Ext.each(tree, function(t){
t.or_id = t.id;
t.or_code=t.data.or_code;
t.or_name=t.data.or_name;
t.or_department=t.data.or_department;
t.or_departmentcode=t.data.or_departmentcode;
//t.leaf=t.data.or_isleaf==-1;
t.leaf=false;
t.data = null;
});
record.appendChild(tree);
Ext.each(record.childNodes, function(){
this.dirty = false;
});
} else if(res.exceptionInfo){
showError(res.exceptionInfo);
}
}
});
}
}
}
},
reloadJob:function(record){
if(!record){
var orgTree = Ext.getCmp('orgtree'),
selectionModel = orgTree.getSelectionModel(),
record = selectionModel.getSelection()[0];
}
var jobgrid=Ext.getCmp('jobgrid');
jobgrid.setTitle('岗位资料 ('+record.get('or_name')+')');
jobgrid.getStore().load({params:{
orgid:record.get('or_id')
}});
},
handleSpeExpandClick:function(record){
this.loadNode(record);
var treegrid = Ext.getCmp('orgtree');
treegrid.selModel.select(record);
this.reloadJob(record);
},
handleAddOrgClick: function(component, e) {
this.addOrg(true,component);
},
handleAddTopOrgClick: function(component, e) {
this.addOrg(true,component,'top');
},
handleAddJobClick:function(component,e){
this.addJob();
},
handleaddEmployeeClick:function(component,e){
this.addEmployee();
},
handleSaveJobClick:function(component,e){
this.saveJob();
},
handCancelJobclick:function(btn,e){
var me=this;
Ext.Msg.confirm('取消保存?', '确定要取消保存已修改的数据?',function(btn){
if(btn=='yes'){
me.reloadJob();
}
});
},
handleSaveEmployeeClick:function(component,e){
this.saveEmployee();
},
handleDeleteEmployeeClick:function(component,e){
this.deleteEmployee();
},
handCopyPowerClick:function(btn,e){
var grid=Ext.getCmp('powerjobgrid'),updateRecords=grid.getStore().getUpdatedRecords(),updateArr=new Array(),o;
if(updateRecords.length>0){
Ext.Array.each(updateRecords,function(item){
o=new Object();
o.cp_tocode=item.get('jo_code');
o.cp_toname=item.get('jo_name');
o.cp_toid=item.get('jo_id');
o.cp_toorname=item.get('jo_orgName');
o.cp_fromcode=item.get('fromcode');
o.cp_fromname=item.get('fromname');
o.cp_fromid=item.get('fromid');
o.cp_haschange='1';
updateArr.push(Ext.JSON.encode(o));
});
grid.setLoading(true);
Ext.Ajax.request({
url : basePath + 'ma/power/copypowerFromStandard.action',
params : {
param:unescape(updateArr.toString())
},
method : 'post',
callback : function(options,success,response){
grid.setLoading(false);
var res = new Ext.decode(response.responseText);
if(res.success){
showResult('提示','复制成功!');
grid.getStore().load();
}
}
});
}else showResult('提示','请先选择需要复制权限标准岗位!');
},
addOrg:function(leaf,btn,type){
var me = this,
orgTree = Ext.getCmp('orgtree'),
cellEditingPlugin = orgTree.cellEditingPlugin,
selectionModel = orgTree.getSelectionModel(),
selectedList = selectionModel.getSelection()[0];
var parentId=selectedList && !type?selectedList.get('or_id'):0;
parentList=parentId==0?orgTree.getRootNode():selectedList;
newOrg =this.getNewOrg(parentId,btn);
expandAndEdit = function() {
if(parentList.isExpanded()) {
selectionModel.select(newOrg);
me.addedNode = newOrg;
cellEditingPlugin.startEdit(newOrg, 0);
} else {
orgTree.on('afteritemexpand', function startEdit(list) {
if(list === parentList) {
selectionModel.select(newList);
me.addedNode = newList;
cellEditingPlugin.startEdit(newOrg, 0);
orgTree.un('afteritemexpand', startEdit);
}
});
parentList.expand();
}
};
parentList.appendChild(newOrg);
orgTree.getStore().sync();
if(orgTree.getView().isVisible(true)) {
expandAndEdit();
} else {
orgTree.on('expand', function onExpand() {
expandAndEdit();
listTree.un('expand', onExpand);
});
orgTree.expand();
}
},
addJob:function(){
var me = this,
orgTree = Ext.getCmp('orgtree'),
cellEditingPlugin = orgTree.cellEditingPlugin,
selectionModel = orgTree.getSelectionModel(),
selectedList = selectionModel.getSelection()[0];
if(!selectedList) {
showResult('提示','请选选择需要添加岗位的所属组织!');
return;
}
var rec ={
jo_id: '',
jo_code: '',
jo_name: '',
jo_orgcode:selectedList.get('or_code'),
jo_orgName:selectedList.get('or_name'),
jo_orgId :selectedList.get('or_id')
}, jobgrid=Ext.getCmp('jobgrid'); edit = jobgrid.cellEditingPlugin;
edit.cancelEdit();
jobgrid.store.insert(0, rec);
edit.startEditByPosition({
row: 0,
column: 1
});
},
addEmployee:function(){
var me = this,
employeegrid=Ext.getCmp('employeegrid'); edit = employeegrid.cellEditingPlugin;
edit.cancelEdit();
employeegrid.store.insert(0, {});
edit.startEditByPosition({
row: 0,
column: 1
});
},
saveJob:function(){
var jobgrid=Ext.getCmp('jobgrid'),me=this;
if(jobgrid.isVal()){
jobgrid.store.sync({
failure:function(){
showResult('提示','保存失败,请检查岗位编号是否重复!');
},
success:function(){
showResult('提示','保存成功!');
me.reloadJob();
}
});
}else showResult('提示','有必填项未填写无法保存!');
},
saveEmployee:function(){
var employeegrid=Ext.getCmp('employeegrid');
employeegrid.store.sync({
failure:function(){
showResult('提示','保存失败,请检查数据是否异常');
},
success:function(){
showResult('提示','保存成功!');
employeegrid.getStore().load();
}
});
},
deleteEmployee:function(){
var employeegrid=Ext.getCmp('employeegrid');
selectionModel=employeegrid.getSelectionModel(),
selecteds = selectionModel.getSelection(),datas=new Array();
Ext.Array.each(selecteds,function(item){
if(item.get('em_id')) datas.push(Ext.JSON.encode(item.data));
});
Ext.Ajax.request({
url : basePath + 'hr/employee/deleteEmployees.action',
params: {
jsonData:unescape(datas.toString())
},
callback : function(options,success,response){
var res = new Ext.decode(response.responseText);
showResult('提示','删除成功!');
employeegrid.getStore().load();
}
});
},
getNewOrg:function(parentId,btn){
var org=new Object();
parentId=parentId?parentId:0;
Ext.Ajax.request({//拿到tree数据
url : basePath + 'hr/addOrgByParent.action',
params: {
parentId: parentId
},
async:false,
callback : function(options,success,response){
var res = new Ext.decode(response.responseText);
if(res.org){
org=res.org;
org.loaded=true;
org.id=org.or_id;
}
btn.setDisabled(false);
}
});
return org;
},
showActions: function(view, list, node, rowIndex, e) {
var icons = Ext.DomQuery.select('.x-action-col-icon', node),record=view.getRecord(node);
Ext.each(icons, function(icon){
Ext.get(icon).removeCls('x-hidden');
});
},
hideActions: function(view, list, node, rowIndex, e) {
var icons = Ext.DomQuery.select('.x-action-col-icon', node),record=view.getRecord(node);
Ext.each(icons, function(icon){
if(icon.getAttribute('src')==basePath+'jsps/sys/images/deletetree.png')
Ext.get(icon).addCls('x-hidden');
});
},
handleRemoveClick: function(view, rowIndex, colIndex, column, e) {
var record=view.getRecord(view.findTargetByEvent(e)),title=record.get('or_name'), orgTree = Ext.getCmp('orgtree'),
selModel = orgTree.getSelectionModel();
Ext.Msg.confirm('删除数据?', '确定要删除当前选中组织 ('+title+')?',
function(choice) {
if(choice === 'yes') {
Ext.Ajax.request({//拿到tree数据
url : basePath + 'hr/employee/deleteHrOrg.action',
params: {
id: record.get('id')
},
async:false,
callback : function(options,success,response){
var res = new Ext.decode(response.responseText);
if(res.success){
showResult('提示','删除组织('+title+') 成功!');
record.parentNode.removeChild(record);
if (!selModel.hasSelection()) {
selModel.select(0);
}
}
}
});
}
});
},
loadJprocessSet:function(caller){
Ext.Ajax.request({//拿到tree数据
url : basePath + 'common/getJprocessSet.action',
params: {
caller:caller
},
callback : function(options,success,response){
var res = new Ext.decode(response.responseText);
var jprocessset=res.data;
delete jprocessset['js_id'];
delete jprocessset['js_bean'];
delete jprocessset['js_serviceclass'];
delete jprocessset['js_codefield'];
Ext.getCmp('jprocesssetgrid').setSource(jprocessset);
}
});
},
addDepartSuccess:function(panel,btn){
Ext.getCmp('departgrid').getStore().load();
var win=btn.up('window');
if(win) win.close();
}
});