GroupPower.js 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176
  1. /**
  2. * ERP项目groupgrid样式:hrjob分组
  3. */
  4. Ext.define('erp.view.core.grid.GroupPower',{
  5. extend: 'Ext.grid.Panel',
  6. alias: 'widget.grouppower',
  7. requires: ['erp.view.core.grid.HeaderFilter'],
  8. layout : 'fit',
  9. id: 'grid',
  10. emptyText : $I18N.common.grid.emptyText,
  11. columnLines : true,
  12. autoScroll : true,
  13. iconCls: 'icon-grid',
  14. frame: true,
  15. bodyStyle:'background-color:#f1f1f1;',
  16. features: [Ext.create('Ext.grid.feature.Grouping',{
  17. startCollapsed: false,
  18. groupHeaderTpl: '{name} ({rows.length})'
  19. })],
  20. plugins: [Ext.create('erp.view.core.grid.HeaderFilter')],
  21. store: Ext.create('Ext.data.Store', {
  22. fields: [{
  23. name: 'em_id',
  24. type: 'number'
  25. },{
  26. name: 'jo_orgid',
  27. type: 'number'
  28. },{
  29. name:'jo_orgname',
  30. type:'string'
  31. },{
  32. name:'jo_description',
  33. type:'string'
  34. },{
  35. name:'jo_name',
  36. type:'string'
  37. },{
  38. name:'jo_id',
  39. type:'number'
  40. },{
  41. name:'pp_see',
  42. type:'bool'
  43. },{
  44. name:'pp_selflist',
  45. type:'bool'
  46. },{
  47. name:'pp_alllist',
  48. type:'bool'
  49. },{
  50. name:'pp_add',
  51. type:'bool'
  52. },{
  53. name:'pp_delete',
  54. type:'bool'
  55. },{
  56. name:'pp_save',
  57. type:'bool'
  58. },{
  59. name:'pp_saveoth',
  60. type:'bool'
  61. },{
  62. name:'pp_commit',
  63. type:'bool'
  64. },{
  65. name:'pp_uncommit',
  66. type:'bool'
  67. },{
  68. name:'pp_audit',
  69. type:'bool'
  70. },{
  71. name:'pp_unaudit',
  72. type:'bool'
  73. },{
  74. name:'pp_print',
  75. type:'bool'
  76. },{
  77. name:'pp_printoth',
  78. type:'bool'
  79. },{
  80. name:'pp_disable',
  81. type:'bool'
  82. },{
  83. name:'pp_undisable',
  84. type:'bool'
  85. },{
  86. name:'pp_closed',
  87. type:'bool'
  88. },{
  89. name:'pp_unclosed',
  90. type:'bool'
  91. },{
  92. name:'pp_posting',
  93. type:'bool'
  94. },{
  95. name:'pp_unposting',
  96. type:'bool'
  97. },{
  98. name: 'pp_more',
  99. type: 'string'
  100. }],
  101. sorters: [{
  102. property : 'jo_id',
  103. direction: 'ASC'
  104. }],
  105. groupField: 'jo_orgname'
  106. }),
  107. defaultColumns: [{
  108. text: 'ID',
  109. hidden: true,
  110. dataIndex: 'jo_id'
  111. },{
  112. text: '组织ID',
  113. hidden: true,
  114. dataIndex: 'jo_orgid'
  115. },{
  116. text: '组织名称',
  117. hidden: true,
  118. dataIndex: 'jo_orgname'
  119. },{
  120. text: '岗位名称',
  121. width: 220,
  122. cls: 'x-grid-header',
  123. dataIndex: 'jo_name',
  124. filter: {xtype: 'textfield', filterName: 'jo_name'},
  125. setPadding: Ext.emptyFn
  126. },{
  127. text: '操作名称',
  128. columns: [{
  129. text: '<br>新增',
  130. width: 45,
  131. cls: 'x-grid-header',
  132. xtype: 'checkcolumn',
  133. editor: {
  134. xtype: 'checkbox',
  135. cls: 'x-grid-checkheader-editor'
  136. },
  137. dataIndex: 'pp_add'
  138. },{
  139. text: '<br>浏览',
  140. width: 45,
  141. cls: 'x-grid-header',
  142. xtype: 'checkcolumn',
  143. editor: {
  144. xtype: 'checkbox',
  145. cls: 'x-grid-checkheader-editor'
  146. },
  147. dataIndex: 'pp_see'
  148. },{
  149. text: '<br>删除',
  150. width: 45,
  151. cls: 'x-grid-header',
  152. xtype: 'checkcolumn',
  153. editor: {
  154. xtype: 'checkbox',
  155. cls: 'x-grid-checkheader-editor'
  156. },
  157. dataIndex: 'pp_delete'
  158. },{
  159. text: '<br>修改',
  160. width: 45,
  161. cls: 'x-grid-header',
  162. xtype: 'checkcolumn',
  163. editor: {
  164. xtype: 'checkbox',
  165. cls: 'x-grid-checkheader-editor'
  166. },
  167. dataIndex: 'pp_save'
  168. },{
  169. text: '修<br/>改他人',
  170. width: 45,
  171. cls: 'x-grid-header',
  172. xtype: 'checkcolumn',
  173. editor: {
  174. xtype: 'checkbox',
  175. cls: 'x-grid-checkheader-editor'
  176. },
  177. dataIndex: 'pp_saveoth'
  178. },{
  179. text: '<br>提交',
  180. width: 45,
  181. cls: 'x-grid-header',
  182. xtype: 'checkcolumn',
  183. editor: {
  184. xtype: 'checkbox',
  185. cls: 'x-grid-checkheader-editor'
  186. },
  187. dataIndex: 'pp_commit'
  188. },{
  189. text: '反<br/>提交',
  190. width: 45,
  191. cls: 'x-grid-header',
  192. xtype: 'checkcolumn',
  193. editor: {
  194. xtype: 'checkbox',
  195. cls: 'x-grid-checkheader-editor'
  196. },
  197. dataIndex: 'pp_uncommit'
  198. },{
  199. text: '<br>审核',
  200. width: 45,
  201. cls: 'x-grid-header',
  202. xtype: 'checkcolumn',
  203. editor: {
  204. xtype: 'checkbox',
  205. cls: 'x-grid-checkheader-editor'
  206. },
  207. dataIndex: 'pp_audit'
  208. },{
  209. text: '反<br/>审核',
  210. width: 45,
  211. cls: 'x-grid-header',
  212. xtype: 'checkcolumn',
  213. editor: {
  214. xtype: 'checkbox',
  215. cls: 'x-grid-checkheader-editor'
  216. },
  217. dataIndex: 'pp_unaudit'
  218. },{
  219. text: '<br>打印',
  220. width: 45,
  221. cls: 'x-grid-header',
  222. xtype: 'checkcolumn',
  223. editor: {
  224. xtype: 'checkbox',
  225. cls: 'x-grid-checkheader-editor'
  226. },
  227. dataIndex: 'pp_print'
  228. },{
  229. text: '打印<br/>他人',
  230. width: 45,
  231. cls: 'x-grid-header',
  232. xtype: 'checkcolumn',
  233. editor: {
  234. xtype: 'checkbox',
  235. cls: 'x-grid-checkheader-editor'
  236. },
  237. dataIndex: 'pp_printoth'
  238. },{
  239. text: '<br>禁用',
  240. width: 45,
  241. cls: 'x-grid-header',
  242. xtype: 'checkcolumn',
  243. editor: {
  244. xtype: 'checkbox',
  245. cls: 'x-grid-checkheader-editor'
  246. },
  247. dataIndex: 'pp_disable'
  248. },{
  249. text: '反<br/>禁用',
  250. width: 45,
  251. cls: 'x-grid-header',
  252. xtype: 'checkcolumn',
  253. editor: {
  254. xtype: 'checkbox',
  255. cls: 'x-grid-checkheader-editor'
  256. },
  257. dataIndex: 'pp_undisable'
  258. },{
  259. text: '<br>操作',
  260. width: 45,
  261. cls: 'x-grid-header',
  262. xtype: 'checkcolumn',
  263. editor: {
  264. xtype: 'checkbox',
  265. cls: 'x-grid-checkheader-editor'
  266. },
  267. dataIndex: 'pp_closed'
  268. },{
  269. text: '反<br/>操作',
  270. width: 45,
  271. cls: 'x-grid-header',
  272. xtype: 'checkcolumn',
  273. editor: {
  274. xtype: 'checkbox',
  275. cls: 'x-grid-checkheader-editor'
  276. },
  277. dataIndex: 'pp_unclosed'
  278. },{
  279. text: '<br>过账',
  280. width: 45,
  281. cls: 'x-grid-header',
  282. xtype: 'checkcolumn',
  283. editor: {
  284. xtype: 'checkbox',
  285. cls: 'x-grid-checkheader-editor'
  286. },
  287. dataIndex: 'pp_posting'
  288. },{
  289. text: '反<br/>过账',
  290. width: 45,
  291. cls: 'x-grid-header',
  292. xtype: 'checkcolumn',
  293. editor: {
  294. xtype: 'checkbox',
  295. cls: 'x-grid-checkheader-editor'
  296. },
  297. dataIndex: 'pp_unposting'
  298. },{
  299. text: '更多',
  300. width: 45,
  301. cls: 'x-grid-header',
  302. dataIndex: 'pp_more',
  303. xtype: 'numbercolumn',
  304. renderer: function(val, meta){
  305. meta.tdCls = 'x-grid-search-trigger';
  306. meta.style = 'cursor:pointer;';
  307. return val;
  308. },
  309. processEvent: function(type, view, cell, recordIndex, cellIndex, e) {
  310. if (type == 'mousedown' || (type == 'keydown' && (e.getKey() == e.ENTER || e.getKey() == e.SPACE))) {
  311. var grid = view.ownerCt, record = grid.store.getAt(recordIndex);
  312. grid.setMore(grid.pp_caller, record.data.jo_id);
  313. }
  314. return false;
  315. }
  316. },{
  317. text: '特殊',
  318. width: 45,
  319. cls: 'x-grid-header',
  320. dataIndex: 'pp_special',
  321. xtype: 'numbercolumn',
  322. renderer: function(val, meta){
  323. meta.tdCls = 'x-grid-search-trigger';
  324. meta.style = 'cursor:pointer;';
  325. return val;
  326. },
  327. processEvent: function(type, view, cell, recordIndex, cellIndex, e) {
  328. if (type == 'mousedown' || (type == 'keydown' && (e.getKey() == e.ENTER || e.getKey() == e.SPACE))) {
  329. var grid = view.ownerCt, record = grid.store.getAt(recordIndex);
  330. grid.setSpecial(grid.pp_caller, record.data.jo_id);
  331. }
  332. return false;
  333. }
  334. }]
  335. }],
  336. listColumns: [{
  337. text: 'ID',
  338. hidden: true,
  339. dataIndex: 'jo_id'
  340. },{
  341. text: '组织ID',
  342. hidden: true,
  343. dataIndex: 'jo_orgid'
  344. },{
  345. text: '组织名称',
  346. hidden: true,
  347. dataIndex: 'jo_orgname'
  348. },{
  349. text: '岗位名称',
  350. width: 220,
  351. cls: 'x-grid-header',
  352. dataIndex: 'jo_name',
  353. filter: {xtype: 'textfield', filterName: 'jo_name'},
  354. setPadding: Ext.emptyFn
  355. },{
  356. text: '操作名称',
  357. columns: [{
  358. text: '浏<br>览自己',
  359. width: 45,
  360. cls: 'x-grid-header',
  361. xtype: 'checkcolumn',
  362. editor: {
  363. xtype: 'checkbox',
  364. cls: 'x-grid-checkheader-editor'
  365. },
  366. dataIndex: 'pp_selflist'
  367. },{
  368. text: '浏<br>览所有',
  369. width: 45,
  370. cls: 'x-grid-header',
  371. xtype: 'checkcolumn',
  372. editor: {
  373. xtype: 'checkbox',
  374. cls: 'x-grid-checkheader-editor'
  375. },
  376. dataIndex: 'pp_alllist'
  377. }]
  378. },{
  379. text: '更多',
  380. width: 45,
  381. cls: 'x-grid-header',
  382. dataIndex: 'pp_more',
  383. xtype: 'numbercolumn',
  384. renderer: function(val, meta){
  385. meta.tdCls = 'x-grid-search-trigger';
  386. meta.style = 'cursor:pointer;';
  387. return val;
  388. },
  389. processEvent: function(type, view, cell, recordIndex, cellIndex, e) {
  390. if (type == 'mousedown' || (type == 'keydown' && (e.getKey() == e.ENTER || e.getKey() == e.SPACE))) {
  391. var grid = view.ownerCt, record = grid.store.getAt(recordIndex);
  392. grid.setMore(grid.pp_caller, record.data.jo_id);
  393. }
  394. return false;
  395. }
  396. }],
  397. dealColumns: [{
  398. text: 'ID',
  399. hidden: true,
  400. dataIndex: 'jo_id'
  401. },{
  402. text: '组织ID',
  403. hidden: true,
  404. dataIndex: 'jo_orgid'
  405. },{
  406. text: '组织名称',
  407. hidden: true,
  408. dataIndex: 'jo_orgname'
  409. },{
  410. text: '岗位名称',
  411. width: 220,
  412. cls: 'x-grid-header',
  413. dataIndex: 'jo_name',
  414. filter: {xtype: 'textfield', filterName: 'jo_name'},
  415. setPadding: Ext.emptyFn
  416. },{
  417. text: '操作名称',
  418. columns: [{
  419. text: '浏览',
  420. width: 45,
  421. cls: 'x-grid-header',
  422. xtype: 'checkcolumn',
  423. editor: {
  424. xtype: 'checkbox',
  425. cls: 'x-grid-checkheader-editor'
  426. },
  427. dataIndex: 'pp_see'
  428. }]
  429. },{
  430. text: '特殊',
  431. width: 45,
  432. cls: 'x-grid-header',
  433. dataIndex: 'pp_special',
  434. xtype: 'numbercolumn',
  435. renderer: function(val, meta){
  436. meta.tdCls = 'x-grid-search-trigger';
  437. meta.style = 'cursor:pointer;';
  438. return val;
  439. },
  440. processEvent: function(type, view, cell, recordIndex, cellIndex, e) {
  441. if (type == 'mousedown' || (type == 'keydown' && (e.getKey() == e.ENTER || e.getKey() == e.SPACE))) {
  442. var grid = view.ownerCt, record = grid.store.getAt(recordIndex);
  443. grid.setSpecial(grid.pp_caller, record.data.jo_id);
  444. }
  445. return false;
  446. }
  447. }],
  448. tbar: [{
  449. xtype: 'tbtext',
  450. id: 'power_title'
  451. },'->',{
  452. xtype: 'combo',
  453. fieldLabel: '搜索岗位',
  454. margin: '0 5 0 0',
  455. width: 300,
  456. labelWidth: 80,
  457. id: 'job_combo',
  458. displayField: 'display',
  459. valueField: 'value',
  460. queryMode: 'local',
  461. anyMatch: true,
  462. store: new Ext.data.Store({
  463. fields: ['display', 'value']
  464. }),
  465. listeners: {
  466. change: function(c) {
  467. var v = c.value, grid = c.ownerCt.ownerCt;
  468. if(!Ext.isEmpty(v)) {
  469. grid.store.clearFilter(true);
  470. if(v != ' ') {
  471. grid.store.filter(new Ext.util.Filter({
  472. filterFn: function(item) {
  473. return item.get('jo_name') == v;
  474. }
  475. }));
  476. } else {
  477. grid.store.filter(new Ext.util.Filter({
  478. filterFn: function(item) {
  479. return true;
  480. }
  481. }));
  482. }
  483. }
  484. }
  485. }
  486. },{
  487. text: '个人权限',
  488. cls: 'x-btn-blue',
  489. margin: '0 5 0 0',
  490. id: 'personal_set'
  491. },{
  492. text: '特殊权限设置',
  493. cls: 'x-btn-blue',
  494. margin: '0 5 0 0',
  495. id: 'special_set'
  496. },{
  497. text: '复制权限',
  498. cls: 'x-btn-blue',
  499. margin: '0 5 0 0',
  500. id: 'power_copy'
  501. },{
  502. text: '权限同步',
  503. cls: 'x-btn-blue',
  504. margin: '0 5 0 0',
  505. id: 'power_sync'
  506. },{
  507. iconCls: 'tree-save',
  508. cls: 'x-btn-blue',
  509. text: $I18N.common.button.erpSaveButton,
  510. handler: function(){
  511. var grid = Ext.getCmp('grid'),set = grid.powerSet;
  512. var positionpowers = [];
  513. var positionpower = null;
  514. Ext.each(grid.store.data.items, function(d){
  515. if(this.dirty){
  516. positionpower = new Object();
  517. positionpower.pp_caller = grid.pp_caller;
  518. positionpower.pp_id = d.data['pp_id'];
  519. if(grid._self) {
  520. positionpower.pp_emid = d.data['jo_id'];
  521. } else {
  522. positionpower.pp_joid = d.data['jo_id'];
  523. }
  524. Ext.each(set, function(s){
  525. positionpower[s] = d.data[s] ? 1 : 0;
  526. });
  527. positionpowers.push(positionpower);
  528. }
  529. });
  530. if(positionpowers.length > 0){
  531. grid.setLoading(true);
  532. Ext.Ajax.request({//拿到grid的columns
  533. url : basePath + 'hr/employee/updateJobPower.action',
  534. params: {
  535. update: Ext.encode(positionpowers),
  536. _self: grid._self
  537. },
  538. method : 'post',
  539. timeout : 240000,
  540. callback : function(options,success,response){
  541. grid.setLoading(false);
  542. var res = new Ext.decode(response.responseText);
  543. if(res.exception || res.exceptionInfo){
  544. showError(res.exceptionInfo);
  545. return;
  546. }
  547. if(res.success){
  548. updateSuccess(function(){
  549. if(grid._self) {
  550. grid.getPersonalData(grid.urlType, grid._persons);
  551. } else {
  552. grid.getGroupData(grid.urlType);
  553. }
  554. });
  555. }
  556. }
  557. });
  558. }
  559. }
  560. }, '->'],
  561. initComponent : function(){
  562. this.columns = this.defaultColumns;
  563. this.callParent(arguments);
  564. },
  565. listeners: {//滚动条有时候没反应,添加此监听器
  566. scrollershow: function(scroller) {
  567. if (scroller && scroller.scrollEl) {
  568. scroller.clearManagedListeners();
  569. scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller);
  570. }
  571. }
  572. },
  573. powerSet: ['pp_see', 'pp_selflist', 'pp_alllist', 'pp_add', 'pp_delete', 'pp_save', 'pp_saveoth', 'pp_commit',
  574. 'pp_uncommit', 'pp_audit', 'pp_unaudit', 'pp_print', 'pp_printoth', 'pp_disable',
  575. 'pp_undisable', 'pp_closed', 'pp_unclosed', 'pp_posting', 'pp_unposting'],
  576. listSet:['pp_selflist','pp_alllist'],
  577. dealSet:['pp_see'],
  578. 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'],
  579. getGroupData: function(type){
  580. var me = this;
  581. me.setLoading(true);
  582. Ext.Ajax.request({
  583. url : basePath + 'hr/employee/getHrJob.action',
  584. params: {
  585. caller: me.pp_caller,
  586. utype: type,
  587. _self: false
  588. },
  589. method : 'post',
  590. callback : function(options,success,response){
  591. me.setLoading(false);
  592. var res = new Ext.decode(response.responseText);
  593. if(res.exception || res.exceptionInfo){
  594. showError(res.exceptionInfo);
  595. return;
  596. }
  597. if(!res.hrjob){
  598. return;
  599. } else {
  600. var data = new Array();
  601. Ext.each(res.hrjob, function(){
  602. var j = this;
  603. Ext.each(res.positionpower, function(pp){
  604. if(j.jo_id == pp.pp_joid){
  605. j = Ext.Object.merge(j, pp);
  606. j.pp_id = pp.pp_id;
  607. Ext.each(me.powerSet, function(s){
  608. j[s] = pp[s] == 1;
  609. });
  610. }
  611. });
  612. data.push(j);
  613. });
  614. me.formdetail = res.formdetail;
  615. me.detailgrid = res.detailgrid;
  616. me.datalist = res.datalist;
  617. me.relativedatalist = res.relativedatalist;
  618. me.store.loadData(data);
  619. var cm = me.down('gridcolumn[dataIndex=jo_name]');
  620. cm.setText('岗位名称');
  621. me._self = false;
  622. if(type != null) {
  623. if(type == 'list' && me.urlType != 'list') {
  624. me.reconfigure(me.store, me.listColumns);
  625. } else if(type == 'deal' && me.urlType != 'deal') {
  626. me.reconfigure(me.store, me.dealColumns);
  627. }
  628. } else {
  629. if(me.urlType != null) {
  630. me.reconfigure(me.store, me.defaultColumns);
  631. }
  632. }
  633. me.urlType = type;
  634. me.filterJob(res.hrjob);
  635. me.resetHeaderChecker();
  636. me.rememberLastFilter();
  637. me.plugins[0].renderFilters();
  638. }
  639. }
  640. });
  641. },
  642. rememberLastFilter: function() {
  643. var me = this, filter = this.store.filters.findBy(function(filter){
  644. return filter.property == '$all';
  645. });
  646. if(filter && filter.filterArr) {
  647. me.headerFilters = {};
  648. Ext.Array.each(filter.filterArr, function(f){
  649. me.headerFilters[f.property] = f.value;
  650. });
  651. }
  652. },
  653. resetHeaderChecker: function() {
  654. var columns = this.headerCt.getGridColumns();
  655. Ext.Array.each(columns, function(c){
  656. if(c.headerCheckable) {
  657. var ch = Ext.get(c.dataIndex + '-checkbox');
  658. ch && (ch.dom.checked = false);
  659. }
  660. });
  661. },
  662. selModel: Ext.create('Ext.selection.CheckboxModel',{
  663. listeners:{
  664. 'select': function(selModel, record){
  665. selModel.view.ownerCt.selectAllPower(record);
  666. },
  667. 'deselect': function(selModel, record){
  668. selModel.view.ownerCt.deselectAllPower(record);
  669. }
  670. },
  671. onHeaderClick: function(headerCt, header, e) {
  672. var grid = headerCt.ownerCt;
  673. if (header.isCheckerHd) {
  674. var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
  675. if (!isChecked) {
  676. grid.store.each(function(item){
  677. grid.selectAllPower(item);
  678. });
  679. grid.selModel.selectAll();
  680. } else {
  681. grid.store.each(function(item){
  682. grid.deselectAllPower(item);
  683. });
  684. grid.selModel.deselectAll();
  685. }
  686. }
  687. }
  688. }),
  689. selectAllPower: function(record){
  690. var me = this, set = null;
  691. if(me.urlType=='list'){
  692. set=me.listSet;
  693. }else if(me.urlType=='deal') set=me.dealSet;
  694. else set=me.defaultSet;
  695. Ext.each(set, function(s){
  696. record.set(s, true);
  697. });
  698. },
  699. deselectAllPower: function(record){
  700. var me = this, set = null;
  701. if(me.urlType=='list'){
  702. set=me.listSet;
  703. }else if(me.urlType=='deal') set=me.dealSet;
  704. else set=me.defaultSet;
  705. Ext.each(set, function(s){
  706. record.set(s, false);
  707. });
  708. },
  709. setMore: function(caller, id){
  710. var me = this,
  711. winId = 'win_' + caller + '_' + id + '_' + (me.urlType || '') + '_' + me._self,
  712. win = Ext.getCmp(winId);
  713. if(win) {
  714. win.show();
  715. } else {
  716. win = Ext.create('Ext.Window', {
  717. id: winId,
  718. title: me.down('#power_title').el.dom.innerHTML + '<center>请选择不允许查看和修改的字段</center>',
  719. modal: true,
  720. autoShow: true,
  721. closeAction: 'hide',
  722. height: '80%',
  723. width: '80%',
  724. layout: 'anchor',
  725. jobId: id,
  726. buttonAlign: 'center',
  727. buttons: [{
  728. text: $I18N.common.button.erpSaveButton,
  729. iconCls: 'x-button-icon-save',
  730. cls: 'x-btn-gray',
  731. handler: function(btn){
  732. me.saveMore(btn.ownerCt.ownerCt);
  733. }
  734. },{
  735. text: $I18N.common.button.erpCloseButton,
  736. iconCls: 'x-button-icon-close',
  737. cls: 'x-btn-gray',
  738. handler: function(btn) {
  739. btn.ownerCt.ownerCt.close();
  740. }
  741. }]
  742. });
  743. var f = me.formdetail,g = me.detailgrid, d = me.datalist,r=me.relativedatalist, mainitems = new Array(),relativeitems=new Array(),mainanchor='';
  744. if(d && d.length > 0) {
  745. Ext.each(d, function(i){
  746. if(i.dld_width > 0) {
  747. mainitems.push({
  748. xtype: 'checkbox',
  749. name: i.dld_field,
  750. boxLabel: i.dld_caption
  751. });
  752. }
  753. });
  754. if(r && r.length>0) me.relativeCaller=r[0].dld_caller;
  755. Ext.each(r, function(i){
  756. if(i.dld_width > 0) {
  757. relativeitems.push({
  758. xtype: 'checkbox',
  759. name: i.dld_field,
  760. boxLabel: i.dld_caption
  761. });
  762. }
  763. });
  764. mainanchor=relativeitems.length>0?'100% 50%':'100% 100%'
  765. win.add({
  766. anchor: mainanchor,
  767. xtype: 'form',
  768. group: 'list',
  769. bodyStyle: 'background:#f1f1f1;',
  770. autoScroll : true,
  771. items: mainitems,
  772. layout: {
  773. type: 'table',
  774. columns: 7
  775. },
  776. fieldDefaults: {
  777. margin: '2 10 2 10',
  778. checkedCls: 'checked'
  779. }
  780. });
  781. if(relativeitems.length>0){
  782. win.add({
  783. anchor: '100% 50%',
  784. xtype: 'form',
  785. title:'<h2>关联列表<h2>',
  786. group: 'relativelist',
  787. bodyStyle: 'background:#f1f1f1;',
  788. autoScroll : true,
  789. layout: {
  790. type: 'table',
  791. columns: 7
  792. },
  793. items:relativeitems,
  794. fieldDefaults: {
  795. margin: '2 10 2 10',
  796. checkedCls: 'checked'
  797. }
  798. });
  799. }
  800. }
  801. if(f && f.length > 0) {
  802. var items = new Array();
  803. Ext.each(f, function(i){
  804. if(i.fd_type != 'H') {
  805. items.push({
  806. xtype: 'checkbox',
  807. name: i.fd_field,
  808. boxLabel: i.fd_caption
  809. });
  810. }
  811. });
  812. var h = g.length == 0 ? 100 : 50;
  813. win.add({
  814. anchor: '100% ' + h + '%',
  815. xtype: 'form',
  816. group: 'form',
  817. bodyStyle: 'background:#f1f1f1;',
  818. autoScroll : true,
  819. items: items,
  820. layout: {
  821. type: 'table',
  822. columns: 7
  823. },
  824. fieldDefaults: {
  825. margin: '2 10 2 10',
  826. checkedCls: 'checked'
  827. }
  828. });
  829. }
  830. if(g && g.length > 0) {
  831. var items = new Array();
  832. Ext.each(g, function(i){
  833. if(i.dg_width > 0) {
  834. items.push({
  835. xtype: 'checkbox',
  836. name: i.dg_field,
  837. boxLabel: i.dg_caption
  838. });
  839. }
  840. });
  841. var h = f.length == 0 ? 100 : 50;
  842. win.add({
  843. anchor: '100% ' + h + '%',
  844. xtype: 'form',
  845. group: 'grid',
  846. bodyStyle: 'background:#f1f1f1;',
  847. autoScroll : true,
  848. items: items,
  849. layout: {
  850. type: 'table',
  851. columns: 7
  852. },
  853. fieldDefaults: {
  854. margin: '2 10 2 10',
  855. checkedCls: 'checked'
  856. }
  857. });
  858. }
  859. Ext.Ajax.request({
  860. url: basePath + 'hr/employee/getHrJobLimits.action',
  861. params: {
  862. caller: caller,
  863. utype: me.urlType,
  864. _self: me._self,
  865. id: id
  866. },
  867. method: 'post',
  868. callback: function(opt, s, r) {
  869. var res = Ext.decode(r.responseText);
  870. if(res.limits) {
  871. var ch = null;
  872. Ext.each(res.limits, function(l){
  873. if(l.lf_isform == 1) {
  874. ch = win.down('form[group=form]').down('checkbox[name=' + l.lf_field + ']');
  875. } else if(l.lf_isform == 0) {
  876. ch = win.down('form[group=grid]').down('checkbox[name=' + l.lf_field + ']');
  877. } else if(d && d.length > 0 && l.lf_isform == 2) {
  878. ch = win.down('form[group=list]').down('checkbox[name=' + l.lf_field + ']');
  879. }
  880. if(ch) ch.setValue(true);
  881. });
  882. }
  883. if(res.relativelimits && relativeitems.length>0){
  884. Ext.each(res.relativelimits, function(l){
  885. if(l.lf_isform == 2) {
  886. ch = win.down('form[group=relativelist]').down('checkbox[name=' + l.lf_field + ']');
  887. }
  888. if(ch) ch.setValue(true);
  889. });
  890. }
  891. }
  892. });
  893. }
  894. },
  895. saveMore: function(win){
  896. var me = this, f = win.down('form[group=form]'), g = win.down('form[group=grid]'),
  897. d = win.down('form[group=list]'),r=win.down('form[group=relativelist]'), data = new Array(),
  898. caller = me.pp_caller, joid = win.jobId, obj = new Object();
  899. if(f) {
  900. var items = f.query('checkbox[checked=true]');
  901. Ext.each(items, function(item){
  902. obj = new Object();
  903. obj[me._self ? 'lf_emid' : 'lf_joid'] = joid;
  904. obj.lf_caller = caller;
  905. obj.lf_field = item.name;
  906. obj.lf_isform = 1;
  907. data.push(obj);
  908. });
  909. }
  910. if(g) {
  911. var items = g.query('checkbox[checked=true]');
  912. Ext.each(items, function(item){
  913. obj = new Object();
  914. obj[me._self ? 'lf_emid' : 'lf_joid'] = joid;
  915. obj.lf_caller = caller;
  916. obj.lf_field = item.name;
  917. obj.lf_isform = 0;
  918. data.push(obj);
  919. });
  920. }
  921. if(d) {
  922. var items = d.query('checkbox[checked=true]');
  923. Ext.each(items, function(item){
  924. obj = new Object();
  925. obj[me._self ? 'lf_emid' : 'lf_joid'] = joid;
  926. obj.lf_caller = caller;
  927. obj.lf_field = item.name;
  928. obj.lf_isform = 2;
  929. data.push(obj);
  930. });
  931. }
  932. if(r) {
  933. var items = r.query('checkbox[checked=true]');
  934. Ext.each(items, function(item){
  935. obj = new Object();
  936. obj[me._self ? 'lf_emid' : 'lf_joid'] = joid;
  937. obj.lf_caller = me.relativeCaller;
  938. obj.lf_field = item.name;
  939. obj.lf_isform = 2;
  940. data.push(obj);
  941. });
  942. }
  943. me.setLoading(true);
  944. Ext.Ajax.request({
  945. url: basePath + 'hr/employee/saveHrJobLimits.action',
  946. params: {
  947. caller: caller,
  948. relativeCaller:me.relativeCaller,
  949. id: joid,
  950. _self: me._self,
  951. data: Ext.encode(data)
  952. },
  953. method: 'post',
  954. callback: function(opt, s, r) {
  955. me.setLoading(false);
  956. var res = Ext.decode(r.responseText);
  957. if(res.success) {
  958. alert('修改成功!');
  959. win.close();
  960. }
  961. }
  962. });
  963. },
  964. getPersonalData: function(type, em){
  965. var me = this;
  966. me.setLoading(true);
  967. me._persons = em;
  968. var emid = Ext.Array.concate(em, ',', 'em_id');
  969. Ext.Ajax.request({
  970. url : basePath + 'hr/employee/getSelfPower.action',
  971. params: {
  972. caller: me.pp_caller,
  973. utype: type,
  974. emid: emid
  975. },
  976. method : 'post',
  977. callback : function(options,success,response){
  978. me.setLoading(false);
  979. var res = new Ext.decode(response.responseText);
  980. if(res.exception || res.exceptionInfo){
  981. showError(res.exceptionInfo);
  982. return;
  983. }
  984. if(!res.success){
  985. return;
  986. } else {
  987. var data = new Array();
  988. Ext.each(em, function(j){
  989. var o = new Object();
  990. o.jo_id = j.em_id;
  991. o.pp_joid = j.em_id;
  992. o.jo_name = j.em_name;
  993. Ext.each(res.personalpower, function(pp){
  994. if(j.em_id == pp.pp_emid){
  995. o = Ext.Object.merge(o, pp);
  996. Ext.each(me.powerSet, function(s){
  997. o[s] = pp[s] == 1;
  998. });
  999. }
  1000. });
  1001. data.push(o);
  1002. });
  1003. me.formdetail = res.formdetail;
  1004. me.detailgrid = res.detailgrid;
  1005. me.datalist = res.datalist;
  1006. me.relativedatalist = res.relativedatalist;
  1007. me.store.loadData(data);
  1008. var cm = me.down('gridcolumn[dataIndex=jo_name]');
  1009. cm.setText('人员名称');
  1010. me._self = true;
  1011. if(type != null) {
  1012. if(type == 'list' && me.urlType != 'list') {
  1013. me.reconfigure(me.store, me.listColumns);
  1014. } else if(type == 'deal' && me.urlType != 'deal') {
  1015. me.reconfigure(me.store, me.dealColumns);
  1016. }
  1017. } else {
  1018. if(me.urlType != null) {
  1019. me.reconfigure(me.store, me.defaultColumns);
  1020. }
  1021. }
  1022. me.urlType = type;
  1023. }
  1024. }
  1025. });
  1026. },
  1027. setSpecial: function(caller, id){
  1028. var me = this,
  1029. winId = 'special_win_' + caller + '_' + id + '_' + (me.urlType || '') + '_' + me._self,
  1030. win = Ext.getCmp(winId);
  1031. if(win) {
  1032. win.show();
  1033. } else {
  1034. win = Ext.create('Ext.Window', {
  1035. id: winId,
  1036. title: me.down('#power_title').el.dom.innerHTML + '<center>特殊权限设置</center>',
  1037. modal: true,
  1038. autoShow: true,
  1039. closeAction: 'hide',
  1040. height: 500,
  1041. width: 360,
  1042. layout: 'anchor',
  1043. jobId: id,
  1044. items: [{
  1045. xtype: 'form',
  1046. anchor: '100% 100%',
  1047. layout: 'vbox',
  1048. bodyStyle: 'background:#f1f2f5;',
  1049. defaults: {
  1050. xtype: 'checkbox',
  1051. margin: '5 5 5 10'
  1052. }
  1053. }],
  1054. buttonAlign: 'center',
  1055. buttons: [{
  1056. text: $I18N.common.button.erpSaveButton,
  1057. iconCls: 'x-button-icon-save',
  1058. cls: 'x-btn-gray',
  1059. handler: function(btn){
  1060. me.saveSpecial(btn.ownerCt.ownerCt);
  1061. }
  1062. },{
  1063. text: $I18N.common.button.erpCloseButton,
  1064. iconCls: 'x-button-icon-close',
  1065. cls: 'x-btn-gray',
  1066. handler: function(btn) {
  1067. btn.ownerCt.ownerCt.close();
  1068. }
  1069. }]
  1070. });
  1071. Ext.Ajax.request({
  1072. url: basePath + 'ma/power/getSysSpecialPowers.action',
  1073. params: {
  1074. caller: caller
  1075. },
  1076. callback: function(opt, s, r) {
  1077. var rs = Ext.decode(r.responseText);
  1078. if(rs.exceptionInfo) {
  1079. showError(rs.exceptionInfo);
  1080. } else if(rs.data){
  1081. var form = win.down('form');
  1082. Ext.each(rs.data, function() {
  1083. form.add({
  1084. itemId: this.ssp_id,
  1085. boxLabel: this.ssp_desc
  1086. });
  1087. });
  1088. if(rs.data.length > 0) {
  1089. var ssp = Ext.Array.concate(rs.data, ',', 'ssp_id');
  1090. Ext.Ajax.request({
  1091. url: basePath + 'common/getFieldDatas.action',
  1092. params: {
  1093. caller: 'SpecialPower',
  1094. field: 'sp_sspid',
  1095. condition: (me._self ? 'sp_emid' : 'sp_joid') + '=' + id + ' AND sp_sspid in(' + ssp + ')'
  1096. },
  1097. callback: function(opt, s, r) {
  1098. var res = Ext.decode(r.responseText);
  1099. if(res.data) {
  1100. var arr = res.data.split('#');
  1101. Ext.each(arr, function(){
  1102. form.down('checkbox[itemId=' + this + ']').setValue(true);
  1103. });
  1104. }
  1105. }
  1106. });
  1107. }
  1108. }
  1109. }
  1110. });
  1111. }
  1112. },
  1113. saveSpecial: function(win) {
  1114. var me = this, form = win.down('form');
  1115. if(form.items.items.length > 0) {
  1116. var data = new Array();
  1117. form.getForm().getFields().each(function (f){
  1118. data.push({
  1119. sp_sspid: Number(f.itemId),
  1120. checked: f.getValue()
  1121. });
  1122. });
  1123. me.setLoading(true);
  1124. Ext.Ajax.request({
  1125. url: basePath + 'hr/employee/saveSpecialPower.action',
  1126. params: {
  1127. id: win.jobId,
  1128. _self: me._self,
  1129. data: Ext.encode(data)
  1130. },
  1131. callback: function(opt, s, r) {
  1132. me.setLoading(false);
  1133. var res = Ext.decode(r.responseText);
  1134. if(res.success) {
  1135. alert('设置成功!');
  1136. win.close();
  1137. }
  1138. }
  1139. });
  1140. }
  1141. win.hide();
  1142. },
  1143. filterJob: function(jobs) {
  1144. var c = this.down('#job_combo');
  1145. this.jobs = jobs;
  1146. if(!c.store || c.store.data.length == 0) {
  1147. var ns = Ext.Array.pluck(jobs, 'jo_name'), data = new Array(), fd = new Array();
  1148. data.push({display: '--所有--', value: ' '});
  1149. Ext.each(ns, function(){
  1150. if(!Ext.Array.contains(fd, String(this))) {
  1151. data.push({display: this, value: this});
  1152. fd.push(String(this));
  1153. }
  1154. });
  1155. c.store.loadData(data);
  1156. }
  1157. var v = c.value;
  1158. if(!Ext.isEmpty(v)) {
  1159. grid.store.clearFilter(true);
  1160. if(v != ' ') {
  1161. this.store.filter(new Ext.util.Filter({
  1162. filterFn: function(item) {
  1163. return item.get('jo_name') == v;
  1164. }
  1165. }));
  1166. } else {
  1167. grid.store.filter(new Ext.util.Filter({
  1168. filterFn: function(item) {
  1169. return true;
  1170. }
  1171. }));
  1172. }
  1173. }
  1174. }
  1175. });