PreSale.js 27 KB

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