SetNodeGridPanel.js 13 KB

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