ReviewForm.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825
  1. Ext.define('erp.view.plm.project.ReviewForm',{
  2. extend: 'Ext.form.Panel',
  3. alias: 'widget.ReviewPanel',
  4. id: 'form',
  5. region: 'north',
  6. frame : true,
  7. layout : 'column',
  8. autoScroll : true,
  9. defaultType : 'textfield',
  10. labelSeparator : ':',
  11. buttonAlign : 'center',
  12. fieldDefaults : {
  13. margin : '2 2 2 2',
  14. fieldStyle : "background:#FFFAFA;color:#515151;",
  15. focusCls: 'x-form-field-cir',
  16. labelAlign : "right",
  17. msgTarget: 'side',
  18. blankText : $I18N.common.form.blankText
  19. },
  20. FormUtil: Ext.create('erp.util.FormUtil'),
  21. saveUrl: '',
  22. updateUrl: '',
  23. deleteUrl: '',
  24. auditUrl: '',
  25. resAuditUrl: '',
  26. submitUrl: '',
  27. resSubmitUrl: '',
  28. bannedUrl: '',
  29. resBannedUrl: '',
  30. postUrl:'',
  31. printUrl: '',
  32. getIdUrl: '',
  33. keyField: '',
  34. codeField: '',
  35. statusField: '',
  36. params: null,
  37. caller: null,
  38. Contextvalue:null,
  39. LastValue:null,
  40. enableTools: true,
  41. enableKeyEvents: true,
  42. initComponent : function(){
  43. formCondition = getUrlParam('formCondition');//从url解析参数
  44. formCondition = (formCondition == null) ? "" : formCondition.replace(/IS/g,"=");
  45. var param = {caller: this.caller || caller, condition: formCondition};
  46. this.getItemsAndButtons(this, 'common/singleFormItems.action', this.params || param);//从后台拿到formpanel的items
  47. this.callParent(arguments);
  48. //加prev、next、refresh等tool
  49. if(this.enableTools) {
  50. this.setTools();
  51. }
  52. //给页面加上ctrl+alt+s键盘事件,自动跳转form配置界面
  53. if(this.enableKeyEvents) {
  54. this.addKeyBoardEvents();
  55. }
  56. },
  57. getItemsAndButtons: function(form, url, param){
  58. var me = this;
  59. me.FormUtil.getActiveTab().setLoading(true);
  60. Ext.Ajax.request({//拿到form的items
  61. url : basePath + url,
  62. params: param,
  63. method : 'post',
  64. callback : function(options,success,response){
  65. me.FormUtil.getActiveTab().setLoading(false);
  66. var res = new Ext.decode(response.responseText);
  67. if(res.exceptionInfo != null){
  68. showError(res.exceptionInfo);return;
  69. }
  70. form.fo_id = res.fo_id;
  71. form.fo_keyField = res.fo_keyField;
  72. form.tablename = res.tablename;//表名
  73. if(res.keyField){//主键
  74. form.keyField = res.keyField;
  75. }
  76. if(res.statusField){//状态
  77. form.statusField = res.statusField;
  78. }
  79. if(res.statuscodeField){//状态码
  80. form.statuscodeField = res.statuscodeField;
  81. }
  82. if(res.codeField){//Code
  83. form.codeField = res.codeField;
  84. }
  85. form.fo_detailMainKeyField = res.fo_detailMainKeyField;//从表外键字段
  86. var grids = Ext.ComponentQuery.query('gridpanel');
  87. //如果该页面只有一个form,而且form字段少于8个,则布局改变
  88. if(grids.length == 0 && res.items.length <= 8){
  89. Ext.each(res.items, function(item){
  90. item.columnWidth = 0.5;
  91. });
  92. form.layout = 'column';
  93. }
  94. //data&items
  95. var items = me.setItems(form, res.items, res.data, res.limits);
  96. form.add(items);
  97. //title
  98. if(res.title && res.title != ''){
  99. form.setTitle(res.title);
  100. }
  101. //解析buttons
  102. me.FormUtil.setButtons(form, res.buttons);
  103. //form第一个可编辑框自动focus
  104. me.FormUtil.focusFirst(form);
  105. }
  106. });
  107. },
  108. setItems: function(form, items, data, limits){
  109. var edit = true,hasData = true,limitArr = new Array();
  110. if(limits != null && limits.length > 0) {//权限外字段
  111. limitArr = Ext.Array.pluck(limits, 'lf_field');
  112. }
  113. if (data) {
  114. data = Ext.decode(data);
  115. if(form.statuscodeField && data[form.statuscodeField] != null && data[form.statuscodeField] != '' &&
  116. !(data[form.statuscodeField] == 'ENTERING' || data[form.statuscodeField] == 'UNAUDIT')){//非在录入和已提交均设置为只读// && data[form.statuscodeField] != 'COMMITED'
  117. form.readOnly = true;
  118. edit = false;
  119. }
  120. if(form.statusCode && data[form.statusCode] != null && (data[form.statusCode] == 'POSTED')){//存在单据状态 并且单据状态不等于空 并且 单据状态等于已过账
  121. form.readOnly = true;
  122. edit = false;
  123. }
  124. // statusCode
  125. } else {
  126. hasData = false;
  127. }
  128. var bool = false;
  129. if(items.length > 110){
  130. bool = true;
  131. }
  132. Ext.each(items, function(item){
  133. if(screen.width < 1280){//根据屏幕宽度,调整列显示宽度
  134. if(item.columnWidth > 0 && item.columnWidth <= 0.25){
  135. item.columnWidth = 1/3;
  136. } else if(item.columnWidth > 0.25 && item.columnWidth <= 0.5){
  137. item.columnWidth = 2/3;
  138. } else if(item.columnWidth >= 1){
  139. item.columnWidth = 1;
  140. }
  141. } else {
  142. if(item.columnWidth > 0.25 && item.columnWidth < 0.5){
  143. item.columnWidth = 1/3;
  144. } else if(item.columnWidth > 0.5 && item.columnWidth < 0.75){
  145. item.columnWidth = 2/3;
  146. }
  147. }
  148. if(item.name != null) {
  149. if(item.name == form.statusField){//状态加特殊颜色
  150. item.fieldStyle = item.fieldStyle + ';font-weight:bold;';
  151. } else if(item.name == form.statuscodeField){//状态码字段强制隐藏
  152. item.xtype = 'hidden';
  153. }
  154. }
  155. if(item.xtype == 'hidden') {
  156. item.columnWidth = 0.1;
  157. }
  158. if (hasData) {
  159. item.value = data[item.name];
  160. if(item.secondname){//针对合并型的字段MultiField
  161. item.secondvalue = data[item.secondname];
  162. }
  163. if(!edit){
  164. form.readOnly = true;
  165. item.fieldStyle = item.fieldStyle + ';background:#f1f1f1;';
  166. item.readOnly = true;
  167. }
  168. if(item.xtype == 'checkbox' && Math.abs(item.value || 0) == 1){
  169. item.checked = true;
  170. }
  171. }
  172. if(limitArr.length > 0 && Ext.Array.contains(limitArr, item.name)) {
  173. item.hidden = true;
  174. }
  175. if(bool) {
  176. item.columnWidth = item.columnWidth*0.83;
  177. }
  178. });
  179. return items;
  180. },
  181. /**
  182. * FormHeader Tools
  183. * 包括:查看日志、查看流程、查看列表、最大化、最小化、刷新、关闭、上一条、下一条
  184. */
  185. setTools: function(){
  186. var datalistId = getUrlParam('datalistId');
  187. if(datalistId){
  188. this.tools = [{
  189. type: 'search',
  190. tooltip: '查看单据日志',
  191. listeners:{
  192. click: function(btn){
  193. var form = btn.up('form');
  194. var id = Ext.getCmp(form.keyField).value;
  195. if(id != null && id != 0){
  196. form.getLogs(id);
  197. }
  198. }
  199. }
  200. },{
  201. type: 'save',
  202. tooltip: '导出Excel',
  203. listeners:{
  204. click: function(btn){
  205. var form = btn.ownerCt.ownerCt;
  206. var id = Ext.getCmp(form.keyField).value;
  207. form.saveAsExcel(id,caller);
  208. }
  209. }
  210. },{
  211. type: 'expand',
  212. tooltip: '查看流程处理',
  213. listeners:{
  214. click: function(btn){
  215. var form = btn.ownerCt.ownerCt;
  216. if(!form.statuscodeField){
  217. btn.disable(true);
  218. } else {
  219. var f = form.statuscodeField;
  220. if(!Ext.getCmp(f) || Ext.getCmp(f).value == 'ENTERING'){
  221. btn.disable(true);
  222. } else {
  223. var id = Ext.getCmp(form.keyField).value;
  224. if(id != null && id != 0){
  225. form.getProcess(id);
  226. }
  227. }
  228. }
  229. }
  230. }
  231. },{
  232. type: 'gear',
  233. tooltip: '设置流程处理人',
  234. listeners:{
  235. click: function(btn){
  236. var form = btn.ownerCt.ownerCt;
  237. if(!form.statuscodeField){
  238. btn.disable(true);
  239. } else {
  240. var f = form.statuscodeField;
  241. if(!Ext.getCmp(f) || Ext.getCmp(f).value == 'ENTERING'){
  242. btn.disable(true);
  243. } else {
  244. var id = Ext.getCmp(form.keyField).value;
  245. if(id != null && id != 0){
  246. form.SetNodeDealMan(id);
  247. }
  248. }
  249. }
  250. }
  251. }
  252. },{
  253. type: 'collapse',
  254. tooltip: '查看列表',
  255. listeners:{
  256. click: function(btn){
  257. var datalist = parent.Ext.getCmp(datalistId);
  258. if(!datalist){
  259. var form = btn.ownerCt.ownerCt;
  260. var url = 'jsps/common/datalist.jsp?whoami=' + caller;
  261. if(btn.urlcondition){
  262. url += '&urlcondition=' + btn.urlcondition;
  263. }
  264. form.FormUtil.onAdd(caller + '_scan', parent.Ext.getCmp('content-panel').getActiveTab().title + 'DataList', url);
  265. } else {
  266. datalist.ownerCt.setActiveTab(datalist);
  267. }
  268. }
  269. }
  270. },{
  271. type: 'maximize',
  272. tooltip: '最大化',
  273. listeners:{
  274. render: function(btn){
  275. var datalist = parent.Ext.getCmp(datalistId);
  276. if(!datalist){
  277. btn.disable(true);
  278. }
  279. },
  280. click: function(btn){
  281. var height = window.screen.height*0.87;
  282. var width = window.screen.width;
  283. //弹出框显示,可以锁定住地址栏和工具栏,防止用户不合理操作
  284. window.open(window.location.href, '', 'width=' + width + ',height=' + height + ',top=0,left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');
  285. }
  286. }
  287. },{
  288. type: 'minus',
  289. tooltip: '最小化',
  290. listeners:{
  291. render: function(btn){
  292. var datalist = parent.Ext.getCmp(datalistId);
  293. if(!datalist){
  294. btn.disable(true);
  295. }
  296. },
  297. click: function(btn){
  298. var p = parent.Ext.getCmp('content-panel');
  299. if(p){
  300. var t = p.getActiveTab();
  301. var b = parent.Ext.getCmp('bottom');
  302. if(b){
  303. b.insert(1, {
  304. text: t.title,
  305. tooltip: t.tabConfig.tooltip,
  306. tab: t,
  307. handler: function(btn){
  308. p.add(btn.tab);
  309. var a = p.add(btn.tab);
  310. p.setActiveTab(a);
  311. btn.destroy();
  312. }
  313. });
  314. p.remove(t, false);//并不销毁
  315. }
  316. }
  317. }
  318. }
  319. },{
  320. type: 'refresh',
  321. tooltip: '刷新',
  322. listeners:{
  323. click: function(btn){
  324. window.location.href = window.location.href;
  325. }
  326. }
  327. },{
  328. type: 'close',
  329. tooltip: '关闭',
  330. listeners:{
  331. click: function(btn){
  332. var p = parent.Ext.getCmp('content-panel');
  333. if(p){
  334. p.getActiveTab().close();
  335. } else {
  336. window.close();
  337. }
  338. }
  339. }
  340. },{
  341. type:'prev',
  342. id: 'prev',
  343. tooltip: '上一条',
  344. listeners:{
  345. render: function(btn){
  346. var datalist = parent.Ext.getCmp(datalistId);
  347. if(datalist){
  348. var datalistStore = datalist.currentStore;
  349. Ext.each(datalistStore, function(){
  350. if(this.selected == true){
  351. if(this.prev == null){
  352. btn.disable(true);
  353. }
  354. }
  355. });
  356. } else {
  357. btn.disable(true);
  358. }
  359. },
  360. click: function(btn){
  361. var datalist = parent.Ext.getCmp(datalistId);
  362. if(datalist){
  363. var datalistStore = datalist.currentStore;
  364. var form = btn.up('form');
  365. var newId = 0;
  366. var idx = 0;
  367. Ext.each(datalistStore, function(s, index){
  368. if(this.selected == true){
  369. if(this.prev != null){
  370. newId = this.prev;
  371. idx = index;
  372. }
  373. }
  374. });
  375. form.FormUtil.loadNewStore(form, {caller: caller, condition: form.keyField + "=" + newId});
  376. var grid = Ext.getCmp('grid');
  377. if(grid){
  378. grid.GridUtil.loadNewStore(grid, {caller: caller, condition: grid.mainField + "=" + newId});
  379. }
  380. datalistStore[idx].selected = false;
  381. datalistStore[idx-1].selected = true;
  382. if(datalistStore[idx-1].prev == null){
  383. btn.disable(true);
  384. } else {
  385. btn.setDisabled(false);
  386. }
  387. Ext.getCmp('next').setDisabled(false);
  388. }
  389. }
  390. }
  391. },{
  392. type: 'next',
  393. id: 'next',
  394. tooltip: '下一条',
  395. listeners:{
  396. render: function(btn){
  397. var datalist = parent.Ext.getCmp(datalistId);
  398. if(datalist){
  399. var datalistStore = datalist.currentStore;
  400. Ext.each(datalistStore, function(){
  401. if(this.selected == true){
  402. if(this.next == null){
  403. btn.disable(true);
  404. }
  405. }
  406. });
  407. } else {
  408. btn.disable(true);
  409. }
  410. },
  411. click: function(btn){
  412. var datalist = parent.Ext.getCmp(datalistId);
  413. if(datalist){
  414. var datalistStore = datalist.currentStore;
  415. var form = btn.up('form');
  416. var newId = 0;
  417. var idx = 0;
  418. Ext.each(datalistStore, function(s, index){
  419. if(s.selected == true){
  420. if(s.next != null){
  421. newId = s.next;
  422. idx = index;
  423. }
  424. }
  425. });
  426. form.FormUtil.loadNewStore(form, {caller: caller, condition: form.keyField + "=" + newId});
  427. var grid = Ext.getCmp('grid');
  428. if(grid){
  429. grid.GridUtil.loadNewStore(grid, {caller: caller, condition: grid.mainField + "=" + newId});
  430. }
  431. datalistStore[idx].selected = false;
  432. datalistStore[idx+1].selected = true;
  433. if(datalistStore[idx+1].next == null){
  434. btn.disable(true);
  435. } else {
  436. btn.setDisabled(false);
  437. }
  438. Ext.getCmp('prev').setDisabled(false);
  439. }
  440. }
  441. }
  442. }];
  443. }
  444. },
  445. saveAsExcel:function(id,caller){
  446. window.location.href=basePath+'excel/savePanelAsExcel.action?id='+id+"&caller="+caller+"&_noc=1";
  447. },
  448. /**
  449. * 监听一些事件,
  450. * 如Ctrl+Alt+S
  451. */
  452. addKeyBoardEvents: function(){
  453. var me = this;
  454. if(Ext.isIE){
  455. document.body.attachEvent('onkeydown', function(){//ie的事件名称不同,也不支持addEventListener
  456. if(window.event.altKey && window.event.ctrlKey && window.event.keyCode == 83){
  457. if(Ext.ComponentQuery.query('gridpanel').length > 0){//有grid
  458. me.FormUtil.onAdd('form' + caller, 'Form配置维护(' + caller + ')', "jsps/ma/multiform.jsp?formCondition=fo_idIS" + me.fo_id +
  459. "&gridCondition=fd_foidIS" + me.fo_id + "&whoami=" + caller);
  460. } else {
  461. me.FormUtil.onAdd('form' + caller, 'Form配置维护(' + caller + ')', "jsps/ma/form.jsp?formCondition=fo_idIS" + me.fo_id +
  462. "&gridCondition=fd_foidIS" + me.fo_id);
  463. }
  464. }
  465. });
  466. document.body.attachEvent("onmouseover", function(){
  467. if(window.event.ctrlKey){
  468. var e = window.event;
  469. me.Contextvalue = e.target.textContent == "" ? e.target.value : e.target.textContent;
  470. textarea_text = parent.document.getElementById("textarea_text");
  471. textarea_text.value = me.Contextvalue;
  472. textarea_text.focus();
  473. textarea_text.select();
  474. }
  475. });
  476. } else {
  477. document.body.addEventListener("keydown", function(e){
  478. if(Ext.isFF5){//firefox不支持window.event
  479. e = e || window.event;
  480. }
  481. if(e.altKey && e.ctrlKey && e.keyCode == 83){
  482. if(Ext.ComponentQuery.query('gridpanel').length > 0){//有grid
  483. me.FormUtil.onAdd('form' + caller, 'Form配置维护(' + caller + ')', "jsps/ma/multiform.jsp?formCondition=fo_idIS" + me.fo_id +
  484. "&gridCondition=fd_foidIS" + me.fo_id + "&whoami=" + caller);
  485. } else {
  486. me.FormUtil.onAdd('form' + caller, 'Form配置维护(' + caller + ')', "jsps/ma/form.jsp?formCondition=fo_idIS" + me.fo_id +
  487. "&gridCondition=fd_foidIS" + me.fo_id);
  488. }
  489. }
  490. });
  491. document.body.addEventListener("mouseover", function(e){
  492. if(Ext.isFF5){
  493. e = e || window.event;
  494. }
  495. if(e.ctrlKey){
  496. me.Contextvalue = e.target.textContent == "" ? e.target.value : e.target.textContent;
  497. textarea_text = parent.document.getElementById("textarea_text");
  498. textarea_text.value = me.Contextvalue;
  499. textarea_text.focus();
  500. textarea_text.select();
  501. }
  502. });
  503. }
  504. },
  505. /**
  506. * 拿到操作日志
  507. */
  508. getLogs: function(id){
  509. if(Ext.getCmp('win' + id)){
  510. Ext.getCmp('win' + id).show();
  511. } else {
  512. Ext.Ajax.request({//拿到grid的columns
  513. url : basePath + 'common/getMessageLogs.action',
  514. async: false,
  515. params: {
  516. caller: caller,
  517. id: id
  518. },
  519. method : 'post',
  520. callback : function(options,success,response){
  521. var res = new Ext.decode(response.responseText);
  522. if(res.exception || res.exceptionInfo){
  523. showError(res.exceptionInfo);
  524. return;
  525. }
  526. var logs = res.logs;
  527. logs = logs.length == 0 ? [{ml_date: $I18N.common.grid.emptyText, ml_man: $I18N.common.grid.emptyText,
  528. ml_content: $I18N.common.grid.emptyText, ml_result: $I18N.common.grid.emptyText}] : logs;
  529. Ext.create('Ext.window.Window', {
  530. id : 'win' + id,
  531. title: '<span style="color:#CD6839;">操作日志</span>',
  532. iconCls: 'x-button-icon-set',
  533. closeAction: 'hide',
  534. height: "100%",
  535. width: "80%",
  536. maximizable : true,
  537. buttonAlign : 'center',
  538. layout : 'anchor',
  539. items: [{
  540. anchor: '100% 100%',
  541. xtype: 'gridpanel',
  542. bodyStyle: 'background:#f1f1f1;',
  543. autoScroll: true,
  544. store: Ext.create('Ext.data.Store', {
  545. fields: ['ml_date', 'ml_man', 'ml_content', 'ml_result'],
  546. data: logs
  547. }),
  548. columnLines: true,
  549. columns: [
  550. { header: '时间', dataIndex: 'ml_date', flex: 1.5 , renderer: function(val){
  551. if(val != '无数据'){
  552. return Ext.Date.format(new Date(val), 'Y-m-d H:i:s');
  553. }
  554. }},
  555. { header: '操作人员', dataIndex: 'ml_man', flex: 1 ,renderer: function(val){
  556. if(val == em_name){
  557. return '<font color=red>' + val + '</font>';
  558. } else {
  559. return val;
  560. }
  561. }},
  562. { header: '操作', dataIndex: 'ml_content', flex: 1.5},
  563. { header: '结果', dataIndex: 'ml_result', flex: 3}
  564. ]
  565. }],
  566. buttons : [{
  567. text : '关 闭',
  568. iconCls: 'x-button-icon-close',
  569. cls: 'x-btn-gray',
  570. handler : function(){
  571. Ext.getCmp('win' + id).close();
  572. }
  573. }]
  574. }).show();
  575. }
  576. });
  577. }
  578. },
  579. /**
  580. * 拿到流程处理情况
  581. */
  582. getProcess: function(id){
  583. var me = this;
  584. //先获取jprocess的nodeId
  585. Ext.Ajax.request({
  586. url : basePath + 'common/getJProcessByForm.action',
  587. async: false,
  588. params: {
  589. caller: caller,
  590. keyValue: id,
  591. _noc:1
  592. },
  593. method : 'post',
  594. callback : function(options,success,response){
  595. var localJson = new Ext.decode(response.responseText);
  596. if(localJson.exceptionInfo){
  597. showError(localJson.exceptionInfo);return;
  598. }
  599. if(localJson.node && localJson.node != -1){
  600. //再根据nodeId调取流程信息
  601. if(Ext.getCmp('win-flow' + id)){
  602. Ext.getCmp('win-flow' + id).show();
  603. } else {
  604. var form = Ext.create('Ext.form.Panel', {
  605. layout: 'column',
  606. defaultType: 'textfield',
  607. anchor: '100% 20%' ,
  608. bodyStyle: 'background:#f1f1f1;',
  609. fieldDefaults: {
  610. columnWidth: 0.33,
  611. readOnly: true,
  612. cls : "form-field-allowBlank",
  613. fieldStyle: 'background:#f0f0f0;border: 1px solid #8B8970;'
  614. },
  615. items: [{
  616. id: 'jp_name',
  617. name: 'jp_name',
  618. fieldLabel: '流程名称',
  619. columnWidth: 0.33
  620. },{
  621. columnWidth: 0.33,
  622. xtype: 'textfield',
  623. fieldLabel: '发起时间',
  624. name: 'jp_launchTime',
  625. id:'jp_launchTime',
  626. readOnly: true,
  627. fieldStyle: 'background:#f0f0f0;border: 1px solid #8B8970;'
  628. },{
  629. fieldLabel: '发起人',
  630. columnWidth: 0.33,
  631. xtype: 'textfield',
  632. id:'jp_launcherName',
  633. name: 'jp_launcherName',
  634. readOnly: true,
  635. fieldStyle: 'background:#f0f0f0;border: 1px solid #8B8970;'
  636. },{
  637. fieldLabel: '节点名称',
  638. id: 'jp_nodeName',
  639. name: 'jp_nodeName',
  640. xtype: 'textfield',
  641. readOnly: true,
  642. fieldStyle: 'background:#f0f0f0;border: 1px solid #8B8970;'
  643. },{
  644. fieldLabel: '处理人',
  645. id: 'jp_nodeDealMan',
  646. name: 'jp_nodeDealMan',
  647. xtype: 'textfield',
  648. fieldStyle: 'background:#f0f0f0;border: 1px solid #8B8970;',
  649. readOnly: true,
  650. listeners:{
  651. change:function(field){
  652. var em=Ext.getCmp('jp_nodeDealMan').getValue();
  653. var btn=Ext.getCmp('dealbutton');
  654. if(em!=em_code) btn.setDisabled(true);
  655. }
  656. }
  657. },{
  658. fieldLabel: '审批状态',
  659. id:'jp_status',
  660. name:'jp_status',
  661. xtype: 'textfield',
  662. fieldStyle: 'background:#f0f0f0;border: 1px solid #8B8970;',
  663. readOnly: true,
  664. }],
  665. loader: {
  666. url: basePath + 'common/getCurrentNode.action',
  667. renderer: function(loader, response, active) {
  668. var res = Ext.decode(response.responseText);
  669. if(res.info.currentnode.jp_nodeDealMan){
  670. res.info.currentnode.jp_nodeDealMan=res.info.dealmanname+"("+res.info.currentnode.jp_nodeDealMan+")";
  671. }else res.info.currentnode.jp_nodeDealMan=res.info.dealmanname+"("+res.info.currentnode.jp_candidate+")";
  672. res.info.currentnode.jp_launchTime = Ext.Date.format(new Date(res.info.currentnode.jp_launchTime), 'Y-m-d H:i:s');
  673. this.target.getForm().setValues(res.info.currentnode);
  674. return true;
  675. },
  676. autoLoad: true,
  677. params: {
  678. jp_nodeId: localJson.node,
  679. _noc:1
  680. }
  681. },
  682. buttonAlign: 'center',
  683. buttons: [{
  684. text: $I18N.common.button.erpFlowButton,
  685. iconCls: 'x-button-icon-scan',
  686. cls: 'x-btn-gray',
  687. id:'dealbutton',
  688. handler: function(btn){
  689. me.FormUtil.onAdd(caller + '_flow', '流程处理', 'jsps/common/jprocessDeal.jsp?formCondition=jp_nodeidIS' + localJson.node);
  690. }
  691. },{
  692. text : '关 闭',
  693. iconCls: 'x-button-icon-close',
  694. cls: 'x-btn-gray',
  695. handler : function(){
  696. Ext.getCmp('win-flow' + id).close();
  697. }
  698. }]
  699. });
  700. Ext.create('Ext.window.Window', {
  701. id : 'win-flow' + id,
  702. title: '<span style="color:#CD6839;">流程处理情况</span>',
  703. iconCls: 'x-button-icon-set',
  704. closeAction: 'hide',
  705. height: "100%",
  706. width: "90%",
  707. maximizable : true,
  708. buttonAlign : 'center',
  709. layout : 'fit',
  710. items:[{
  711. xtype:'tabpanel',
  712. frame:true,
  713. layout:'fit',
  714. items:[{
  715. title:'处理明细',
  716. layout:'anchor',
  717. frame:true,
  718. items:[form, Ext.create("erp.view.common.JProcess.GridPanel",{
  719. anchor: '100% 80%' ,
  720. nodeId: localJson.node
  721. })]
  722. },{
  723. title : '节点信息',
  724. items:[{
  725. tag : 'iframe',
  726. style:{
  727. background:'#f0f0f0',
  728. border:'none'
  729. },
  730. frame : true,
  731. border : false,
  732. layout : 'fit',
  733. height:window.innerHeight*0.9,
  734. iconCls : 'x-tree-icon-tab-tab',
  735. html : '<iframe id="iframe_maindetail_" src="'+basePath+'workfloweditor/workfloweditorscan.jsp?jdId='+localJson.jd+"&type="+localJson.type+"&nodeId="+localJson.node+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>'
  736. }]
  737. }]
  738. }]
  739. }).show();
  740. }
  741. } else {
  742. showMessage("提示", "当前单据无流程处理!");
  743. }
  744. }
  745. });
  746. },
  747. SetNodeDealMan:function(id){
  748. var me=this;
  749. var nodewin=Ext.getCmp('win-nodeflow'+id);
  750. if(nodewin){
  751. nodewin.show();
  752. }else {
  753. Ext.create('Ext.window.Window', {
  754. id : 'win-nodeflow' + id,
  755. title: '<span style="color:#CD6839;">设置节点处理人</span>',
  756. iconCls: 'x-button-icon-set',
  757. closeAction: 'hide',
  758. height: "100%",
  759. width: "90%",
  760. maximizable : true,
  761. buttonAlign : 'center',
  762. layout : 'fit',
  763. items:[{
  764. anchor: '100% 90%' ,
  765. xtype:'SetNodeGridPanel',
  766. keyValue: id,
  767. FlowCaller:caller
  768. }],
  769. buttons:['->',{
  770. text:'保 存',
  771. iconCls: 'x-button-icon-save',
  772. cls: 'x-btn-gray',
  773. width : 65,
  774. style: {
  775. marginLeft: '10px'
  776. },
  777. handler:function(btn){
  778. var win=btn.ownerCt.ownerCt;
  779. var grid=win.items.items[0];
  780. var msg=grid.GridUtil.checkGridDirty(grid);
  781. if(msg==''){
  782. Ext.Msg.alert('提示','无任何修改!');
  783. }else {
  784. var param= grid.GridUtil.getGridStore(grid);
  785. param= unescape("[" + param.toString().replace(/\\/g,"%") + "]");
  786. me.FormUtil.setLoading(true);
  787. Ext.Ajax.request({
  788. url : basePath + 'common/updateJnodePerson.action?_noc=1',
  789. params: {
  790. param:param,
  791. caller:caller,
  792. keyValue:id
  793. },
  794. method : 'post',
  795. callback : function(options,success,response){
  796. me.FormUtil.setLoading(false);
  797. var localJson = new Ext.decode(response.responseText);
  798. if(localJson.sucess){
  799. showMessage('提示', '保存成功!', 1000);
  800. grid.loadNewStore(grid,caller,id);
  801. }else if(localJson.exceptionInfo != null){
  802. showError(res.exceptionInfo);return;
  803. }
  804. }
  805. });
  806. }
  807. }
  808. },{
  809. text:'关 闭',
  810. iconCls: 'x-button-icon-close',
  811. cls: 'x-btn-gray',
  812. width: 65,
  813. style: {
  814. marginLeft: '10px'
  815. },
  816. handler:function(btn){
  817. btn.ownerCt.ownerCt.close();
  818. }
  819. },'->']
  820. }).show();
  821. }
  822. }
  823. });