Form.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. Ext.define('erp.view.scm.reserve.barStockCode.Form',{
  2. extend: 'Ext.form.Panel',
  3. alias: 'widget.erpBarStockCodeFormPanel',
  4. id: 'barStockCodeForm',
  5. region: 'north',
  6. frame : true,
  7. layout : 'column',
  8. autoScroll : true,
  9. defaultType : 'textfield',
  10. labelSeparator : ':',
  11. buttonAlign : 'center',
  12. cls: 'u-form-default',
  13. fieldDefaults : {
  14. fieldStyle : "background:#FFFAFA;color:#515151;",
  15. focusCls: 'x-form-field-cir-focus',
  16. labelAlign : "right",
  17. msgTarget: 'side',
  18. blankText : $I18N.common.form.blankText
  19. },
  20. requires: ['erp.view.common.JProcess.SetNodeGridPanel'],
  21. FormUtil: Ext.create('erp.util.FormUtil'),
  22. BaseUtil: Ext.create('erp.util.BaseUtil'),
  23. saveUrl: '',
  24. updateUrl: '',
  25. deleteUrl: '',
  26. auditUrl: '',
  27. resAuditUrl: '',
  28. submitUrl: '',
  29. resSubmitUrl: '',
  30. bannedUrl: '',
  31. resBannedUrl: '',
  32. postUrl:'',
  33. printUrl: '',
  34. getIdUrl: '',
  35. keyField: '',
  36. codeField: '',
  37. statusField: '',
  38. params: null,
  39. caller: null,
  40. formCondition:null,
  41. Contextvalue:null,
  42. LastValue:null,
  43. enableTools: true,
  44. enableKeyEvents: true,
  45. _noc: 0,
  46. initComponent : function(){
  47. formCondition = getUrlParam('formCondition');//从url解析参数
  48. formCondition = (formCondition == null) ? "" : formCondition.replace(/IS/g,"=");
  49. //集团版
  50. var master=getUrlParam('newMaster');
  51. var param = {caller: this.caller || caller, condition: this.formCondition || formCondition, _noc: (getUrlParam('_noc') || this._noc)};
  52. if(master){
  53. param.master=master;
  54. }
  55. this.FormUtil.getItemsAndButtons(this, 'common/singleFormItems.action', this.params || param);//从后台拿到formpanel的items
  56. this.callParent(arguments);
  57. //加prev、next、refresh等tool
  58. if(this.enableTools) {
  59. this.setTools();
  60. }
  61. //给页面加上ctrl+alt+s键盘事件,自动跳转form配置界面
  62. if(this.enableKeyEvents) {
  63. this.addKeyBoardEvents();
  64. }
  65. },
  66. /**
  67. * FormHeader Tools
  68. * 包括:查看日志、查看流程、查看列表、最大化、最小化、刷新、关闭、上一条、下一条
  69. */
  70. setTools: function(){
  71. this.tools = [{
  72. type: 'search',
  73. tooltip: '查看单据日志',
  74. listeners:{
  75. click: function(btn){
  76. var form = Ext.getCmp('barStockCodeForm');
  77. var id = Ext.getCmp(form.keyField).value;
  78. if(id != null && id != 0){
  79. form.getLogs(id);
  80. }
  81. }
  82. }
  83. },{
  84. type: 'save',
  85. tooltip: '导出Excel',
  86. listeners:{
  87. click: function(btn){
  88. var form = Ext.getCmp('barStockCodeForm');
  89. var id = Ext.getCmp(form.keyField).value;
  90. form.saveAsExcel(id,caller);
  91. }
  92. }
  93. },{
  94. type: 'collapse',
  95. tooltip: '查看列表',
  96. listeners:{
  97. click: function(btn){
  98. if(parent.Ext) {
  99. var datalist = parent.Ext.getCmp(datalistId);
  100. if(!datalist){
  101. var form = btn.ownerCt.ownerCt;
  102. var url = 'jsps/common/datalist.jsp?whoami=' + caller;
  103. if(btn.urlcondition){
  104. url += '&urlcondition=' + btn.urlcondition;
  105. }
  106. form.FormUtil.onAdd(caller + '_scan', parent.Ext.getCmp('content-panel').getActiveTab().title + 'DataList', url);
  107. } else {
  108. datalist.ownerCt.setActiveTab(datalist);
  109. }
  110. }
  111. }
  112. }
  113. },{
  114. type: 'maximize',
  115. tooltip: '最大化',
  116. listeners:{
  117. click: function(btn){
  118. var height = window.screen.height*0.87;
  119. var width = window.screen.width;
  120. //弹出框显示,可以锁定住地址栏和工具栏,防止用户不合理操作
  121. 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');
  122. }
  123. }
  124. },{
  125. type: 'minus',
  126. tooltip: '最小化',
  127. listeners:{
  128. click: function(btn){
  129. var p = parent.Ext.getCmp('content-panel');
  130. if(p){
  131. var t = p.getActiveTab();
  132. var b = parent.Ext.getCmp('bottom');
  133. if(b){
  134. b.insert(4, {
  135. text: t.title,
  136. tooltip: t.tabConfig.tooltip,
  137. tab: t,
  138. handler: function(btn){
  139. var a = p.add(btn.tab);
  140. p.setActiveTab(a);
  141. btn.destroy();
  142. }
  143. });
  144. p.remove(t, false);//并不销毁
  145. }
  146. }
  147. }
  148. }
  149. },{
  150. type: 'refresh',
  151. tooltip: '刷新',
  152. listeners:{
  153. click: function(btn){
  154. var form = btn.up('form');
  155. if(typeof form.refresh === 'function')
  156. form.refresh.call(null, form);
  157. else
  158. window.location.reload();
  159. }
  160. }
  161. },{
  162. type: 'close',
  163. tooltip: '关闭',
  164. listeners:{
  165. click: function(btn){
  166. var p = parent.Ext.getCmp('content-panel');
  167. if(p){
  168. p.getActiveTab().close();
  169. } else {
  170. window.close();
  171. }
  172. }
  173. }
  174. },{
  175. type:'prev',
  176. id: 'prev',
  177. tooltip: '上一条',
  178. listeners:{
  179. render: function(btn){
  180. setTimeout(function(){
  181. if(parent.Ext) {
  182. var vad_id = Ext.getCmp("bsd_id").value;
  183. var form = Ext.getCmp('barStockCodeForm');
  184. var datalistStore = form.getCurrentStore(vad_id);
  185. Ext.each(datalistStore, function(){
  186. if(this.selected == true){
  187. if(this.prev == null){
  188. btn.disable(true);
  189. }
  190. }
  191. });
  192. } else {
  193. btn.disable(true);
  194. }
  195. },100);
  196. },
  197. click: function(btn){
  198. var bsd_id = Ext.getCmp("bsd_id").value;
  199. var form = Ext.getCmp('barStockCodeForm');
  200. var datalistStore = form.getCurrentStore(bsd_id);
  201. var newId = 0;
  202. var idx = 0;
  203. Ext.each(datalistStore, function(s, index){
  204. if(this.selected == true){
  205. if(this.prev != null){
  206. newId = this.prev;
  207. idx = index;
  208. }
  209. }
  210. });
  211. var formCondition = "bsd_id=" + newId;
  212. var gridCondition = "bdd_bsdid=" + newId ;
  213. window.location.href = basePath+'jsps/scm/reserve/barStockCode.jsp?_noc=1&whoami='+caller+'&formCondition='+formCondition+'&gridCondition='+gridCondition;
  214. }
  215. }
  216. },{
  217. type: 'next',
  218. id: 'next',
  219. tooltip: '下一条',
  220. listeners:{
  221. render: function(btn){
  222. setTimeout(function(){
  223. if(parent.Ext) {
  224. var bsd_id = Ext.getCmp("bsd_id").value;
  225. var form = Ext.getCmp('barStockCodeForm');
  226. var datalistStore = form.getCurrentStore(bsd_id);
  227. Ext.each(datalistStore, function(){
  228. if(this.selected == true){
  229. if(this.next == null){
  230. btn.disable(true);
  231. }
  232. }
  233. });
  234. } else {
  235. btn.disable(true);
  236. }
  237. },100);
  238. },
  239. click: function(btn){
  240. var bsd_id = Ext.getCmp("bsd_id").value;
  241. var form = Ext.getCmp('barStockCodeForm');
  242. var datalistStore = form.getCurrentStore(bsd_id);
  243. var newId = 0;
  244. var idx = 0;
  245. Ext.each(datalistStore, function(s, index){
  246. if(s.selected == true){
  247. if(s.next != null){
  248. newId = s.next;
  249. idx = index;
  250. }
  251. }
  252. });
  253. var formCondition = "bsd_id=" + newId;
  254. var gridCondition = "bdd_bsdid=" + newId ;
  255. window.location.href = basePath+'jsps/scm/reserve/barStockCode.jsp?_noc=1&whoami='+caller+'&formCondition='+formCondition+'&gridCondition='+gridCondition;
  256. }
  257. }
  258. },{
  259. type: 'help',
  260. tooltip: '帮助文档',
  261. listeners:{
  262. click: function(t){
  263. var form = t.ownerCt.ownerCt;
  264. form.showHelpWindow();
  265. }
  266. }
  267. }];
  268. },
  269. /**
  270. * 监听一些事件
  271. * <br>
  272. * Ctrl+Alt+S 单据配置维护
  273. * Ctrl+Alt+P 参数、逻辑配置维护
  274. */
  275. addKeyBoardEvents: function(){
  276. var me = this;
  277. Ext.EventManager.addListener(document.body, 'keydown', function(e){
  278. if(e.altKey && e.ctrlKey) {
  279. if(e.keyCode == Ext.EventObject.S) {
  280. var url = "jsps/ma/form.jsp?formCondition=fo_idIS" + me.fo_id + "&gridCondition=fd_foidIS" + me.fo_id,
  281. forms = Ext.ComponentQuery.query('form'),
  282. grids = Ext.ComponentQuery.query('gridpanel'),
  283. formSet = [], gridSet = [];
  284. if(forms.length > 0) {
  285. Ext.Array.each(forms, function(f){
  286. f.fo_id && (formSet.push(f.fo_id));
  287. });
  288. }
  289. if(grids.length > 0) {
  290. Ext.Array.each(grids, function(g){
  291. if(g.xtype.indexOf('erpBarStockCodeGridPanel') > -1)
  292. gridSet.push(window.caller);
  293. else if(g.caller)
  294. gridSet.push(g.caller);
  295. });
  296. }
  297. if(formSet.length > 0 || gridSet.length > 0) {
  298. url = "jsps/ma/multiform.jsp?formParam=" + formSet.join(',') + '&gridParam=' + gridSet.join(',');
  299. }
  300. me.FormUtil.onAdd('form' + caller, 'Form配置维护(' + caller + ')', url);
  301. } else if(e.keyCode == Ext.EventObject.P) {
  302. me.FormUtil.onAdd('configs-' + caller, '逻辑配置维护(' + caller + ')', "jsps/ma/logic/config.jsp?whoami=" + caller);
  303. }
  304. }
  305. });
  306. },
  307. /**
  308. * 拿到操作日志
  309. */
  310. getLogs: function(id){
  311. if(Ext.getCmp('win' + id)){
  312. Ext.getCmp('win' + id).show();
  313. } else {
  314. Ext.Ajax.request({//拿到grid的columns
  315. url : basePath + 'common/getMessageLogs.action',
  316. async: false,
  317. params: {
  318. caller: caller,
  319. id: id
  320. },
  321. method : 'post',
  322. callback : function(options,success,response){
  323. var res = new Ext.decode(response.responseText);
  324. if(res.exception || res.exceptionInfo){
  325. showError(res.exceptionInfo);
  326. return;
  327. }
  328. var logs = res.logs;
  329. logs = logs.length == 0 ? [{ml_date: $I18N.common.grid.emptyText, ml_man: $I18N.common.grid.emptyText,
  330. ml_content: $I18N.common.grid.emptyText, ml_result: $I18N.common.grid.emptyText}] : logs;
  331. Ext.create('Ext.window.Window', {
  332. id : 'win' + id,
  333. title: '<span style="color:#CD6839;">操作日志</span>',
  334. iconCls: 'x-button-icon-set',
  335. closeAction: 'hide',
  336. height: "100%",
  337. width: "80%",
  338. maximizable : true,
  339. buttonAlign : 'center',
  340. layout : 'anchor',
  341. items: [{
  342. anchor: '100% 100%',
  343. xtype: 'gridpanel',
  344. ignore: true,
  345. bodyStyle: 'background:#f1f1f1;',
  346. autoScroll: true,
  347. store: Ext.create('Ext.data.Store', {
  348. fields: ['ml_date', 'ml_man', 'ml_content', 'ml_result'],
  349. data: logs
  350. }),
  351. columnLines: true,
  352. columns: [
  353. { header: '时间', dataIndex: 'ml_date', flex: 1.5 , renderer: function(val){
  354. if(val != '无数据'){
  355. return Ext.Date.format(new Date(val), 'Y-m-d H:i:s');
  356. }
  357. }},
  358. { header: '操作人员', dataIndex: 'ml_man', flex: 1 ,renderer: function(val){
  359. if(val == em_name){
  360. return '<font color=red>' + val + '</font>';
  361. } else {
  362. return val;
  363. }
  364. }},
  365. { header: '操作', dataIndex: 'ml_content', flex: 1.5},
  366. { header: '结果', dataIndex: 'ml_result', flex: 3}
  367. ]
  368. }],
  369. buttons : [{
  370. text : '关 闭',
  371. iconCls: 'x-button-icon-close',
  372. cls: 'x-btn-gray',
  373. handler : function(){
  374. Ext.getCmp('win' + id).close();
  375. }
  376. }]
  377. }).show();
  378. }
  379. });
  380. }
  381. },
  382. saveAsExcel:function(id,caller){
  383. if(id==null || id =='') showMessage('提示','无法导出空数据单据',1000);
  384. else window.location.href=basePath+'excel/savePanelAsExcel.action?id='+id+"&caller="+caller+"&_noc=1";
  385. },
  386. showHelpWindow:function(){
  387. var me = this,
  388. win = Ext.getCmp('ext-help'),path;
  389. Ext.Ajax.request({
  390. url : basePath + 'common/form/getHelpDoc.action',
  391. params: {
  392. caller:caller
  393. },
  394. method : 'post',
  395. async:false,
  396. callback : function(opt, s, res){
  397. var r = new Ext.decode(res.responseText);
  398. if(r.exceptionInfo){
  399. showError(r.exceptionInfo);
  400. } else if(r.success){
  401. path=r.path;
  402. }
  403. }
  404. });
  405. if(!win) {
  406. win = Ext.create('Ext.Window', {
  407. id: 'ext-help',
  408. width: '90%',
  409. height: '100%',
  410. closeAction: 'hide',
  411. title: '帮助文档',
  412. layout: 'border',
  413. items: [{
  414. region:'center',
  415. tag : 'iframe',
  416. layout : 'fit',
  417. html : '<iframe src="' + basePath + path + '" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>'
  418. },{
  419. region: 'south',
  420. height: 100,
  421. split: true,
  422. collapsible: true,
  423. title: '相关信息',
  424. minHeight:60,
  425. collapsed: true,
  426. html: '相关信息'
  427. }]
  428. });
  429. }
  430. win.show();
  431. },
  432. parseVoucherConfig : function(config) {
  433. var form = this, keys = Ext.Object.getKeys(config), args = {};
  434. Ext.each(keys, function(k){
  435. if (typeof config[k] === 'function') {
  436. args[k] = config[k].call(null, form);
  437. } else if (k == 'yearmonth') {
  438. args[k] = form.getYearmonthByField(config[k]);
  439. } else if (k == 'datas') {
  440. args[k] = form.getDataByField(config[k]);
  441. } else {
  442. args[k] = config[k];
  443. }
  444. });
  445. return args;
  446. },
  447. getDataByField : function(field) {
  448. var form = this, f = form.child('#' + field);
  449. return f ? "'" + f.getValue() + "'" : '';
  450. },
  451. getYearmonthByField : function(field) {
  452. var form = this;
  453. var f = form.child('#' + field),
  454. v = f ? (Ext.isDate(f.value) ? f.value : Ext.Date.parse(f.value, 'Y-m-d')) : new Date();
  455. return Ext.Date.format(v, 'Ym');
  456. },
  457. getCurrentStore: function(value){
  458. var grid = parent.Ext.getCmp('grid');
  459. var items = grid.store.data.items;
  460. var array = new Array();
  461. var o = null;
  462. Ext.each(items, function(item, index){
  463. o = new Object();
  464. o.selected = false;
  465. if(index == 0){
  466. o.prev = null;
  467. } else {
  468. o.prev = items[index-1].data["bsd_id"];
  469. }
  470. if(index == items.length - 1){
  471. o.next = null;
  472. } else {
  473. o.next = items[index+1].data["bsd_id"];
  474. }
  475. var v = item.data["bsd_id"];
  476. o.value = v;
  477. if(v == value)
  478. o.selected = true;
  479. array.push(o);
  480. });
  481. return array;
  482. }
  483. });