PreSale.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.scm.sale.PreSale', {
  3. extend: 'Ext.app.Controller',
  4. FormUtil: Ext.create('erp.util.FormUtil'),
  5. BaseUtil: Ext.create('erp.util.BaseUtil'),
  6. views:[
  7. 'scm.sale.PreSale','core.form.Panel','core.form.MultiField',
  8. 'core.button.Add','core.button.Save','core.button.Update','core.button.Delete','core.button.Submit','core.button.ResSubmit',
  9. 'core.button.Audit','core.button.ResAudit','core.button.Close','core.button.TurnSale','core.form.FileField',
  10. 'core.trigger.TextAreaTrigger','core.trigger.DbfindTrigger','core.form.YnField','core.form.CheckBoxGroup','core.form.CheckBoxContainer',
  11. 'scm.sale.buttons.Buttons1','scm.sale.buttons.Buttons2','scm.sale.buttons.Buttons3','scm.sale.buttons.Buttons4','scm.sale.buttons.Buttons5',
  12. 'scm.sale.buttons.Buttons6','scm.sale.buttons.Buttons7','scm.sale.buttons.Buttons8','scm.sale.buttons.Buttons9','scm.sale.buttons.Buttons10',
  13. 'core.form.RadioGroup','core.form.SplitTextField','core.grid.ItemGrid','core.button.TurnSaleSelect',
  14. 'core.button.TurnNormalSale','core.button.RunATP'
  15. ],
  16. init:function(){
  17. var me = this;
  18. this.control({
  19. 'erpFormPanel': {
  20. afterrender: function(){
  21. var panel = parent.Ext.getCmp('tree-tab');
  22. if(panel && !panel.collapsed) {
  23. panel.toggleCollapse();
  24. }
  25. }
  26. },
  27. 'field[name=ps_currency]': {
  28. beforetrigger: function(field) {
  29. var t = field.up('form').down('field[name=ps_date]'),
  30. value = t.getValue();
  31. if(value) {
  32. field.findConfig = 'cm_yearmonth=' + Ext.Date.format(value, 'Ym');
  33. }
  34. }
  35. },
  36. 'erpPreSaleButton1': {
  37. click: function(){
  38. me.updateButton(1);
  39. }
  40. },
  41. 'erpPreSaleButton2': {
  42. click: function(){
  43. me.updateButton(2);
  44. }
  45. },
  46. 'erpPreSaleButton3': {
  47. click: function(){
  48. me.updateButton(3);
  49. }
  50. },
  51. 'erpPreSaleButton4': {
  52. click: function(){
  53. me.updateButton(4);
  54. }
  55. },
  56. 'erpPreSaleButton5': {
  57. click: function(){
  58. me.updateButton(5);
  59. }
  60. },
  61. 'erpPreSaleButton6': {
  62. click: function(){
  63. me.updateButton(6);
  64. }
  65. },
  66. 'erpPreSaleButton7': {
  67. click: function(){
  68. me.updateButton(7);
  69. }
  70. },
  71. 'erpPreSaleButton8': {
  72. click: function(){
  73. me.updateButton(8);
  74. }
  75. },
  76. 'erpPreSaleButton9': {
  77. click: function(){
  78. me.updateButton(9);
  79. }
  80. },
  81. 'erpPreSaleButton10': {
  82. click: function(){
  83. me.updateButton(10);
  84. }
  85. },
  86. 'erpTurnSaleSelectButton':{
  87. afterrender: function(btn){
  88. var status = Ext.getCmp('ps_statuscode');
  89. if(status && status.value != 'AUDITED'&&status.value !='TURNSA'){
  90. btn.hide();
  91. }
  92. }
  93. },
  94. 'erpRunATPButton':{
  95. click: function(btn){
  96. if(Ext.getCmp('ps_code').value != null){
  97. var mb = new Ext.window.MessageBox();
  98. mb.wait('正在运算中','请稍后...',{
  99. interval: 10000, //bar will move fast!
  100. duration: 1000000,
  101. increment: 20,
  102. scope: this,
  103. });
  104. Ext.Ajax.request({//拿到grid的columns
  105. url : basePath + "/pm/atp/runATPFromOther.action",
  106. params: {
  107. fromcode:Ext.getCmp('ps_code').value,
  108. fromwhere:'PRESALE'
  109. },
  110. method : 'post',
  111. timeout: 600000,
  112. callback : function(options,success,response){
  113. mb.close();
  114. var res = new Ext.decode(response.responseText);
  115. if(res.exceptionInfo){
  116. showError(res.exceptionInfo);return;
  117. }
  118. if(res.success){
  119. if(res.atpid != '' && res.atpid != null && res.atpid>0){
  120. me.FormUtil.onAdd(null, 'ATP运算', 'jsps/pm/atp/ATPMain.jsp?formCondition=am_id=' + res.atpid + '&&gridCondition=ad_amid='+res.atpid+'&_noc=1');
  121. } else {
  122. showError('无数据,运算失败');return;
  123. }
  124. }
  125. }
  126. });
  127. }
  128. }
  129. },
  130. 'erpTurnNormalSaleButton':{
  131. click: function(m){
  132. warnMsg("确定要转入销售单吗?", function(btn){
  133. if(btn == 'yes'){
  134. Ext.Ajax.request({
  135. url: basePath + 'scm/sale/turnPreSaleToSale.action',
  136. params: {
  137. type:'sale',
  138. ps_id:Ext.getCmp('ps_id').value
  139. },
  140. waitMsg: '转单中...',
  141. method: 'post',
  142. callback: function(options, success, response) {
  143. var localJson = new Ext.decode(response.responseText);
  144. if (localJson.success) {
  145. turnSuccess(function() {
  146. //add成功后刷新页面进入可编辑的页面
  147. // this.loadSplitData(originaldetno, said, record);
  148. if(localJson.clickurl){
  149. showError(localJson.clickurl);
  150. window.location.reload();
  151. }
  152. });
  153. } else if (localJson.exceptionInfo) {
  154. showError(localJson.exceptionInfo);
  155. } else {
  156. saveFailure();
  157. }
  158. }
  159. });
  160. }
  161. });
  162. },
  163. afterrender: function(btn){
  164. var status = Ext.getCmp('ps_statuscode');
  165. if(status && status.value != 'AUDITED'&&status.value !='TURNSA'){
  166. btn.hide();
  167. }
  168. }
  169. },
  170. 'erpTurnSaleSelectButton':{
  171. afterrender: function(btn){
  172. var status = Ext.getCmp('ps_statuscode');
  173. if(status && status.value != 'AUDITED'&&status.value !='TURNSA'){
  174. btn.hide();
  175. }
  176. }
  177. },
  178. 'erpSaveButton': {
  179. click: function(btn){
  180. var form = me.getForm(btn);
  181. if(Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == ''){
  182. me.BaseUtil.getRandomNumber();//自动添加编号
  183. }
  184. this.FormUtil.beforeSave(this);
  185. }
  186. },
  187. 'erpDeleteButton' : {
  188. afterrender: function(btn){
  189. var status = Ext.getCmp('ps_statuscode');
  190. if(status && status.value != 'ENTERING'){
  191. btn.hide();
  192. }
  193. },
  194. click: function(btn){
  195. me.FormUtil.onDelete(Ext.getCmp('ps_id').value);
  196. }
  197. },
  198. 'erpUpdateButton': {
  199. afterrender: function(btn){
  200. var status = Ext.getCmp('ps_statuscode');
  201. if(status && status.value != 'ENTERING'){
  202. btn.hide();
  203. }
  204. },
  205. click: function(btn){
  206. me.onUpdate(this);
  207. }
  208. },
  209. 'erpAddButton': {
  210. click: function(){
  211. me.FormUtil.onAdd('addPreSale', '新增订单评审', 'jsps/scm/sale/preSale.jsp?v_width='+v_width);
  212. }
  213. },
  214. 'erpCloseButton': {
  215. click: function(btn){
  216. me.FormUtil.beforeClose(me);
  217. }
  218. },
  219. 'erpSubmitButton': {
  220. afterrender: function(btn){
  221. var status = Ext.getCmp('ps_statuscode');
  222. if(status && status.value != 'ENTERING'){
  223. btn.hide();
  224. }
  225. },
  226. click: function(btn){
  227. me.onSubmit(Ext.getCmp('ps_id').value);
  228. }
  229. },
  230. 'erpResSubmitButton': {
  231. afterrender: function(btn){
  232. var status = Ext.getCmp('ps_statuscode');
  233. if(status && status.value != 'COMMITED'){
  234. btn.hide();
  235. }
  236. },
  237. click: function(btn){
  238. me.FormUtil.onResSubmit(Ext.getCmp('ps_id').value);
  239. }
  240. },
  241. 'erpAuditButton': {
  242. afterrender: function(btn){
  243. var status = Ext.getCmp('ps_statuscode');
  244. if(status && status.value != 'COMMITED'){
  245. btn.hide();
  246. }
  247. },
  248. click: function(btn){
  249. me.FormUtil.onAudit(Ext.getCmp('ps_id').value);
  250. }
  251. },
  252. 'erpResAuditButton': {
  253. afterrender: function(btn){
  254. var status = Ext.getCmp('ps_statuscode');
  255. if(status && status.value != 'AUDITED'){
  256. btn.hide();
  257. }
  258. },
  259. click: function(btn){
  260. me.FormUtil.onResAudit(Ext.getCmp('ps_id').value);
  261. }
  262. },
  263. 'dbfindtrigger[name=ps_address]': {
  264. afterrender:function(trigger){
  265. trigger.dbKey='ps_custcode';
  266. trigger.mappingKey='cu_code';
  267. trigger.dbMessage='请先选客户编号!';
  268. }
  269. },
  270. 'combo[name=ps_type]': {
  271. delay: 200,
  272. change: function(m){
  273. this.hidecolumns(m);
  274. // var f = m.ownerCt, s = f.down('field[name=ar_sellercode]');
  275. // if (s) {
  276. // if(m.value == '应收款') {
  277. // s.allowBlank = false;
  278. // } else {
  279. // s.allowBlank = true;
  280. // }
  281. // }
  282. }
  283. }/*,
  284. 'erpTurnSaleButton':{
  285. afterrender: function(btn){
  286. var status = Ext.getCmp('ps_statuscode');
  287. if(status && status.value != 'AUDITED'){
  288. btn.hide();
  289. }
  290. },
  291. click: function(btn){
  292. warnMsg("确定要转入销售单吗?", function(btn){
  293. if(btn == 'yes'){
  294. me.FormUtil.getActiveTab().setLoading(true);//loading...
  295. Ext.Ajax.request({
  296. url : basePath + 'scm/sale/preSaleToSale.action',
  297. params: {
  298. id: Ext.getCmp('ps_id').value
  299. },
  300. method : 'post',
  301. callback : function(options,success,response){
  302. me.FormUtil.getActiveTab().setLoading(false);
  303. var localJson = new Ext.decode(response.responseText);
  304. if(localJson.exceptionInfo){
  305. showError(localJson.exceptionInfo);
  306. }
  307. if(localJson.success){
  308. turnSuccess(function(){
  309. var id = localJson.id;
  310. var url = "jsps/scm/sale/sale.jsp?whoami=Sale&formCondition=sa_id=" + id + "&gridCondition=sd_said=" + id;
  311. me.FormUtil.onAdd('Sale' + id, '销售单' + id, url);
  312. });
  313. }
  314. }
  315. });
  316. }
  317. });
  318. }
  319. }*/
  320. });
  321. },
  322. getForm: function(btn){
  323. return btn.ownerCt.ownerCt;
  324. },
  325. updateButton: function(type){
  326. var me = this;
  327. // var form = Ext.getCmp('form');
  328. if(type == 1){
  329. Ext.getCmp('rg_1').logic = '';
  330. Ext.getCmp('ta_1').logic = '';
  331. Ext.getCmp('tf_1').logic = '';
  332. Ext.getCmp('rg_2').logic = '';
  333. Ext.getCmp('ta_2').logic = '';
  334. Ext.getCmp('tf_2').logic = '';
  335. }
  336. if(type == 2){
  337. Ext.getCmp('rg_3').logic = '';
  338. Ext.getCmp('ta_3').logic = '';
  339. Ext.getCmp('tf_3').logic = '';
  340. Ext.getCmp('rg_4').logic = '';
  341. Ext.getCmp('ta_4').logic = '';
  342. Ext.getCmp('tf_4').logic = '';
  343. Ext.getCmp('tf_19').logic = '';
  344. Ext.getCmp('tf_20').logic = '';
  345. Ext.getCmp('tf_21').logic = '';
  346. Ext.getCmp('tf_22').logic = '';
  347. Ext.getCmp('tf_23').logic = '';
  348. Ext.getCmp('tf_24').logic = '';
  349. Ext.getCmp('tf_25').logic = '';
  350. Ext.getCmp('tf_26').logic = '';
  351. Ext.getCmp('tf_27').logic = '';
  352. Ext.getCmp('tf_28').logic = '';
  353. Ext.getCmp('tf_29').logic = '';
  354. Ext.getCmp('tf_30').logic = '';
  355. Ext.getCmp('tf_31').logic = '';
  356. Ext.getCmp('tf_32').logic = '';
  357. }
  358. if(type == 3){
  359. Ext.getCmp('rg_5').logic = '';
  360. Ext.getCmp('ta_5').logic = '';
  361. Ext.getCmp('tf_5').logic = '';
  362. }
  363. if(type == 4){
  364. Ext.getCmp('rg_6').logic = '';
  365. Ext.getCmp('ta_6').logic = '';
  366. Ext.getCmp('tf_6').logic = '';
  367. Ext.getCmp('rg_7').logic = '';
  368. Ext.getCmp('ta_7').logic = '';
  369. Ext.getCmp('tf_7').logic = '';
  370. Ext.getCmp('rg_8').logic = '';
  371. Ext.getCmp('ta_8').logic = '';
  372. Ext.getCmp('tf_8').logic = '';
  373. }
  374. if(type == 5){
  375. Ext.getCmp('rg_9').logic = '';
  376. Ext.getCmp('ta_9').logic = '';
  377. Ext.getCmp('tf_9').logic = '';
  378. Ext.getCmp('rg_10').logic = '';
  379. Ext.getCmp('ta_10').logic = '';
  380. Ext.getCmp('tf_10').logic = '';
  381. }
  382. if(type == 6){
  383. Ext.getCmp('rg_11').logic = '';
  384. Ext.getCmp('ta_11').logic = '';
  385. Ext.getCmp('tf_11').logic = '';
  386. Ext.getCmp('rg_12').logic = '';
  387. Ext.getCmp('ta_12').logic = '';
  388. Ext.getCmp('tf_12').logic = '';
  389. Ext.getCmp('rg_13').logic = '';
  390. Ext.getCmp('ta_13').logic = '';
  391. Ext.getCmp('tf_13').logic = '';
  392. }
  393. if(type == 7){
  394. Ext.getCmp('rg_14').logic = '';
  395. Ext.getCmp('ta_14').logic = '';
  396. Ext.getCmp('tf_14').logic = '';
  397. }
  398. if(type == 8){
  399. Ext.getCmp('rg_15').logic = '';
  400. Ext.getCmp('ta_15').logic = '';
  401. Ext.getCmp('tf_15').logic = '';
  402. }
  403. if(type == 9){
  404. Ext.getCmp('rg_16').logic = '';
  405. Ext.getCmp('ta_16').logic = '';
  406. Ext.getCmp('tf_16').logic = '';
  407. Ext.getCmp('rg_17').logic = '';
  408. Ext.getCmp('ta_17').logic = '';
  409. Ext.getCmp('tf_17').logic = '';
  410. }
  411. if(type == 10){
  412. Ext.getCmp('rg_18').logic = '';
  413. Ext.getCmp('ta_18').logic = '';
  414. Ext.getCmp('tf_18').logic = '';
  415. }
  416. this.FormUtil.onUpdate(this);
  417. },
  418. getOtherPreSaleValues: function () {
  419. var me = this;
  420. var form = Ext.getCmp('form');
  421. var param;
  422. if(formCondition && formCondition!= ''){
  423. var con = formCondition.split('=');
  424. if(con.length>1){
  425. param = {
  426. id : con[1]
  427. };
  428. }
  429. }
  430. Ext.Ajax.request({
  431. url : basePath + form.getOtherPreSaleValues,
  432. params : param,
  433. method : 'post',
  434. callback : function(options,success,response){
  435. var localJson = new Ext.decode(response.responseText);
  436. if(localJson.success){
  437. if(localJson.values){
  438. var vs = localJson.values.replace('{','');
  439. vs = vs.replace('}','');
  440. vs = vs.replace(/"/gi,"");
  441. var os =vs.split(',');
  442. Ext.each(os,function(o,index){
  443. var oo = o.split(':');
  444. var fi = Ext.getCmp(oo[0]);
  445. if(fi){
  446. if(fi.xtype == 'radiogroup'){
  447. var ob = new Object();
  448. ob[oo[0]] = oo[1];
  449. fi.setValue(ob);
  450. }else {
  451. fi.setValue(oo[1]);
  452. }
  453. }
  454. }
  455. );
  456. }
  457. } else if(localJson.exceptionInfo){
  458. } else{
  459. }
  460. }
  461. });
  462. },
  463. /**
  464. * 单据保存
  465. * @param param 传递过来的数据,比如gridpanel的数据
  466. */
  467. onSave: function(param){
  468. var me = this;
  469. var form = Ext.getCmp('form');
  470. if(form.getForm().isValid()){
  471. //form里面数据
  472. Ext.each(form.items.items, function(item){
  473. if(item.xtype == 'numberfield'){
  474. //number类型赋默认值,不然sql无法执行
  475. if(item.value == null || item.value == ''){
  476. item.setValue(0);
  477. }
  478. }
  479. });
  480. var r = form.getValues();
  481. //去除ignore字段
  482. var keys = Ext.Object.getKeys(r), f;
  483. var reg = /[!@#$%^&*()'":,\/?]/;
  484. Ext.each(keys, function(k){
  485. f = form.down('#' + k);
  486. if(f && f.logic == 'ignore') {
  487. delete r[k];
  488. }
  489. //codeField值强制大写,自动过滤特殊字符
  490. if(k == form.codeField && !Ext.isEmpty(r[k])) {
  491. r[k] = r[k].trim().toUpperCase().replace(reg, '');
  492. }
  493. });
  494. if(!me.FormUtil.contains(form.saveUrl, '?caller=', true)){
  495. form.saveUrl = form.saveUrl + "?caller=" + caller;
  496. }
  497. me.save(r, param);
  498. }else{
  499. me.FormUtil.checkForm();
  500. }
  501. },
  502. save: function(){
  503. var params = new Object();
  504. var r = arguments[0];
  505. Ext.each(Ext.Object.getKeys(r), function(k){//去掉页面非表单定义字段
  506. if(contains(k, 'ext-', true)){
  507. delete r[k];
  508. }
  509. });
  510. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  511. var me = this;
  512. var form = Ext.getCmp('form');
  513. me.FormUtil.setLoading(true);
  514. Ext.Ajax.request({
  515. url : basePath + form.saveUrl,
  516. params : params,
  517. method : 'post',
  518. callback : function(options,success,response){
  519. me.FormUtil.setLoading(false);
  520. var localJson = new Ext.decode(response.responseText);
  521. if(localJson.success){
  522. saveSuccess(function(){
  523. //add成功后刷新页面进入可编辑的页面
  524. var value = r[form.keyField];
  525. var formCondition = form.keyField + "IS" + value ;
  526. var gridCondition = '';
  527. if(me.FormUtil.contains(window.location.href, '?', true)){
  528. window.location.href = window.location.href + '&formCondition=' +
  529. formCondition + '&gridCondition=' + gridCondition;
  530. } else {
  531. window.location.href = window.location.href + '?formCondition=' +
  532. formCondition + '&gridCondition=' + gridCondition;
  533. }
  534. });
  535. } else if(localJson.exceptionInfo){
  536. var str = localJson.exceptionInfo;
  537. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
  538. str = str.replace('AFTERSUCCESS', '');
  539. saveSuccess(function(){
  540. //add成功后刷新页面进入可编辑的页面
  541. var value = r[form.keyField];
  542. var formCondition = form.keyField + "IS" + value ;
  543. var gridCondition = '';
  544. if(me.FormUtil.contains(window.location.href, '?', true)){
  545. window.location.href = window.location.href + '&formCondition=' +
  546. formCondition + '&gridCondition=' + gridCondition;
  547. } else {
  548. window.location.href = window.location.href + '?formCondition=' +
  549. formCondition + '&gridCondition=' + gridCondition;
  550. }
  551. });
  552. showError(str);
  553. } else {
  554. showError(str);
  555. return;
  556. }
  557. } else{
  558. saveFailure();//@i18n/i18n.js
  559. }
  560. }
  561. });
  562. },
  563. /**
  564. * 检查form未完善的字段
  565. */
  566. checkForm: function(){
  567. var s = '';
  568. var form = Ext.getCmp('form');
  569. form.getForm().getFields().each(function (item, index, length){
  570. if(!item.isValid()){
  571. if(s != ''){
  572. s += ',';
  573. }
  574. if(item.fieldLabel || item.ownerCt.fieldLabel){
  575. s += item.fieldLabel || item.ownerCt.fieldLabel;
  576. }
  577. }
  578. });
  579. if(s == ''){
  580. return true;
  581. }
  582. showError($I18N.common.form.necessaryInfo1 + '(<font color=green>' + s.replace(/&nbsp;/g,'') +
  583. '</font>)' + $I18N.common.form.necessaryInfo2);
  584. return false;
  585. },
  586. /**
  587. * 单据修改
  588. * @param form formpanel表
  589. * @param param 传递过来的数据,比如gridpanel的数据
  590. */
  591. onUpdate: function(me){
  592. var mm = this;
  593. var form = Ext.getCmp('form');
  594. // var s1 = mm.checkFormDirty(form);
  595. var s2 = '';
  596. var grids = Ext.ComponentQuery.query('gridpanel');
  597. var removea = new Array();
  598. Ext.each(grids,function(g,index){
  599. if(g.xtype=='itemgrid'){
  600. g.updateValue();
  601. removea.push(g);
  602. }
  603. });
  604. Ext.each(removea,function(r,index){
  605. Ext.Array.remove(grids,r);
  606. });
  607. if(grids.length > 0){//check所有grid是否已修改
  608. Ext.each(grids, function(grid, index){
  609. if(grid.GridUtil){
  610. var msg = grid.GridUtil.checkGridDirty(grid);
  611. if(msg.length > 0){
  612. s2 = s2 + '<br/>' + grid.GridUtil.checkGridDirty(grid);
  613. }
  614. }
  615. });
  616. }
  617. if(form && form.getForm().isValid()){
  618. //form里面数据
  619. var r = form.getValues(false, true);
  620. //去除ignore字段
  621. var keys = Ext.Object.getKeys(r), f;
  622. Ext.each(keys, function(k){
  623. f = form.down('#' + k);
  624. if(f && f.logic == 'ignore') {
  625. delete r[k];
  626. }
  627. });
  628. if(!mm.FormUtil.contains(form.updateUrl, '?caller=', true)){
  629. form.updateUrl = form.updateUrl + "?caller=" + caller;
  630. }
  631. var params = [];
  632. if(grids.length > 0){
  633. var param = grids[0].GridUtil.getGridStore();
  634. if(grids[0].necessaryField.length > 0 && (param == null || param == '')){
  635. warnMsg('明细表还未添加数据,是否继续?', function(btn){
  636. if(btn == 'yes'){
  637. params = unescape("[" + param.toString().replace(/\\/g,"%") + "]");
  638. } else {
  639. return;
  640. }
  641. });
  642. } else {
  643. params = unescape("[" + param.toString().replace(/\\/g,"%") + "]");
  644. }
  645. }
  646. mm.update(r, params);
  647. }else{
  648. mm.checkForm(form);
  649. }
  650. },
  651. update: function(){
  652. var me = this, params = new Object();
  653. var r = arguments[0];
  654. Ext.each(Ext.Object.getKeys(r), function(k){//去掉页面非表单定义字段
  655. if(contains(k, 'ext-', true)){
  656. delete r[k];
  657. }
  658. });
  659. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  660. params.param = unescape(arguments[1].toString().replace(/\\/g,"%"));
  661. for(var i=2; i<arguments.length; i++) { //兼容多参数
  662. params['param' + i] = unescape(arguments[i].toString().replace(/\\/g,"%"));
  663. }
  664. var form = Ext.getCmp('form');
  665. me.FormUtil.setLoading(true);//loading...
  666. Ext.Ajax.request({
  667. url : basePath + form.updateUrl,
  668. params: params,
  669. method : 'post',
  670. callback : function(options,success,response){
  671. me.FormUtil.setLoading(false);
  672. var localJson = new Ext.decode(response.responseText);
  673. if(localJson.success){
  674. showMessage('提示', '保存成功!', 1000);
  675. //update成功后刷新页面进入可编辑的页面
  676. var u = String(window.location.href);
  677. if (u.indexOf('formCondition') == -1) {
  678. var value = r[form.keyField];
  679. var formCondition = form.keyField + "IS" + value ;
  680. var gridCondition = '';
  681. var grid = Ext.getCmp('grid');
  682. if(grid && grid.mainField){
  683. gridCondition = grid.mainField + "IS" + value;
  684. }
  685. if(me.FormUtil.contains(window.location.href, '?', true)){
  686. window.location.href = window.location.href + '&formCondition=' +
  687. formCondition + '&gridCondition=' + gridCondition;
  688. } else {
  689. window.location.href = window.location.href + '?formCondition=' +
  690. formCondition + '&gridCondition=' + gridCondition;
  691. }
  692. } else {
  693. window.location.reload();
  694. }
  695. } else if(localJson.exceptionInfo){
  696. var str = localJson.exceptionInfo;
  697. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
  698. str = str.replace('AFTERSUCCESS', '');
  699. //update成功后刷新页面进入可编辑的页面
  700. var u = String(window.location.href);
  701. if (u.indexOf('formCondition') == -1) {
  702. var value = r[form.keyField];
  703. var formCondition = form.keyField + "IS" + value ;
  704. var gridCondition = '';
  705. var grid = Ext.getCmp('grid');
  706. if(grid && grid.mainField){
  707. gridCondition = grid.mainField + "IS" + value;
  708. }
  709. if(me.FormUtil.contains(window.location.href, '?', true)){
  710. window.location.href = window.location.href + '&formCondition=' +
  711. formCondition + '&gridCondition=' + gridCondition;
  712. } else {
  713. window.location.href = window.location.href + '?formCondition=' +
  714. formCondition + '&gridCondition=' + gridCondition;
  715. }
  716. } else {
  717. window.location.reload();
  718. }
  719. }
  720. showError(str);return;
  721. } else {
  722. updateFailure();
  723. }
  724. }
  725. });
  726. },
  727. /**
  728. * @param allowEmpty 是否允许Grid为空
  729. */
  730. onSubmit: function(id, allowEmpty){
  731. var me = this;
  732. var form = Ext.getCmp('form');
  733. if(form && form.getForm().isValid()){
  734. // var s = '';
  735. var grids = Ext.ComponentQuery.query('gridpanel');
  736. if(grids.length > 0){//check所有grid是否已修改
  737. var param = grids[0].GridUtil.getAllGridStore(grids[0]);
  738. if(grids[0].necessaryField && grids[0].necessaryField.length > 0 && (param == null || param == '') && (allowEmpty !== true)){
  739. showError("明细表还未添加数据,无法提交!");
  740. return;
  741. }
  742. Ext.each(grids, function(grid, index){
  743. if(grid.GridUtil){
  744. var msg = grid.GridUtil.checkGridDirty(grid);
  745. if(msg.length > 0){
  746. // s = s + '<br/>' + grid.GridUtil.checkGridDirty(grid);
  747. }
  748. }
  749. });
  750. }
  751. me.submit(id);
  752. // if(s == '' || s == '<br/>'){
  753. // me.submit(id);
  754. // } else {
  755. // Ext.MessageBox.show({
  756. // title:'保存修改?',
  757. // msg: '该单据已被修改:<br/>' + s + '<br/>提交前要先保存吗?',
  758. // buttons: Ext.Msg.YESNOCANCEL,
  759. // icon: Ext.Msg.WARNING,
  760. // fn: function(btn){
  761. // if(btn == 'yes'){
  762. // me.onUpdate(form);
  763. // } else if(btn == 'no'){
  764. // me.submit(id);
  765. // } else {
  766. // return;
  767. // }
  768. // }
  769. // });
  770. // }
  771. } else {
  772. me.checkForm();
  773. }
  774. },
  775. submit: function(id){
  776. var me = this;
  777. var form = Ext.getCmp('form');
  778. if(!me.FormUtil.contains(form.submitUrl, '?caller=', true)){
  779. form.submitUrl = form.submitUrl + "?caller=" + caller;
  780. }
  781. me.FormUtil.setLoading(true);//loading...
  782. Ext.Ajax.request({
  783. url : basePath + form.submitUrl,
  784. params: {
  785. id: id
  786. },
  787. method : 'post',
  788. callback : function(options,success,response){
  789. me.FormUtil.setLoading(false);
  790. var localJson = new Ext.decode(response.responseText);
  791. if(localJson.success){
  792. me.FormUtil.getMultiAssigns(id, caller,form);
  793. //submit成功后刷新页面进入可编辑的页面
  794. } else {
  795. if(localJson.exceptionInfo){
  796. var str = localJson.exceptionInfo;
  797. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
  798. str = str.replace('AFTERSUCCESS', '');
  799. me.FormUtil.getMultiAssigns(id, caller,form);
  800. }
  801. showMessage("提示", str);return;
  802. }
  803. }
  804. }
  805. });
  806. }
  807. });