PDAGroupPower.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. /**
  2. * PDA 权限分配Grid
  3. */
  4. Ext.define('erp.view.core.grid.PDAGroupPower',{
  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:'ejp_see',
  42. type:'bool'
  43. },{
  44. name:'ejp_seeother',
  45. type:'bool'
  46. }],
  47. groupField: 'jo_orgname'
  48. }),
  49. defaultColumns: [{
  50. text: 'ID',
  51. hidden: true,
  52. dataIndex: 'jo_id'
  53. },{
  54. text: '组织ID',
  55. hidden: true,
  56. dataIndex: 'jo_orgid'
  57. },{
  58. text: '组织名称',
  59. hidden: true,
  60. dataIndex: 'jo_orgname'
  61. },{
  62. text: '岗位名称',
  63. width: 220,
  64. cls: 'x-grid-header',
  65. dataIndex: 'jo_name',
  66. filter: {xtype: 'textfield', filterName: 'jo_name'},
  67. setPadding: Ext.emptyFn
  68. },{
  69. text: '操作名称',
  70. columns: [{
  71. text: '<br>浏览',
  72. width: 45,
  73. cls: 'x-grid-header',
  74. xtype: 'checkcolumn',
  75. editor: {
  76. xtype: 'checkbox',
  77. cls: 'x-grid-checkheader-editor'
  78. },
  79. dataIndex: 'ejp_see'
  80. },{
  81. text: '<br>浏览<br>他人',
  82. width: 45,
  83. cls: 'x-grid-header',
  84. xtype: 'checkcolumn',
  85. editor: {
  86. xtype: 'checkbox',
  87. cls: 'x-grid-checkheader-editor'
  88. },
  89. dataIndex: 'ejp_seeother'
  90. }]
  91. }],
  92. tbar: [{
  93. xtype: 'tbtext',
  94. id: 'power_title'
  95. },'->',{
  96. xtype: 'combo',
  97. fieldLabel: '搜索岗位',
  98. margin: '0 5 0 0',
  99. width: 300,
  100. labelWidth: 80,
  101. id: 'job_combo',
  102. displayField: 'display',
  103. valueField: 'value',
  104. queryMode: 'local',
  105. anyMatch: true,
  106. store: new Ext.data.Store({
  107. fields: ['display', 'value']
  108. }),
  109. listeners: {
  110. change: function(c) {
  111. var v = c.value, grid = c.ownerCt.ownerCt;
  112. if(!Ext.isEmpty(v)) {
  113. grid.store.clearFilter(true);
  114. if(v != ' ') {
  115. grid.store.filter(new Ext.util.Filter({
  116. filterFn: function(item) {
  117. return item.get('jo_name') == v;
  118. }
  119. }));
  120. } else {
  121. grid.store.filter(new Ext.util.Filter({
  122. filterFn: function(item) {
  123. return true;
  124. }
  125. }));
  126. }
  127. }
  128. }
  129. }
  130. },{
  131. iconCls: 'tree-save',
  132. cls: 'x-btn-blue',
  133. text: $I18N.common.button.erpSaveButton,
  134. handler: function(){
  135. var grid = Ext.getCmp('grid'),set = grid.powerSet;
  136. var positionpowers = [];
  137. var positionpower = null;
  138. Ext.each(grid.store.data.items, function(d){
  139. if(this.dirty){
  140. positionpower = new Object();
  141. positionpower.ejp_caller = grid.ejp_caller;
  142. positionpower.ejp_id = d.data['ejp_id'];
  143. positionpower.ejp_joid = d.data['jo_id'];
  144. Ext.each(set, function(s){
  145. positionpower[s] = d.data[s] ? 1 : 0;
  146. });
  147. positionpowers.push(positionpower);
  148. }
  149. });
  150. if(positionpowers.length > 0){
  151. grid.setLoading(true);
  152. Ext.Ajax.request({//拿到grid的columns
  153. url : basePath + 'hr/employee/updatePDAJobPower.action',
  154. params: {
  155. update: Ext.encode(positionpowers),
  156. _self: grid._self
  157. },
  158. method : 'post',
  159. timeout : 240000,
  160. callback : function(options,success,response){
  161. grid.setLoading(false);
  162. var res = new Ext.decode(response.responseText);
  163. if(res.exception || res.exceptionInfo){
  164. showError(res.exceptionInfo);
  165. return;
  166. }
  167. if(res.success){
  168. updateSuccess(function(){
  169. grid.getGroupData();
  170. });
  171. }
  172. }
  173. });
  174. }
  175. }
  176. }, '->'],
  177. initComponent : function(){
  178. this.columns = this.defaultColumns;
  179. this.callParent(arguments);
  180. },
  181. listeners: {//滚动条有时候没反应,添加此监听器
  182. scrollershow: function(scroller) {
  183. if (scroller && scroller.scrollEl) {
  184. scroller.clearManagedListeners();
  185. scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller);
  186. }
  187. }
  188. },
  189. powerSet: ['ejp_see', 'ejp_seeother'],
  190. getGroupData: function(){
  191. var me = this;
  192. me.setLoading(true);
  193. Ext.Ajax.request({
  194. url : basePath + 'hr/employee/getPDAHrJob.action',
  195. params: {
  196. caller: me.ejp_caller
  197. },
  198. method : 'post',
  199. callback : function(options,success,response){
  200. me.setLoading(false);
  201. var res = new Ext.decode(response.responseText);
  202. if(res.exception || res.exceptionInfo){
  203. showError(res.exceptionInfo);
  204. return;
  205. }
  206. if(!res.hrjob){
  207. return;
  208. } else {
  209. var data = new Array();
  210. Ext.each(res.hrjob, function(){
  211. var j = this;
  212. Ext.each(res.pdapositionpower, function(pp){
  213. if(j.jo_id == pp.ejp_joid){
  214. j = Ext.Object.merge(j, pp);
  215. j.ejp_id = pp.ejp_id;
  216. Ext.each(me.powerSet, function(s){
  217. j[s] = pp[s] == 1;
  218. });
  219. }
  220. });
  221. data.push(j);
  222. });
  223. me.store.loadData(data);
  224. var cm = me.down('gridcolumn[dataIndex=jo_name]');
  225. cm.setText('岗位名称');
  226. me._self = false;
  227. me.reconfigure(me.store, me.defaultColumns);
  228. me.filterJob(res.hrjob);
  229. me.resetHeaderChecker();
  230. me.rememberLastFilter();
  231. me.plugins[0].renderFilters();
  232. }
  233. }
  234. });
  235. },
  236. rememberLastFilter: function() {
  237. var me = this, filter = this.store.filters.findBy(function(filter){
  238. return filter.property == '$all';
  239. });
  240. if(filter && filter.filterArr) {
  241. me.headerFilters = {};
  242. Ext.Array.each(filter.filterArr, function(f){
  243. me.headerFilters[f.property] = f.value;
  244. });
  245. }
  246. },
  247. resetHeaderChecker: function() {
  248. var columns = this.headerCt.getGridColumns();
  249. Ext.Array.each(columns, function(c){
  250. if(c.headerCheckable) {
  251. var ch = Ext.get(c.dataIndex + '-checkbox');
  252. ch && (ch.dom.checked = false);
  253. }
  254. });
  255. },
  256. selModel: Ext.create('Ext.selection.CheckboxModel',{
  257. listeners:{
  258. 'select': function(selModel, record){
  259. selModel.view.ownerCt.selectAllPower(record);
  260. },
  261. 'deselect': function(selModel, record){
  262. selModel.view.ownerCt.deselectAllPower(record);
  263. }
  264. },
  265. onHeaderClick: function(headerCt, header, e) {
  266. var grid = headerCt.ownerCt;
  267. if (header.isCheckerHd) {
  268. var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
  269. if (!isChecked) {
  270. grid.store.each(function(item){
  271. grid.selectAllPower(item);
  272. });
  273. grid.selModel.selectAll();
  274. } else {
  275. grid.store.each(function(item){
  276. grid.deselectAllPower(item);
  277. });
  278. grid.selModel.deselectAll();
  279. }
  280. }
  281. }
  282. }),
  283. selectAllPower: function(record){
  284. var me = this, set = me.powerSet;
  285. Ext.each(set, function(s){
  286. record.set(s, true);
  287. });
  288. },
  289. deselectAllPower: function(record){
  290. var me = this, set = me.powerSet;
  291. Ext.each(set, function(s){
  292. record.set(s, false);
  293. });
  294. },
  295. filterJob: function(jobs) {
  296. var c = this.down('#job_combo');
  297. this.jobs = jobs;
  298. if(!c.store || c.store.data.length == 0) {
  299. var ns = Ext.Array.pluck(jobs, 'jo_name'), data = new Array(), fd = new Array();
  300. data.push({display: '--所有--', value: ' '});
  301. Ext.each(ns, function(){
  302. if(!Ext.Array.contains(fd, String(this))) {
  303. data.push({display: this, value: this});
  304. fd.push(String(this));
  305. }
  306. });
  307. c.store.loadData(data);
  308. }
  309. var v = c.value;
  310. if(!Ext.isEmpty(v)) {
  311. grid.store.clearFilter(true);
  312. if(v != ' ') {
  313. this.store.filter(new Ext.util.Filter({
  314. filterFn: function(item) {
  315. return item.get('jo_name') == v;
  316. }
  317. }));
  318. } else {
  319. grid.store.filter(new Ext.util.Filter({
  320. filterFn: function(item) {
  321. return true;
  322. }
  323. }));
  324. }
  325. }
  326. }
  327. });