SetNodeGridPanel.js 14 KB

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