SetNodeGridPanel.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. Ext.define('erp.view.common.JProcess.SetNodeGridPanel',{
  2. extend: 'Ext.grid.Panel',
  3. alias: 'widget.SetNodeGridPanel',
  4. id: 'NodeGrid',
  5. emptyText : '无数据',
  6. title: '<h1 style="color:black ! important;">所有节点</h1>',
  7. columnLines : true,
  8. autoScroll : true,
  9. columns: [],
  10. keyValue:null,
  11. FlowCaller:null,
  12. BaseUtil: Ext.create('erp.util.BaseUtil'),
  13. GridUtil: Ext.create('erp.util.GridUtil'),
  14. selModel: Ext.create('Ext.selection.CellModel',{
  15. headerWidth: 0
  16. }),
  17. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  18. clicksToEdit: 1
  19. })],
  20. requires: ['erp.view.core.grid.YnColumn'],
  21. menu:null,
  22. initComponent : function(){
  23. this.getGridStore(this,this.keyValue,this.FlowCaller);
  24. this.callParent(arguments);
  25. },
  26. dbfinds:[{
  27. dbGridField: "em_code",
  28. field: "JP_EXTRAMAN",
  29. },{
  30. dbGridField: "em_name",
  31. field: "JP_EXTRAMANNAME",
  32. }],
  33. getGridStore:function(grid,keyValue,caller){
  34. Ext.Ajax.request({
  35. url : basePath + 'common/getCurrentJnodes.action',
  36. params: {
  37. caller: caller,
  38. keyValue:keyValue,
  39. _noc:1
  40. },
  41. method : 'post',
  42. callback : function(options,success,response){
  43. var localJson = new Ext.decode(response.responseText);
  44. if(localJson.success){
  45. var griddata=localJson.data;
  46. var current=localJson.currentnode;
  47. var historynodes=localJson.nodes;
  48. var dojprocess=localJson.processs;
  49. var dojprocand=localJson.jprocands;
  50. var sel = Ext.Array.pluck(historynodes, 'jn_name');
  51. var doj = Ext.Array.pluck(dojprocess,"jp_nodeName");
  52. Ext.each(griddata, function(d, index){
  53. //将DataDictionary的数据转化成FormDetail数据
  54. if(Ext.Array.contains(sel, d.JP_NODENAME)){
  55. d.STATUS='已审批';
  56. }else if(Ext.Array.contains(doj, d.JP_NODENAME)){
  57. d.STATUS='在进行';
  58. }else if(d.JP_NODENAME==current.nodename){
  59. d.STATUS='在进行';
  60. }else if(Ext.Array.contains(dojprocand, d.JP_NODENAME)){
  61. d.STATUS='在进行';
  62. }else d.STATUS='未触发';
  63. });
  64. var store=Ext.create('Ext.data.Store',{
  65. fields:['JP_ID','JP_PROCESSDEFID','JP_NODENAME','JP_NODEDEALMAN','JP_NODEDEALMANNAME','JP_NEWNODEDEALMAN','JP_NEWNODEDEALMANNAME','JP_CANEXTRA','JP_EXTRAMAN','JP_EXTRAMANNAME','STATUS'],
  66. data:griddata
  67. });
  68. var columns=grid.getColumns();
  69. grid.reconfigure(store,columns);
  70. }
  71. }
  72. });
  73. },
  74. loadNewStore:function(grid,caller,keyValue){
  75. Ext.Ajax.request({
  76. url : basePath + 'common/getCurrentJnodes.action',
  77. params: {
  78. caller: caller,
  79. keyValue:keyValue,
  80. _noc:1
  81. },
  82. method : 'post',
  83. callback : function(options,success,response){
  84. var localJson = new Ext.decode(response.responseText);
  85. if(localJson.success){
  86. var griddata=localJson.data;
  87. var current=localJson.currentnode;
  88. var historynodes=localJson.nodes;
  89. var dojprocess=localJson.processs;
  90. var dojprocand=localJson.jprocands;
  91. var sel = Ext.Array.pluck(historynodes, 'jn_name');
  92. var doj = Ext.Array.pluck(dojprocess,"jp_nodeName");
  93. Ext.each(griddata, function(d, index){
  94. //将DataDictionary的数据转化成FormDetail数据
  95. if(Ext.Array.contains(sel, d.JP_NODENAME)){
  96. d.STATUS='已审批';
  97. }else if(Ext.Array.contains(doj, d.JP_NODENAME)){
  98. d.STATUS='在进行';
  99. }else if(d.JP_NODENAME==current.nodename){
  100. d.STATUS='在进行';
  101. }else if(Ext.Array.contains(dojprocand, d.JP_NODENAME)){
  102. d.STATUS='在进行';
  103. }else d.STATUS='未触发';
  104. });
  105. grid.store.loadData(griddata);
  106. }
  107. }
  108. });
  109. },
  110. getColumns:function(){
  111. return [{
  112. text:'ID',
  113. dataIndex:'JP_ID',
  114. width:0,
  115. },{
  116. cls : "x-grid-header-1",
  117. text: '流程版本',
  118. dataIndex: 'JP_PROCESSDEFID',
  119. width:0,
  120. readOnly:true
  121. },{
  122. cls : "x-grid-header-1",
  123. text: '节点名称',
  124. dataIndex: 'JP_NODENAME',
  125. flex: 1,
  126. },{
  127. cls : "x-grid-header-1",
  128. text:'节点处理人',
  129. dataIndex: 'JP_NODEDEALMAN',
  130. flex: 1,
  131. readOnly:true
  132. },{
  133. cls : "x-grid-header-1",
  134. text:'处理人名称',
  135. dataIndex:'JP_NODEDEALMANNAME',
  136. flex:1,
  137. readOnly:true
  138. },{
  139. cls : "x-grid-header-1",
  140. text:'设置处理人',
  141. dataIndex: 'JP_NEWNODEDEALMAN',
  142. flex:1,
  143. editor: {
  144. format:'',
  145. xtype: 'combo',
  146. editable:false,
  147. onTriggerClick:function(trigger){
  148. var me=this;
  149. var parentgrid=Ext.getCmp('NodeGrid'),storedata=[],selecteddata=[];
  150. var rowSelected = parentgrid.getSelectionModel().getCurrentPosition().row;
  151. var selected= parentgrid.getStore().getAt(rowSelected);
  152. //var selected=parentgrid.getSelectionModel().getLastSelected();
  153. var codevalue=selected.data['JP_NODEDEALMAN'].split(",");
  154. var namevalue=selected.data['JP_NODEDEALMANNAME'].split(",");
  155. Ext.Array.each(codevalue,function(item,index){
  156. storedata.push({
  157. emcode:item,
  158. emname:namevalue[index]
  159. });
  160. });
  161. if(selected.data['JP_NEWNODEDEALMAN']){
  162. var selectcodevalue=selected.data['JP_NEWNODEDEALMAN'].split(",");
  163. var selectnamevalue=selected.data['JP_NEWNODEDEALMANNAME'].split(",");
  164. Ext.Array.each(selectcodevalue,function(item,index){
  165. selecteddata.push({
  166. emcode:item,
  167. emname:selectnamevalue[index]
  168. });
  169. });
  170. }
  171. if(parentgrid.menu==null){
  172. parentgrid.menu=Ext.create('Ext.menu.Menu', {
  173. id : 'win-flow' + this.id,
  174. buttonAlign : 'center',
  175. ownerCt: me,
  176. width:200,
  177. renderTo: Ext.getBody(),
  178. style: {
  179. overflow: 'visible',
  180. },
  181. items:[{
  182. xtype:'gridpanel',
  183. width:200,
  184. frame:true,
  185. columnLines:true,
  186. height:250,
  187. id:'smallgrid',
  188. multiselected:new Array(),
  189. plugins:[Ext.create('erp.view.core.grid.HeaderFilter')],
  190. //hideHeaders:true,
  191. selModel: Ext.create('Ext.selection.CheckboxModel',{
  192. ignoreRightMouseSelection : false,
  193. onRowMouseDown: function(view, record, item, index, e) {//改写的onRowMouseDown方法
  194. var me = Ext.getCmp('smallgrid');
  195. var bool = true;
  196. var items = me.selModel.getSelection();
  197. Ext.each(items, function(item, index){
  198. if(this.index == record.index){
  199. bool = false;
  200. me.selModel.deselect(record);
  201. Ext.Array.remove(items, item);
  202. Ext.Array.remove(me.multiselected, record);
  203. }
  204. });
  205. Ext.each(me.multiselected, function(item, index){
  206. items.push(item);
  207. });
  208. if(bool){
  209. view.el.focus();
  210. var checkbox = item.childNodes[0].childNodes[0].childNodes[0];
  211. if(checkbox.getAttribute && checkbox.getAttribute('class') == 'x-grid-row-checker'){
  212. me.multiselected.push(record);
  213. items.push(record);
  214. me.selModel.select(me.multiselected);
  215. } else {
  216. me.selModel.deselect(record);
  217. Ext.Array.remove(me.multiselected, record);
  218. }
  219. }
  220. },
  221. onHeaderClick: function(headerCt, header, e) {
  222. if (header.isCheckerHd) {
  223. e.stopEvent();
  224. var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
  225. if (isChecked) {
  226. this.deselectAll(true);
  227. var grid = Ext.getCmp('smallgrid');
  228. this.deselect(grid.multiselected);
  229. grid.multiselected = new Array();
  230. var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements;
  231. Ext.each(els, function(el, index){
  232. el.setAttribute('class','x-grid-row-checker');
  233. });
  234. header.el.removeCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  235. } else {
  236. var grid = Ext.getCmp('smallgrid');
  237. this.deselect(grid.multiselected);
  238. grid.multiselected = new Array();
  239. var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements;
  240. Ext.each(els, function(el, index){
  241. el.setAttribute('class','x-grid-row-checker');
  242. });
  243. this.selectAll(true);
  244. header.el.addCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  245. }
  246. }
  247. }
  248. }),
  249. buttonAlign:'center',
  250. columns:[{
  251. cls : "x-grid-header-1",
  252. text: '人员名称',
  253. dataIndex: 'emname',
  254. flex: 1,
  255. filter:{
  256. xtype : "textfield"
  257. }
  258. },{
  259. cls : "x-grid-header-1",
  260. text: '人员编号',
  261. dataIndex: 'emcode',
  262. flex: 1,
  263. filter:{
  264. xtype : "textfield"
  265. }
  266. }],
  267. store:Ext.create('Ext.data.Store',{
  268. fields:[{name:'emname'},{name:'emcode'}],
  269. data:storedata
  270. }),
  271. dockedItems: [{
  272. buttonAlign:'center',
  273. xtype: 'toolbar',
  274. dock: 'bottom',
  275. items: ['->',{
  276. xtype:'button',
  277. text:'确认',
  278. handler:function(btn){
  279. var grid=btn.ownerCt.ownerCt;
  280. if(grid.multiselected.length<1){
  281. Ext.Msg.alert('提示','请选择需要设置的审批人!');
  282. }else {
  283. var newnodedealman="",newnodedealmanname="";
  284. Ext.Array.each(grid.multiselected,function(item,index){
  285. newnodedealman+=item.data['emcode']+",";
  286. newnodedealmanname+=item.data['emname']+",";
  287. });
  288. //var selected=parentgrid.getSelectionModel().getLastSelected();
  289. var rowSelected = parentgrid.getSelectionModel().getCurrentPosition().row;
  290. var selected= parentgrid.getStore().getAt(rowSelected);
  291. selected.set('JP_NEWNODEDEALMAN',newnodedealman.substring(0,newnodedealman.lastIndexOf(",")));
  292. selected.set('JP_NEWNODEDEALMANNAME',newnodedealmanname.substring(0,newnodedealmanname.lastIndexOf(",")));
  293. parentgrid.menu.hide();
  294. //parentgrid.menu.close();
  295. }
  296. }
  297. },{
  298. xtype: 'button',
  299. text: '取消' ,
  300. style :'margin-left:10px',
  301. handler:function(btn){
  302. parentgrid.menu.hide();
  303. //parentgrid.menu.close();
  304. }
  305. },'->']
  306. }],
  307. }]
  308. });
  309. }else {
  310. Ext.getCmp('smallgrid').getStore().loadData(storedata)};
  311. parentgrid.menu.alignTo(me.inputEl, 'tl-bl?');
  312. parentgrid.menu.show();
  313. var smallgrid=Ext.getCmp('smallgrid');
  314. var selectitems=new Array();
  315. Ext.Array.each(smallgrid.store.data.items,function(item){
  316. Ext.Array.each(selecteddata,function(d0){
  317. if(item.data['emcode']==d0['emcode']){
  318. selectitems.push(item);
  319. return false;
  320. }
  321. });
  322. });
  323. smallgrid.multiselected=selectitems;
  324. smallgrid.selModel.select(selectitems);
  325. }
  326. },
  327. renderer: function(val, meta, record){
  328. if(!val){
  329. val="";
  330. }
  331. return '<img src="' + basePath + 'resource/images/icon/need.png" title="必填字段">' +
  332. '<span style="color:blue;padding-left:2px;" title="必填字段">' + val + '</span>';
  333. }
  334. },{
  335. cls : "x-grid-header-1",
  336. text:'人员名称',
  337. dataIndex:'JP_NEWNODEDEALMANNAME',
  338. flex:1,
  339. readOnly:true,
  340. renderer: function(val, meta, record){
  341. if(!val){
  342. val="";
  343. }
  344. return '<img src="' + basePath + 'resource/images/icon/need.png" title="必填字段">' +
  345. '<span style="color:blue;padding-left:2px;" title="必填字段">' + val + '</span>';
  346. }
  347. },{
  348. cls : "x-grid-header-1",
  349. text:'额外人',
  350. dataIndex:'JP_EXTRAMAN',
  351. flex:1,
  352. dbfind:'Employee|em_code',
  353. editor:{
  354. xtype:'dbfindtrigger',
  355. hideTrigger: false,
  356. name:'JP_EXTRAMAN',
  357. which:'grid',
  358. dbfind:'Employee|em_code',
  359. listeners:{
  360. focus: function(t){
  361. t.setHideTrigger(false);
  362. t.setReadOnly(false);
  363. //var record = Ext.getCmp('NodeGrid').selModel.getLastSelected();
  364. var rowSelected = Ext.getCmp('NodeGrid').getSelectionModel().getCurrentPosition().row;
  365. var record= Ext.getCmp('NodeGrid').getStore().getAt(rowSelected);
  366. var canextra = record.data['JP_CANEXTRA'];
  367. if(canextra == null || canextra == '' || canextra=='0'){
  368. showError("当前节点不允许指定额外处理人!");
  369. t.setHideTrigger(true);
  370. t.setReadOnly(true);
  371. }
  372. }
  373. }
  374. }
  375. },{
  376. cls:'x-grid-header-1',
  377. text:'额外人名',
  378. flex:1,
  379. dataIndex:'JP_EXTRAMANNAME',
  380. readOnly:true
  381. },{
  382. cls:'x-grid-header-1',
  383. text:'额外指定',
  384. flex:1,
  385. dataIndex:'JP_CANEXTRA',
  386. readOnly:true,
  387. xtype:'yncolumn'
  388. },{
  389. cls:'x-grid-header-1',
  390. text:'当前状态',
  391. logic:'ignore',
  392. flex:1,
  393. dataIndex:'STATUS',
  394. readOnly:true,
  395. renderer:function(val,mata,record){
  396. if(val=='已审批'){
  397. return '<img src="' + basePath + 'resource/images/renderer/finishrecord.png" >' +
  398. '<span style="color:green;padding-left:2px;">' + val + '</span>';
  399. }else if(val=='在进行'){
  400. return '<img src="' + basePath + 'resource/images/renderer/doing.png" >' +
  401. '<span style="color:blue;padding-left:2px;">' + val + '</span>';
  402. }else {
  403. return '<img src="' + basePath + 'resource/images/renderer/key1.png">'+'<span style="color:#8B8B83;padding-left:2px ">' + val + '<a/></span>';
  404. }
  405. }
  406. }];
  407. }
  408. });