HrController.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510
  1. Ext.define('erp.controller.sys.step.HrController', {
  2. extend: 'Ext.app.Controller',
  3. id:'HrController',
  4. views:['sys.hr.HrPortal','sys.plugin.Spotlight','sys.hr.OrgTreePanel','sys.hr.EmployeeGrid','sys.hr.JprocessGrid','sys.hr.StandardJobGrid','sys.hr.PowerJobGrid'],
  5. init:function(){
  6. var me=this;
  7. this.control({
  8. 'button[id=change]':{
  9. 'click':function(btn){
  10. var tabp=Ext.getCmp('hrgrouptabpanel');
  11. spot.show(tabp.down('treepanel').getView().getNodes()[2].id);
  12. var win= Ext.create('widget.window', {
  13. title: 'Layout Window with title <em>after</em> tools',
  14. header: {
  15. titlePosition: 2,
  16. titleAlign: 'center'
  17. },
  18. closable: true,
  19. closeAction: 'hide',
  20. width: 600,
  21. minWidth: 350,
  22. height: 350,
  23. modal:true,
  24. tools: [{type: 'pin'}],
  25. layout: {
  26. type: 'border',
  27. padding: 5
  28. },
  29. items: [{
  30. region: 'west',
  31. title: 'Navigation',
  32. width: 200,
  33. split: true,
  34. collapsible: true,
  35. floatable: false
  36. }, {
  37. region: 'center',
  38. xtype: 'tabpanel',
  39. items: [{
  40. // LTR even when example is RTL so that the code can be read
  41. rtl: false,
  42. title: 'Bogus Tab',
  43. html: '<p>Window configured with:</p><pre style="margin-left:20px"><code>header: {\n titlePosition: 2,\n titleAlign: "center"\n},\ntools: [{type: "pin"}],\nclosable: true</code></pre>'
  44. }, {
  45. title: 'Another Tab',
  46. html: 'Hello world 2'
  47. }, {
  48. title: 'Closable Tab',
  49. html: 'Hello world 3',
  50. closable: true
  51. }]
  52. }]
  53. });
  54. win.show();
  55. }
  56. },
  57. 'button[itemId=adddepart]':{
  58. click:function(btn){
  59. var departgrid=Ext.getCmp('departgrid');
  60. var win = Ext.widget('detailwindow',{
  61. title:'核算部门',
  62. items:[Ext.widget('formportal',{
  63. region:'center',
  64. caller:'Department',
  65. saveUrl: 'hr/employee/saveDepartment.action',
  66. deleteUrl: 'hr/employee/deleteDepartment.action',
  67. updateUrl: 'hr/employee/updateDepartment.action',
  68. getIdUrl: 'common/getId.action?seq=Department_SEQ',
  69. saveSuccess:me.addDepartSuccess,
  70. keyField: 'dp_id',
  71. currentTab:departgrid
  72. })]
  73. });
  74. win.showRelyBtn(win,btn);
  75. }
  76. },
  77. 'grouptabpanel>treepanel':{
  78. itemmousedown:function(selModel,record){
  79. if(record.get('id')=='powerinfo'){
  80. Ext.getCmp('powerjobgrid').getStore().load();
  81. }else if(record.get('id')=='jobdetail'){
  82. Ext.getCmp('jobdetail').getStore().load();
  83. }
  84. }
  85. },
  86. 'button[itemId=loadStandardData]':{
  87. click:function(){
  88. Ext.Msg.confirm('确认载入?', '载入标准人事数据将清除掉现有的数据包括(核算部门,组织,岗位)?',
  89. function(choice) {
  90. if(choice === 'yes') {
  91. Ext.Ajax.request({//拿到tree数据
  92. url : basePath + 'ma/sysinit/InitHrDataFromStandard.action',
  93. method:'post',
  94. callback : function(options,success,response){
  95. showResult('提示','载入成功!');
  96. Ext.getCmp('departgrid').store.load();
  97. Ext.getCmp('orgtree').getTreeGridNode({parentId: 0});
  98. Ext.getCmp('jobgrid').store.load();
  99. }
  100. });
  101. }
  102. });
  103. }
  104. },
  105. 'button[itemId=loadprocess]':{
  106. click:function(){
  107. Ext.Msg.confirm('确认载入?', '载入标准流程数据将清除掉现有的数据包括(已定义流程以及流程设置)?',
  108. function(choice) {
  109. if(choice === 'yes') {
  110. Ext.Ajax.request({//拿到tree数据
  111. url : basePath + 'ma/sysinit/InitProcessDataFromStandard.action',
  112. method:'post',
  113. callback : function(options,success,response){
  114. showResult('提示','载入成功!');
  115. Ext.getCmp('jprocessgrid').store.load();
  116. }
  117. });
  118. }
  119. });
  120. }
  121. },
  122. 'menuitem[itemId=addOrg]':{
  123. click:me.handleAddOrgClick
  124. },
  125. 'menuitem[itemId=topOrg]':{
  126. click:me.handleAddTopOrgClick
  127. },
  128. 'button[itemId=addjob]':{
  129. click:me.handleAddJobClick
  130. },
  131. 'button[itemId=savejob]':{
  132. click:me.handleSaveJobClick
  133. },
  134. 'button[itemId=canceljob]':{
  135. click:me.handCancelJobclick
  136. },
  137. 'button[itemId=saveemployee]':{
  138. click:me.handleSaveEmployeeClick
  139. },
  140. 'button[itemId=addemployee]':{
  141. click:me.handleaddEmployeeClick
  142. },
  143. 'button[itemId=deleteemployee]':{
  144. click:me.handleDeleteEmployeeClick
  145. },
  146. 'button[itemId=copypower]':{
  147. click:me.handCopyPowerClick
  148. },
  149. 'orgtreepanel': {
  150. itemmousedown:function(selModel, record){
  151. me.reloadJob(record);
  152. },
  153. itemmouseenter: me.showActions,
  154. itemmouseleave: me.hideActions,
  155. beforeitemmouseenter:me.showActions,
  156. removeclick:me.handleRemoveClick,
  157. speexpandclick:me.handleSpeExpandClick
  158. },
  159. 'jprocessgrid':{
  160. itemmousedown:function(selModel,record){
  161. me.loadJprocessSet(record.get('jd_caller'));
  162. }
  163. }
  164. });
  165. var app=erp.getApplication();
  166. var hrportal = activeItem.child('hrportal');
  167. if(!hrportal){
  168. var hrportal = Ext.widget('hrportal',{desc:'组织人员'});
  169. activeItem.add(hrportal);
  170. }
  171. /* var spot = Ext.create('erp.view.sys.plugin.Spotlight', {
  172. easing: 'easeOut',
  173. duration: 300
  174. });*/
  175. },
  176. loadNode: function(record){
  177. var me = this;
  178. if (record.data['or_id']) {
  179. if(record.isExpanded() && record.childNodes.length > 0){
  180. me.flag = true;
  181. } else {
  182. if(record.childNodes.length == 0){
  183. Ext.Ajax.request({//拿到tree数据
  184. url : basePath + 'hr/getTreeNode.action',
  185. params: {
  186. parentId: record.data['id']
  187. },
  188. callback : function(options,success,response){
  189. var res = new Ext.decode(response.responseText);
  190. if(res.result && res.result.length>0){
  191. var tree = res.result;
  192. Ext.each(tree, function(t){
  193. t.or_id = t.id;
  194. t.or_code=t.data.or_code;
  195. t.or_name=t.data.or_name;
  196. t.or_department=t.data.or_department;
  197. t.or_departmentcode=t.data.or_departmentcode;
  198. //t.leaf=t.data.or_isleaf==-1;
  199. t.leaf=false;
  200. t.data = null;
  201. });
  202. record.appendChild(tree);
  203. Ext.each(record.childNodes, function(){
  204. this.dirty = false;
  205. });
  206. } else if(res.exceptionInfo){
  207. showError(res.exceptionInfo);
  208. }
  209. }
  210. });
  211. }
  212. }
  213. }
  214. },
  215. reloadJob:function(record){
  216. if(!record){
  217. var orgTree = Ext.getCmp('orgtree'),
  218. selectionModel = orgTree.getSelectionModel(),
  219. record = selectionModel.getSelection()[0];
  220. }
  221. var jobgrid=Ext.getCmp('jobgrid');
  222. jobgrid.setTitle('岗位资料 <span style="color:gray">('+record.get('or_name')+')</span>');
  223. jobgrid.getStore().load({params:{
  224. orgid:record.get('or_id')
  225. }});
  226. },
  227. handleSpeExpandClick:function(record){
  228. this.loadNode(record);
  229. var treegrid = Ext.getCmp('orgtree');
  230. treegrid.selModel.select(record);
  231. this.reloadJob(record);
  232. },
  233. handleAddOrgClick: function(component, e) {
  234. this.addOrg(true,component);
  235. },
  236. handleAddTopOrgClick: function(component, e) {
  237. this.addOrg(true,component,'top');
  238. },
  239. handleAddJobClick:function(component,e){
  240. this.addJob();
  241. },
  242. handleaddEmployeeClick:function(component,e){
  243. this.addEmployee();
  244. },
  245. handleSaveJobClick:function(component,e){
  246. this.saveJob();
  247. },
  248. handCancelJobclick:function(btn,e){
  249. var me=this;
  250. Ext.Msg.confirm('取消保存?', '确定要取消保存已修改的数据?',function(btn){
  251. if(btn=='yes'){
  252. me.reloadJob();
  253. }
  254. });
  255. },
  256. handleSaveEmployeeClick:function(component,e){
  257. this.saveEmployee();
  258. },
  259. handleDeleteEmployeeClick:function(component,e){
  260. this.deleteEmployee();
  261. },
  262. handCopyPowerClick:function(btn,e){
  263. var grid=Ext.getCmp('powerjobgrid'),updateRecords=grid.getStore().getUpdatedRecords(),updateArr=new Array(),o;
  264. if(updateRecords.length>0){
  265. Ext.Array.each(updateRecords,function(item){
  266. o=new Object();
  267. o.cp_tocode=item.get('jo_code');
  268. o.cp_toname=item.get('jo_name');
  269. o.cp_toid=item.get('jo_id');
  270. o.cp_toorname=item.get('jo_orgName');
  271. o.cp_fromcode=item.get('fromcode');
  272. o.cp_fromname=item.get('fromname');
  273. o.cp_fromid=item.get('fromid');
  274. o.cp_haschange='1';
  275. updateArr.push(Ext.JSON.encode(o));
  276. });
  277. grid.setLoading(true);
  278. Ext.Ajax.request({
  279. url : basePath + 'ma/power/copypowerFromStandard.action',
  280. params : {
  281. param:unescape(updateArr.toString())
  282. },
  283. method : 'post',
  284. callback : function(options,success,response){
  285. grid.setLoading(false);
  286. var res = new Ext.decode(response.responseText);
  287. if(res.success){
  288. showResult('提示','复制成功!');
  289. grid.getStore().load();
  290. }
  291. }
  292. });
  293. }else showResult('提示','请先选择需要复制权限标准岗位!');
  294. },
  295. addOrg:function(leaf,btn,type){
  296. var me = this,
  297. orgTree = Ext.getCmp('orgtree'),
  298. cellEditingPlugin = orgTree.cellEditingPlugin,
  299. selectionModel = orgTree.getSelectionModel(),
  300. selectedList = selectionModel.getSelection()[0];
  301. var parentId=selectedList && !type?selectedList.get('or_id'):0;
  302. parentList=parentId==0?orgTree.getRootNode():selectedList;
  303. newOrg =this.getNewOrg(parentId,btn);
  304. expandAndEdit = function() {
  305. if(parentList.isExpanded()) {
  306. selectionModel.select(newOrg);
  307. me.addedNode = newOrg;
  308. cellEditingPlugin.startEdit(newOrg, 0);
  309. } else {
  310. orgTree.on('afteritemexpand', function startEdit(list) {
  311. if(list === parentList) {
  312. selectionModel.select(newList);
  313. me.addedNode = newList;
  314. cellEditingPlugin.startEdit(newOrg, 0);
  315. orgTree.un('afteritemexpand', startEdit);
  316. }
  317. });
  318. parentList.expand();
  319. }
  320. };
  321. parentList.appendChild(newOrg);
  322. orgTree.getStore().sync();
  323. if(orgTree.getView().isVisible(true)) {
  324. expandAndEdit();
  325. } else {
  326. orgTree.on('expand', function onExpand() {
  327. expandAndEdit();
  328. listTree.un('expand', onExpand);
  329. });
  330. orgTree.expand();
  331. }
  332. },
  333. addJob:function(){
  334. var me = this,
  335. orgTree = Ext.getCmp('orgtree'),
  336. cellEditingPlugin = orgTree.cellEditingPlugin,
  337. selectionModel = orgTree.getSelectionModel(),
  338. selectedList = selectionModel.getSelection()[0];
  339. if(!selectedList) {
  340. showResult('提示','请选选择需要添加岗位的所属组织!');
  341. return;
  342. }
  343. var rec ={
  344. jo_id: '',
  345. jo_code: '',
  346. jo_name: '',
  347. jo_orgcode:selectedList.get('or_code'),
  348. jo_orgName:selectedList.get('or_name'),
  349. jo_orgId :selectedList.get('or_id')
  350. }, jobgrid=Ext.getCmp('jobgrid'); edit = jobgrid.cellEditingPlugin;
  351. edit.cancelEdit();
  352. jobgrid.store.insert(0, rec);
  353. edit.startEditByPosition({
  354. row: 0,
  355. column: 1
  356. });
  357. },
  358. addEmployee:function(){
  359. var me = this,
  360. employeegrid=Ext.getCmp('employeegrid'); edit = employeegrid.cellEditingPlugin;
  361. edit.cancelEdit();
  362. employeegrid.store.insert(0, {});
  363. edit.startEditByPosition({
  364. row: 0,
  365. column: 1
  366. });
  367. },
  368. saveJob:function(){
  369. var jobgrid=Ext.getCmp('jobgrid'),me=this;
  370. if(jobgrid.isVal()){
  371. jobgrid.store.sync({
  372. failure:function(){
  373. showResult('提示','保存失败,请检查岗位编号是否重复!');
  374. },
  375. success:function(){
  376. showResult('提示','保存成功!');
  377. me.reloadJob();
  378. }
  379. });
  380. }else showResult('提示','有必填项未填写无法保存!');
  381. },
  382. saveEmployee:function(){
  383. var employeegrid=Ext.getCmp('employeegrid');
  384. employeegrid.store.sync({
  385. failure:function(){
  386. showResult('提示','保存失败,请检查数据是否异常');
  387. },
  388. success:function(){
  389. showResult('提示','保存成功!');
  390. employeegrid.getStore().load();
  391. }
  392. });
  393. },
  394. deleteEmployee:function(){
  395. var employeegrid=Ext.getCmp('employeegrid');
  396. selectionModel=employeegrid.getSelectionModel(),
  397. selecteds = selectionModel.getSelection(),datas=new Array();
  398. Ext.Array.each(selecteds,function(item){
  399. if(item.get('em_id')) datas.push(Ext.JSON.encode(item.data));
  400. });
  401. Ext.Ajax.request({
  402. url : basePath + 'hr/employee/deleteEmployees.action',
  403. params: {
  404. jsonData:unescape(datas.toString())
  405. },
  406. callback : function(options,success,response){
  407. var res = new Ext.decode(response.responseText);
  408. showResult('提示','删除成功!');
  409. employeegrid.getStore().load();
  410. }
  411. });
  412. },
  413. getNewOrg:function(parentId,btn){
  414. var org=new Object();
  415. parentId=parentId?parentId:0;
  416. Ext.Ajax.request({//拿到tree数据
  417. url : basePath + 'hr/addOrgByParent.action',
  418. params: {
  419. parentId: parentId
  420. },
  421. async:false,
  422. callback : function(options,success,response){
  423. var res = new Ext.decode(response.responseText);
  424. if(res.org){
  425. org=res.org;
  426. org.loaded=true;
  427. org.id=org.or_id;
  428. }
  429. btn.setDisabled(false);
  430. }
  431. });
  432. return org;
  433. },
  434. showActions: function(view, list, node, rowIndex, e) {
  435. var icons = Ext.DomQuery.select('.x-action-col-icon', node),record=view.getRecord(node);
  436. Ext.each(icons, function(icon){
  437. Ext.get(icon).removeCls('x-hidden');
  438. });
  439. },
  440. hideActions: function(view, list, node, rowIndex, e) {
  441. var icons = Ext.DomQuery.select('.x-action-col-icon', node),record=view.getRecord(node);
  442. Ext.each(icons, function(icon){
  443. if(icon.getAttribute('src')==basePath+'jsps/sys/images/deletetree.png')
  444. Ext.get(icon).addCls('x-hidden');
  445. });
  446. },
  447. handleRemoveClick: function(view, rowIndex, colIndex, column, e) {
  448. var record=view.getRecord(view.findTargetByEvent(e)),title=record.get('or_name'), orgTree = Ext.getCmp('orgtree'),
  449. selModel = orgTree.getSelectionModel();
  450. Ext.Msg.confirm('删除数据?', '确定要删除当前选中组织 ('+title+')?',
  451. function(choice) {
  452. if(choice === 'yes') {
  453. Ext.Ajax.request({//拿到tree数据
  454. url : basePath + 'hr/employee/deleteHrOrg.action',
  455. params: {
  456. id: record.get('id')
  457. },
  458. async:false,
  459. callback : function(options,success,response){
  460. var res = new Ext.decode(response.responseText);
  461. if(res.success){
  462. showResult('提示','删除组织('+title+') 成功!');
  463. record.parentNode.removeChild(record);
  464. if (!selModel.hasSelection()) {
  465. selModel.select(0);
  466. }
  467. }
  468. }
  469. });
  470. }
  471. });
  472. },
  473. loadJprocessSet:function(caller){
  474. Ext.Ajax.request({//拿到tree数据
  475. url : basePath + 'common/getJprocessSet.action',
  476. params: {
  477. caller:caller
  478. },
  479. callback : function(options,success,response){
  480. var res = new Ext.decode(response.responseText);
  481. var jprocessset=res.data;
  482. delete jprocessset['js_id'];
  483. delete jprocessset['js_bean'];
  484. delete jprocessset['js_serviceclass'];
  485. delete jprocessset['js_codefield'];
  486. Ext.getCmp('jprocesssetgrid').setSource(jprocessset);
  487. }
  488. });
  489. },
  490. addDepartSuccess:function(panel,btn){
  491. Ext.getCmp('departgrid').getStore().load();
  492. var win=btn.up('window');
  493. if(win) win.close();
  494. }
  495. });