PreForecast.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.scm.sale.PreForecast', {
  3. extend: 'Ext.app.Controller',
  4. FormUtil: Ext.create('erp.util.FormUtil'),
  5. GridUtil: Ext.create('erp.util.GridUtil'),
  6. BaseUtil: Ext.create('erp.util.BaseUtil'),
  7. select_id:null,
  8. views:[
  9. 'scm.sale.PreForecast','core.form.Panel','scm.sale.PreForecastGrid','core.button.DeleteAllDetails','core.button.LoadMake','core.button.ImportExcel',
  10. 'core.button.Add','core.button.Save','core.button.Close','core.form.MultiField','core.button.Scan','core.button.ConfirmRange',
  11. 'core.button.Submit','core.button.ResSubmit','core.button.Audit','core.button.ResAudit','core.button.RunLackMaterial','core.grid.YnColumn',
  12. 'core.button.Update','core.button.Delete','core.form.YnField','core.button.LoadMake','core.button.LackMateriallResult',
  13. 'core.trigger.TextAreaTrigger','core.trigger.DbfindTrigger','core.button.InMaterialNeed','core.button.MaterialLackTwo','core.form.MonthDateField',
  14. 'core.form.ConDateField','erp.view.core.button.DeleteDetail','core.button.CopyPreForecast'
  15. ],
  16. init:function(){
  17. var statuscode=null;
  18. var me = this;
  19. this.control({
  20. 'erpDeleteDetailButton': {
  21. click: function(btn){
  22. Ext.Ajax.request({//拿到form的items
  23. // url : basePath + "pm/make/RunLackMaterial.action",
  24. url : basePath + "scm/sale/deletePreSaleForecastDetail.action",
  25. params:{
  26. id:select_id
  27. },
  28. method : 'post',
  29. callback : function(options,success,response){
  30. var result=Ext.decode(response.responseText);
  31. if(result.success){
  32. Ext.Msg.alert('提示','删除成功!',function(){
  33. window.location.reload();
  34. });
  35. }else{
  36. if(result.exceptionInfo != null){
  37. showError(result.exceptionInfo);return;
  38. }
  39. }
  40. }
  41. });
  42. }
  43. },
  44. 'erpSaveButton': {
  45. click: function(btn){
  46. var form = me.getForm(btn);
  47. var codeField=Ext.getCmp(form.codeField);
  48. if(codeField.value == null || codeField.value == ''){
  49. me.BaseUtil.getRandomNumber();//自动添加编号
  50. }
  51. this.FormUtil.beforeSave(this);
  52. }
  53. },
  54. 'erpCopyPreForecast': {
  55. click: function(btn){
  56. var sf_id=Ext.getCmp('sf_id');
  57. if(sf_id.value==''){
  58. return;
  59. }
  60. Ext.Ajax.request({
  61. url : basePath + 'scm/sale/copyPreForecast.action',
  62. params: {id:sf_id.value},
  63. method : 'post',
  64. callback : function(options,success,response){
  65. var localJson = new Ext.decode(response.responseText);
  66. if(localJson.success){
  67. saveSuccess(function(){
  68. //add成功后刷新页面进入可编辑的页面
  69. showMessage('提示',localJson.log);
  70. window.location.reload();
  71. });
  72. } else if(localJson.exceptionInfo){
  73. var str = localJson.exceptionInfo;
  74. showError(str);
  75. }
  76. }
  77. });
  78. }
  79. },
  80. 'monthdatefield[name=sf_monthselect]':{
  81. afterrender : function(f){
  82. var id=Ext.getCmp('sf_id').getValue();
  83. if (Ext.Number.from(id,0)>0) {
  84. f.setReadOnly(true);
  85. }
  86. },
  87. change: function(field){
  88. var ymonth = field.rawValue;
  89. var year = ymonth.substr(0,4);
  90. var month = ymonth.substr(4,2);
  91. var monthDate = new Date(year,month-1);
  92. var firstDate = Ext.Date.getFirstDateOfMonth(monthDate);
  93. var lastDate = Ext.Date.getLastDateOfMonth(monthDate);
  94. Ext.getCmp('sf_fromdate').setValue(firstDate);
  95. Ext.getCmp('sf_todate').setValue(lastDate);
  96. }
  97. },
  98. 'erpPreForecastGrid':{
  99. select:me.onGridItemClick
  100. },
  101. 'erpCloseButton': {
  102. click: function(btn){
  103. this.FormUtil.beforeClose(this);
  104. }
  105. },
  106. 'erpUpdateButton': {
  107. click: function(btn){
  108. this.update(this);
  109. },
  110. afterrender:function(btn){
  111. statuscode=Ext.getCmp('sf_statuscode').getValue();
  112. if(statuscode!='ENTERING'){
  113. btn.hide();
  114. }
  115. }
  116. },
  117. 'erpDeleteButton': {
  118. click: function(btn){
  119. me.FormUtil.onDelete(Ext.getCmp('sf_id').value);
  120. },
  121. afterrender:function(btn){
  122. statuscode=Ext.getCmp('sf_statuscode').getValue();
  123. if(statuscode!='ENTERING'){
  124. btn.hide();
  125. }
  126. }
  127. },
  128. 'erpAddButton': {
  129. click: function(btn){
  130. me.FormUtil.onAdd('SaleForecast!Pre', '新增人员预测', 'jsps/scm/sale/PreForecast.jsp');
  131. }
  132. },
  133. 'erpConfirmRangeButton':{
  134. click: function(btn){
  135. var grid=Ext.getCmp('grid');
  136. var fromdate=Ext.getCmp('sf_fromdate').getValue();
  137. var todate=Ext.getCmp('sf_todate').getValue();
  138. var type=Ext.getCmp('sf_method');
  139. var lastcolumns=new Array();
  140. var startfield="";
  141. var endfield="";
  142. Ext.Array.each(gridcolumns,function(item,m){
  143. if(item.dataIndex=='sf_needdate'){
  144. var columns=new Array();
  145. var count=(todate-fromdate)/(86400000*7);
  146. for(var i=0;i<count+1;i++){
  147. endfield=Ext.Date.format(Ext.Date.add(startdate,Ext.Date.DAY,7*(i+1)),'Y-m-d');
  148. startfield=Ext.Date.format(Ext.Date.add(startdate,Ext.Date.DAY,7*i),'Y-m-d');
  149. columns.push({
  150. text:startfield.substring(5,10)+"~"+endfield.substring(5,10),
  151. dataIndex:startfield+"#"+endfield,
  152. width : 120,
  153. sortable : true
  154. });
  155. }
  156. item.columns=columns;
  157. }
  158. lastcolumns[m]=item;
  159. });
  160. grid.reconfigure(grid.store,gridcolumns);
  161. grid.store.loadData(griddata);
  162. }
  163. },
  164. 'erpSubmitButton': {
  165. afterrender:function(btn){
  166. if(statuscode!='ENTERING'){
  167. btn.hide();
  168. }
  169. },
  170. click: function(btn){
  171. me.FormUtil.submit(Ext.getCmp('sf_id').value);
  172. }
  173. },
  174. 'erpResSubmitButton': {
  175. afterrender:function(btn){
  176. if(statuscode!='COMMITED'){
  177. btn.hide();
  178. }
  179. },
  180. click: function(btn){
  181. me.FormUtil.onResSubmit(Ext.getCmp('sf_id').value);
  182. }
  183. },
  184. 'erpAuditButton': {
  185. afterrender:function(btn){
  186. if(statuscode!='COMMITED'){
  187. btn.hide();
  188. }
  189. },
  190. click: function(btn){
  191. me.FormUtil.onAudit(Ext.getCmp('sf_id').value);
  192. }
  193. },
  194. 'erpResAuditButton': {
  195. afterrender:function(btn){
  196. if(statuscode!='AUDITED'){
  197. btn.hide();
  198. }
  199. },
  200. click: function(btn){
  201. me.FormUtil.onResAudit(Ext.getCmp('sf_id').value);
  202. }
  203. },
  204. 'erpImportExcelButton':{
  205. afterrender:function(btn){
  206. if(statuscode!='ENTERING'){
  207. btn.hide();
  208. }
  209. }
  210. },
  211. 'filefield[id=excelfile]':{
  212. change: function(field){
  213. var filename = '';
  214. if(contains(field.value, "\\", true)){
  215. filename = field.value.substring(field.value.lastIndexOf('\\') + 1);
  216. } else {
  217. filename = field.value.substring(field.value.lastIndexOf('/') + 1);
  218. }
  219. field.ownerCt.getForm().submit({
  220. url: basePath + 'common/upload.action?em_code=' + em_code,
  221. waitMsg: "正在解析文件信息",
  222. success: function(fp,o){
  223. if(o.result.error){
  224. showError(o.result.error);
  225. } else {
  226. var filePath=o.result.filepath;
  227. var keyValue=Ext.getCmp('wc_id').getValue();
  228. Ext.Ajax.request({//拿到form的items
  229. url : basePath + 'pm/make/ImportExcel.action',
  230. params:{
  231. id:keyValue,
  232. fileId:filePath
  233. },
  234. method : 'post',
  235. callback : function(options,success,response){
  236. var result=Ext.decode(response.responseText);
  237. if(result.success){
  238. var grid=Ext.getCmp('grid');
  239. var param={
  240. caller:'WCPlan',
  241. condition:'wd_wcid='+keyValue
  242. };
  243. grid.GridUtil.loadNewStore(grid,param);
  244. }else{
  245. if(result.exceptionInfo != null){
  246. showError(res.exceptionInfo);return;
  247. }
  248. }
  249. }
  250. });
  251. }
  252. }
  253. });
  254. }
  255. },
  256. 'erpDeleteAllDetailsButton':{
  257. afterrender:function(btn){
  258. if(statuscode!='ENTERING'){
  259. btn.hide();
  260. }
  261. },
  262. click: function(btn){
  263. me.DeleteAllDetails();
  264. }
  265. },
  266. 'erpLoadMakeButton':{
  267. afterrender:function(btn){
  268. if(statuscode!='ENTERING'){
  269. btn.hide();
  270. }
  271. },
  272. click: function(btn){
  273. var form=Ext.getCmp('form');
  274. var keyField=form.keyField;
  275. var KeyValue=Ext.getCmp(keyField).value;
  276. if(KeyValue==null||KeyValue==''){
  277. showError('请先保存记录');
  278. }
  279. var me = this;
  280. var url=basePath+"jsps/pm/make/makeResource.jsp";
  281. var panel = Ext.getCmp("sourceid=" +KeyValue);
  282. var main = parent.Ext.getCmp("content-panel");
  283. var panelId= main.getActiveTab().id;
  284. var urlcondition=" ma_code not in (select wd_makecode from wcplandetail where wd_wcid="+KeyValue+")";
  285. main.getActiveTab().currentGrid = Ext.getCmp('grid');
  286. if(!panel){
  287. var title = "";
  288. if (KeyValue.toString().length>4) {
  289. title = KeyValue.toString().substring(KeyValue.toString().length-4);
  290. } else {
  291. title = KeyValue;
  292. }
  293. panel = {
  294. title:'生产排程来源('+KeyValue+')',
  295. tag : 'iframe',
  296. tabConfig:{tooltip:'生产排程来源('+title+')'},
  297. frame : true,
  298. border : false,
  299. layout : 'fit',
  300. iconCls : 'x-tree-icon-tab-tab',
  301. html : '<iframe id="iframe_maindetail_'+caller+"_"+KeyValue+'" src="'+url+'?urlcondition='+urlcondition+'&whoami=WCPlanSource&_noc=1&keyValue='+KeyValue+'&panelId='+panelId+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>',
  302. closable : true,
  303. listeners : {
  304. close : function(){
  305. main.setActiveTab(main.getActiveTab().id);
  306. }
  307. }
  308. };
  309. me.FormUtil.openTab(panel,"sourceid=" + KeyValue);
  310. }else{
  311. main.setActiveTab(panel);
  312. }
  313. }
  314. },
  315. 'erpRunLackMaterialButton':{
  316. afterrender:function(btn){
  317. if(statuscode!='AUDITED'){
  318. btn.hide();
  319. }
  320. },
  321. click: function(btn){
  322. if (!confirm('确定要运算缺料?')){
  323. return;
  324. }
  325. var code = Ext.getCmp('wc_code').getValue();
  326. var mb = new Ext.window.MessageBox();
  327. mb.wait('正在运算中','请稍后...');
  328. Ext.Ajax.request({//拿到form的items
  329. url : basePath + "pm/make/RunLackMaterial.action",
  330. params:{
  331. code:code
  332. },
  333. method : 'post',
  334. timeout: 300000,
  335. callback : function(options,success,response){
  336. mb.close();
  337. var result=Ext.decode(response.responseText);
  338. if(result.success){
  339. Ext.Msg.alert('提示','运算成功!',function(){
  340. window.location.reload();
  341. });
  342. }else{
  343. if(result.exceptionInfo != null){
  344. showError(result.exceptionInfo);return;
  345. }
  346. }
  347. }
  348. });
  349. }
  350. },
  351. 'erpLackMateriallResultButton':{
  352. afterrender:function(btn){
  353. if(statuscode!='AUDITED'){
  354. btn.hide();
  355. }
  356. },
  357. click: function(btn){
  358. var form=Ext.getCmp('form');
  359. var keyField=form.keyField;
  360. var KeyValue=Ext.getCmp(keyField).value;
  361. if(KeyValue==null||KeyValue==''){
  362. showError('请先保存记录');
  363. }
  364. var me = this;
  365. var url=basePath+"jsps/pm/make/WCPlanResult.jsp";
  366. var panel = Ext.getCmp("lackResultid=" +KeyValue);
  367. var main = parent.Ext.getCmp("content-panel");
  368. var urlCondition='ml_planid='+KeyValue;
  369. main.getActiveTab().currentGrid = Ext.getCmp('grid');
  370. if(!panel){
  371. var title = "";
  372. if (KeyValue.toString().length>4) {
  373. title = KeyValue.toString().substring(KeyValue.toString().length-4);
  374. } else {
  375. title = KeyValue;
  376. }
  377. panel = {
  378. title:'排产缺料运算结果('+KeyValue+')',
  379. tag : 'iframe',
  380. tabConfig:{tooltip:'排产缺料运算结果('+title+')'},
  381. frame : true,
  382. border : false,
  383. layout : 'fit',
  384. iconCls : 'x-tree-icon-tab-tab',
  385. html : '<iframe id="iframe_maindetail_'+caller+"_"+KeyValue+'" src="'+url+'?whoami=MaterialLackForWCPlan&_noc=1&urlcondition='+urlCondition+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>',
  386. closable : true,
  387. listeners : {
  388. close : function(){
  389. main.setActiveTab(main.getActiveTab().id);
  390. }
  391. }
  392. };
  393. me.FormUtil.openTab(panel,"lackResultid=" + KeyValue);
  394. }else{
  395. main.setActiveTab(panel);
  396. }
  397. }
  398. },
  399. 'erpMaterialLackTwoButton':{
  400. afterrender:function(btn){
  401. if(statuscode!='AUDITED'){
  402. btn.hide();
  403. }
  404. },
  405. click: function(btn){
  406. var form=Ext.getCmp('form');
  407. var keyField=form.keyField;
  408. var KeyValue=Ext.getCmp(keyField).value;
  409. var startdate=Ext.getCmp('wc_fromdate').value;
  410. var enddate=Ext.getCmp('wc_todate').value;
  411. if(KeyValue==null||KeyValue==''){
  412. showError('请先保存记录');
  413. }
  414. var me = this;
  415. var url=basePath+"jsps/pm/make/WCPlanMaterialLack.jsp";
  416. var panel = Ext.getCmp("towsourceid=" +KeyValue);
  417. var main = parent.Ext.getCmp("content-panel");
  418. var urlCondition='ml_planid='+KeyValue;
  419. url=url+"?whoami=MaterialLackForWCPlan&_noc=1&urlcondition="+urlCondition+"&startdate="+startdate+"&enddate="+enddate;
  420. main.getActiveTab().currentGrid = Ext.getCmp('grid');
  421. if(!panel){
  422. var title = "";
  423. if (KeyValue.toString().length>4) {
  424. title = KeyValue.toString().substring(KeyValue.toString().length-4);
  425. } else {
  426. title = KeyValue;
  427. }
  428. panel = {
  429. title:'排产缺料二维查看('+KeyValue+')',
  430. tag : 'iframe',
  431. tabConfig:{tooltip:'排产缺料二维查看('+title+')'},
  432. frame : true,
  433. border : false,
  434. layout : 'fit',
  435. iconCls : 'x-tree-icon-tab-tab',
  436. html : '<iframe id="iframe_maindetail_'+caller+"_"+KeyValue+'" src="'+url+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>',
  437. closable : true,
  438. listeners : {
  439. close : function(){
  440. main.setActiveTab(main.getActiveTab().id);
  441. }
  442. }
  443. };
  444. me.FormUtil.openTab(panel,"twosourceid=" + KeyValue);
  445. }else{
  446. main.setActiveTab(panel);
  447. }
  448. }
  449. },
  450. 'erpInMaterialNeedButton':{
  451. afterrender:function(btn){
  452. if(statuscode!='AUDITED'){
  453. btn.hide();
  454. }
  455. },
  456. click:function(btn){
  457. var form=Ext.getCmp('form');
  458. var keyField=form.keyField;
  459. var KeyValue=Ext.getCmp(keyField).value;
  460. if(KeyValue==null||KeyValue==''){
  461. showError('请先保存记录');
  462. }
  463. var me = this;
  464. var url=basePath+"jsps/pm/make/WCPlanResult.jsp";
  465. var panel = Ext.getCmp("lackNotify=" +KeyValue);
  466. var main = parent.Ext.getCmp("content-panel");
  467. var urlCondition='mln_planid='+KeyValue;
  468. main.getActiveTab().currentGrid = Ext.getCmp('grid');
  469. if(!panel){
  470. var title = "";
  471. if (KeyValue.toString().length>4) {
  472. title = KeyValue.toString().substring(KeyValue.toString().length-4);
  473. } else {
  474. title = KeyValue;
  475. }
  476. panel = {
  477. title:'送货需求('+KeyValue+')',
  478. tag : 'iframe',
  479. tabConfig:{tooltip:'送货需求('+title+')'},
  480. frame : true,
  481. border : false,
  482. layout : 'fit',
  483. iconCls : 'x-tree-icon-tab-tab',
  484. html : '<iframe id="iframe_maindetail_'+caller+"_"+KeyValue+'" src="'+url+'?whoami=MaterialLackForNotify&_noc=1&urlcondition='+urlCondition+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>',
  485. closable : true,
  486. listeners : {
  487. close : function(){
  488. main.setActiveTab(main.getActiveTab().id);
  489. }
  490. }
  491. };
  492. me.FormUtil.openTab(panel,"lackNotify=" + KeyValue);
  493. }else{
  494. main.setActiveTab(panel);
  495. }
  496. }
  497. }
  498. });
  499. },
  500. getForm: function(btn){
  501. return btn.ownerCt.ownerCt;
  502. },
  503. onGridItemClick: function(selModel, record){//grid行选择
  504. var statuscode=Ext.getCmp('sf_statuscode').getValue();
  505. if(statuscode=='ENTERING'){
  506. Ext.getCmp('erpDeleteDetailButton_btn').setDisabled(false);
  507. } else {
  508. Ext.getCmp('erpDeleteDetailButton_btn').setDisabled(true);
  509. }
  510. if(!selModel.view.ownerCt.readOnly){
  511. var grid=selModel.view.ownerCt;
  512. Ext.getCmp('toolbar_tbtext').setText(record.data['sd_detno']);
  513. select_id = record.data['sd_id'];
  514. var detno="sd_detno";
  515. var index = null,arr=new Array();
  516. index = record.data[detno];
  517. index = index == null ? (record.index + 1) : index;
  518. if(index.toString() == 'NaN'){
  519. index = '';
  520. }
  521. if(index == grid.store.last().data[detno]){//如果选择了最后一行
  522. for(var i=0;i < 10;i++ ){
  523. var o = new Object();
  524. o[detno] = Number(index) + i + 1;
  525. arr.push(o);
  526. }
  527. grid.store.loadData(arr, true);
  528. }
  529. }
  530. },
  531. DeleteAllDetails:function(){
  532. var id=Ext.getCmp('wc_id').getValue();
  533. Ext.Ajax.request({//拿到form的items
  534. url : basePath + 'pm/make/deleteAllDetails.action',
  535. params:{
  536. id:id
  537. },
  538. method : 'post',
  539. callback : function(options,success,response){
  540. var result=Ext.decode(response.responseText);
  541. if(result.success){
  542. var grid=Ext.getCmp('grid');
  543. var param={
  544. caller:'WCPlan',
  545. condition:'wd_wcid='+id
  546. };
  547. grid.GridUtil.loadNewStore(grid,param);
  548. }else{
  549. if(res.exceptionInfo != null){
  550. showError(res.exceptionInfo);return;
  551. }
  552. }
  553. }
  554. });
  555. },
  556. update:function(grid){
  557. var mm = this.FormUtil;
  558. var form = Ext.getCmp('form');
  559. var s1 = mm.checkFormDirty(form);
  560. var s2 = '';
  561. var grid = Ext.getCmp('grid');
  562. if(grid.GridUtil){
  563. var msg = grid.checkGridDirty(grid);
  564. if(msg.length > 0){
  565. s2 = s2 + '<br/>' + grid.checkGridDirty(grid);
  566. }
  567. }
  568. if(s1 == '' && (s2 == '' || s2 == '<br/>')){
  569. showError($I18N.common.form.emptyData + '<br/>' + $I18N.common.grid.emptyDetail);
  570. return;
  571. }
  572. if(form && form.getForm().isValid()){
  573. //form里面数据
  574. var r = form.getValues(false, true);
  575. //去除ignore字段
  576. var keys = Ext.Object.getKeys(r), f;
  577. Ext.each(keys, function(k){
  578. f = form.down('#' + k);
  579. if(f && f.logic == 'ignore') {
  580. delete r[k];
  581. }
  582. });
  583. if(!mm.contains(form.updateUrl, '?caller=', true)){
  584. form.updateUrl = form.updateUrl + "?caller=" + caller;
  585. }
  586. var params = [];
  587. var param = grid.getGridStore();
  588. if(grid.necessaryField.length > 0 && (param == null || param == '')){
  589. warnMsg('明细表还未添加数据,是否继续?', function(btn){
  590. if(btn == 'yes'){
  591. params = unescape("[" + param.toString().replace(/\\/g,"%") + "]");
  592. } else {
  593. return;
  594. }
  595. });
  596. } else {
  597. params = unescape("[" + param.toString().replace(/\\/g,"%") + "]");
  598. }
  599. mm.update(r, params);
  600. }else{
  601. mm.checkForm(form);
  602. }
  603. },
  604. onSubmit:function(id){
  605. var me = this;
  606. var form = Ext.getCmp('form');
  607. var grid = Ext.getCmp('grid');
  608. var s2='';
  609. if(form && form.getForm().isValid()){
  610. var s = this.FormUtil.checkFormDirty(form);
  611. var param = me.GridUtil.getAllGridStore();
  612. if(grid.necessaryField.length > 0 && (param == null || param == '')){
  613. showError("明细表还未添加数据,无法提交!");
  614. return;
  615. }
  616. if(grid.GridUtil){
  617. var msg = grid.GridUtil.checkGridDirty(grid);
  618. if(msg.length > 0){
  619. s2 = s2 + '<br/>' + grid.GridUtil.checkGridDirty(grid);
  620. }
  621. }
  622. if(s2 == '' || s2 == '<br/>'){
  623. me.FormUtil.submit(id);
  624. } else {
  625. Ext.MessageBox.show({
  626. title:'保存修改?',
  627. msg: '该单据已被修改:<br/>' + s + '<br/>提交前要先保存吗?',
  628. buttons: Ext.Msg.YESNOCANCEL,
  629. icon: Ext.Msg.WARNING,
  630. fn: function(btn){
  631. if(btn == 'yes'){
  632. me.FormUtil.onUpdate(form);
  633. } else if(btn == 'no'){
  634. me.FormUtil.submit(id);
  635. } else {
  636. return;
  637. }
  638. }
  639. });
  640. }
  641. } else {
  642. me.FormUtil.checkForm();
  643. }
  644. }
  645. });