UpdateScheme.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.ma.update.UpdateScheme', {
  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. views:[
  8. 'core.form.Panel','core.grid.Panel2','ma.update.UpdateScheme','core.trigger.AddDbfindTrigger','ma.update.UpdateSchemeTree','core.trigger.MultiDbfindTrigger',
  9. 'core.button.Save','core.button.Add','core.button.Delete','core.button.Update','core.trigger.SearchField','core.button.HistoryUpdate','core.button.Sync', 'core.grid.TfColumn',
  10. 'core.grid.YnColumn'
  11. ],
  12. init:function(){
  13. var me = this;
  14. this.flag = true;
  15. this.control({
  16. 'field[name=empnames_]':{
  17. afterrender:function(f){
  18. Ext.apply(f, {
  19. extend: 'Ext.form.field.Trigger',
  20. triggerCls: 'x-form-search-trigger',
  21. selecteddata:new Array(),
  22. initComponent: function() {
  23. this.addEvents({
  24. aftertrigger: true,
  25. beforetrigger: true
  26. });
  27. this.callParent(arguments);
  28. },
  29. onTriggerClick: function() {
  30. var dbwin=Ext.getCmp('empwin');
  31. if(dbwin){
  32. return;
  33. }else{
  34. dbwin=me.createWin();
  35. dbwin.show();
  36. }
  37. }
  38. });
  39. }
  40. },
  41. 'erpGridPanel2':{
  42. reconfigure:function(){
  43. var id=Ext.getCmp('id_').value;
  44. if(id){
  45. var grid=Ext.getCmp('grid');
  46. grid.getSelectionModel().selectAll();
  47. this.getOtherData(id);
  48. }
  49. },
  50. storeloaded:function(){
  51. var grid=Ext.getCmp('grid');
  52. grid.getSelectionModel().selectAll();
  53. }
  54. },
  55. 'upstreepanel':{
  56. itemmousedown:function(selModel, record){
  57. if (!this.flag) {
  58. return;
  59. }
  60. this.flag = false;
  61. setTimeout(function() {
  62. me.flag = true;
  63. me.loadData(selModel, record);
  64. }, 20);
  65. }
  66. },
  67. 'erpHistoryUpdateButton':{
  68. afterrender:function(b){
  69. if(!Ext.getCmp('id_').value){
  70. b.hide();
  71. }
  72. },
  73. click: function(btn){
  74. var id=Ext.getCmp('id_').value;
  75. var w = Ext.create('Ext.Window', {
  76. width: '60%',
  77. height: '80%',
  78. id: 'history-win',
  79. title: '更新数据历史记录',
  80. autoShow: true,
  81. layout: 'anchor',
  82. items: [{
  83. xtype: 'gridpanel',
  84. anchor: '100% 100%',
  85. columnLines: true,
  86. columns: [{dataIndex: 'ul_id', hidden: true},{dataIndex: 'ul_usid', hidden: true},
  87. {dataIndex: 'ul_man', text: '更新人编号', flex: 1},
  88. {dataIndex: 'ul_date', text: '日期', flex: 2},
  89. {dataIndex: 'ul_count', text: '数据量(条)', flex: 1},
  90. {dataIndex: 'ul_checked', text: '是否校验通过', flex: 1, renderer: function(val, m){
  91. if(val == '否') {
  92. m.style = 'float:right';
  93. }
  94. return val;
  95. }}, {dataIndex: 'ul_success', text: '是否更新成功', flex: 1, renderer: function(val, m){
  96. if(val == '否') {
  97. m.style = 'float:right';
  98. }
  99. return val;
  100. }}],
  101. store: Ext.create('Ext.data.Store', {
  102. fields: ['ul_id', 'ul_usid', 'ul_man', 'ul_date', 'ul_count', 'ul_checked', 'ul_success'],
  103. data: [{},{},{},{},{},{},{},{}]
  104. })
  105. }]
  106. });
  107. me.getUpdateLog(w.down('gridpanel'),id);
  108. }
  109. },
  110. 'erpUpdateButton': {
  111. afterrender:function(b){
  112. if(!Ext.getCmp('id_').value){
  113. b.hide();
  114. }
  115. },
  116. click: function(btn){
  117. this.onUpdate(this);
  118. }
  119. },
  120. 'erpDeleteButton': {
  121. afterrender:function(b){
  122. if(!Ext.getCmp('id_').value){
  123. b.hide();
  124. }
  125. },
  126. click: function(btn){
  127. me.onDelete(Ext.getCmp('id_').value);
  128. }
  129. },
  130. 'erpSyncButton': {
  131. afterrender:function(b){
  132. if(!Ext.getCmp('id_').value){
  133. b.hide();
  134. }
  135. }
  136. },
  137. 'erpAddButton': {
  138. afterrender:function(b){
  139. if(!Ext.getCmp('id_').value){
  140. b.hide();
  141. }
  142. },
  143. click: function(){
  144. var form=Ext.getCmp('form');
  145. Ext.each(form.items.items,function(item){
  146. item.setValue("");
  147. });
  148. var grid=Ext.getCmp('grid');
  149. grid.store.removeAll();
  150. me.GridUtil.add10EmptyItems(grid,40);
  151. Ext.getCmp('addbtn').hide();
  152. Ext.getCmp('deletebutton').hide();
  153. Ext.getCmp('save').show();
  154. Ext.getCmp('syncbtn').hide();
  155. Ext.getCmp('updatebutton').hide();
  156. Ext.getCmp('historyupdate').hide();
  157. }
  158. },
  159. 'erpSaveButton': {
  160. afterrender:function(b){
  161. if(Ext.getCmp('id_').value){
  162. b.hide();
  163. }
  164. },
  165. click: function(btn){
  166. //保存之前的一些前台的逻辑判定
  167. this.beforeSave(this);
  168. }
  169. },
  170. 'field[name=indexfields_]': {
  171. afterrender:function(trigger){
  172. trigger.dbKey='table_';
  173. trigger.mappingKey='table_name';
  174. trigger.dbMessage='请先选择更新表';
  175. }
  176. },
  177. 'dbfindtrigger[name=table_]':{
  178. aftertrigger:function(trigger){
  179. var grid = Ext.getCmp('grid');
  180. var table=trigger.value;
  181. Ext.Ajax.request({//查询数据
  182. url : basePath + '/ma/getColumns.action',
  183. params:{
  184. tablename:table
  185. },
  186. callback : function(options,success,response){
  187. var res = new Ext.decode(response.responseText);
  188. var count=0;
  189. if(res.data){
  190. var store = grid.store;
  191. var arr=res.data;
  192. store.loadData(arr, false);
  193. var i = 0;
  194. store.each(function(item, x){
  195. if(item.index) {
  196. i = item.index;
  197. } else {
  198. if (i) {
  199. item.index = i++;
  200. } else {
  201. item.index = x;
  202. }
  203. }
  204. });
  205. } else if(res.exceptionInfo){
  206. showError(res.exceptionInfo);
  207. }
  208. }
  209. });
  210. }
  211. }
  212. });
  213. },
  214. beforeSave:function(){
  215. var me = this;
  216. var form = Ext.getCmp('form');
  217. if(!me.FormUtil.checkForm()){
  218. return;
  219. }
  220. if(Ext.getCmp(form.keyField).value == null || Ext.getCmp(form.keyField).value == ''){
  221. me.FormUtil.getSeqId(form);
  222. }
  223. var grid = Ext.getCmp('grid');
  224. var jsonGridData = new Array();
  225. if(grid) {
  226. var items=grid.store.data.items;
  227. var flag=0;
  228. Ext.Array.each(items,function(item,index){//数据顺序是否变化
  229. if(item.data.checked_!=0||item.data.checked_==true){
  230. if(item.data.detno_!=(index+1)){
  231. flag=1;
  232. }
  233. }
  234. });
  235. var i=1,j=0,jsonGridData=new Array(),s=new Array();
  236. Ext.Array.each(items,function(item,index){
  237. if(item.dirty){
  238. j++;
  239. }
  240. if(item.data.checked_!=0||item.data.checked_==true){
  241. item.data.detno_=i;
  242. item.data.checked_=1;
  243. s.push(item.data);
  244. i++;
  245. }
  246. });
  247. if(i==1){
  248. showError('请勾选明细行');return;
  249. }else{
  250. for(var i=0;i<s.length;i++){//将grid里面各行的数据获取并拼成jsonGridData
  251. var data = s[i];
  252. dd = new Object();
  253. Ext.each(grid.columns, function(c){
  254. if((!c.isCheckerHd)&&(c.logic != 'ignore') && c.dataIndex){//只需显示,无需后台操作的字段,自动略去
  255. if(c.xtype == 'numbercolumn'){//赋个默认值0吧,不然不好保存
  256. //console.log(c.dataIndex);
  257. if(data[c.dataIndex] == null || data[c.dataIndex] == '' || String(data[c.dataIndex]) == 'NaN'){
  258. dd[c.dataIndex] = '0';//也可以从data里面去掉这些字段
  259. } else {
  260. dd[c.dataIndex] = "" + s[i][c.dataIndex];
  261. }
  262. } else {
  263. dd[c.dataIndex] = s[i][c.dataIndex];
  264. }
  265. if (c.defaultValue && (dd[c.dataIndex] == null || dd[c.dataIndex] == '0')) {
  266. dd[c.dataIndex] = c.defaultValue;
  267. }
  268. }
  269. });
  270. if(grid.mainField && form && form.keyField){//例如,将pu_id的值赋给pd_puid
  271. dd[grid.mainField] = Ext.getCmp(form.keyField).value;
  272. }
  273. jsonGridData.push(Ext.JSON.encode(dd));
  274. }
  275. }
  276. }
  277. param1 = jsonGridData == null ? [] : "[" + jsonGridData.toString().replace(/\\/g,"%") + "]";
  278. if(form.getForm().isValid()){
  279. Ext.each(form.items.items, function(item){
  280. if(item.xtype == 'numberfield'){
  281. if(item.value == null || item.value == ''){
  282. item.setValue(0);
  283. }
  284. }
  285. });
  286. var r = form.getValues();
  287. me.save(r, param1);
  288. }else{
  289. me.FormUtil.checkForm();
  290. }
  291. },
  292. save:function(){
  293. var params = new Object();
  294. var r = arguments[0];
  295. Ext.each(Ext.Object.getKeys(r), function(k){//去掉页面非表单定义字段
  296. if(contains(k, 'ext-', true)){
  297. delete r[k];
  298. }
  299. });
  300. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  301. params.param = unescape(arguments[1].toString().replace(/\\/g,"%"));
  302. var me = this;
  303. var form = Ext.getCmp('form'),url = form.saveUrl;
  304. if(url.indexOf('caller=') == -1){
  305. url = url + "?caller=" + caller;
  306. };
  307. Ext.Ajax.request({
  308. url : basePath + url,
  309. params : params,
  310. method : 'post',
  311. callback : function(options,success,response){
  312. var localJson = new Ext.decode(response.responseText);
  313. if(localJson.success){
  314. saveSuccess(function(){
  315. //add成功后刷新页面进入可编辑的页面
  316. var value =r[form.keyField];
  317. window.location.href =basePath+'jsps/ma/update/updateScheme.jsp?formCondition=id_IS' + value+ '&gridCondition=Scheme_Id_IS'+value;
  318. });
  319. } else if(localJson.exceptionInfo){
  320. var str = localJson.exceptionInfo;
  321. showError(str);
  322. return;
  323. } else{
  324. saveFailure();//@i18n/i18n.js
  325. }
  326. }
  327. });
  328. },
  329. loadData: function(selModel, record) {
  330. me=this;
  331. var form=Ext.getCmp('form');
  332. var grid = Ext.getCmp('grid');
  333. var id=record.data['id'];
  334. Ext.Ajax.request({//查询数据
  335. url : basePath + '/ma/getUpdateScheme.action',
  336. params:{
  337. id:id
  338. },
  339. callback : function(options,success,response){
  340. var res = new Ext.decode(response.responseText);
  341. if(res.success){
  342. if(res.data){
  343. var formdata=res.data.formdata;
  344. var griddata=Ext.decode(res.data.griddata);
  345. var d = Ext.decode(formdata);
  346. form.getForm().setValues(d);
  347. grid.store.loadData(griddata);
  348. grid.fireEvent('storeloaded', grid, griddata);
  349. if(res.data.otherdatas){
  350. var store = grid.store;
  351. var arr=res.data.otherdatas;
  352. store.loadData(arr, true);
  353. var i = 0;
  354. store.each(function(item, x){
  355. if(item.index) {
  356. i = item.index;
  357. } else {
  358. if (i) {
  359. item.index = i++;
  360. } else {
  361. item.index = x;
  362. }
  363. }
  364. });
  365. }
  366. Ext.getCmp('addbtn').show();
  367. Ext.getCmp('deletebutton').show();
  368. Ext.getCmp('save').hide();
  369. Ext.getCmp('updatebutton').show();
  370. Ext.getCmp('syncbtn').show();
  371. Ext.getCmp('historyupdate').show();
  372. var w=Ext.getCmp('history-win');
  373. if(w){
  374. var id=Ext.getCmp('id_').value;
  375. me.getUpdateLog(w.down('gridpanel'),id);
  376. }
  377. }
  378. } else if(res.exceptionInfo){
  379. showError(res.exceptionInfo);
  380. }
  381. }
  382. });
  383. },
  384. onUpdate: function(){
  385. var me = this;
  386. var form = Ext.getCmp('form');
  387. var s1=me.FormUtil.checkFormDirty(form);
  388. if(!me.FormUtil.checkForm){
  389. return;
  390. }
  391. if(Ext.getCmp(form.keyField).value == null || Ext.getCmp(form.keyField).value == ''){
  392. me.FormUtil.getSeqId(form);
  393. }
  394. var grid = Ext.getCmp('grid');
  395. console.log(grid.store);
  396. var jsonGridData = new Array();
  397. if(grid) {
  398. console.log(grid.store);
  399. var items=grid.store.data.items;
  400. var flag=0;
  401. Ext.Array.each(items,function(item,index){//数据是否变化位置
  402. if(item.data.checked_!=0||item.data.checked_==true){
  403. if(item.data.detno_!=(index+1)){
  404. flag=1;
  405. }
  406. }
  407. });
  408. var i=1,j=0,jsonGridData=new Array(),s=new Array();
  409. Ext.Array.each(items,function(item,index){
  410. if(item.dirty){
  411. j++;
  412. }
  413. if(item.data.checked_!=0||item.data.checked_==true){
  414. item.data.detno_=i;
  415. item.data.checked_=1;
  416. s.push(item.data);
  417. i++;
  418. }
  419. });
  420. console.log(s);console.log(flag);
  421. if(s1==''&&j==0&&flag==0){
  422. showError('未更改数据');return;
  423. }else if(i==1){
  424. showError('请勾选明细行');return;
  425. }else{
  426. for(var i=0;i<s.length;i++){//将grid里面各行的数据获取并拼成jsonGridData
  427. var data = s[i];
  428. dd = new Object();
  429. Ext.each(grid.columns, function(c){
  430. if((!c.isCheckerHd)&&(c.logic != 'ignore') && c.dataIndex){//只需显示,无需后台操作的字段,自动略去
  431. if(c.xtype == 'numbercolumn'){//赋个默认值0吧,不然不好保存
  432. //console.log(c.dataIndex);
  433. if(data[c.dataIndex] == null || data[c.dataIndex] == '' || String(data[c.dataIndex]) == 'NaN'){
  434. dd[c.dataIndex] = '0';//也可以从data里面去掉这些字段
  435. } else {
  436. dd[c.dataIndex] = "" + s[i][c.dataIndex];
  437. }
  438. } else {
  439. dd[c.dataIndex] = s[i][c.dataIndex];
  440. }
  441. if (c.defaultValue && (dd[c.dataIndex] == null || dd[c.dataIndex] == '0')) {
  442. dd[c.dataIndex] = c.defaultValue;
  443. }
  444. }
  445. });
  446. if(grid.mainField && form && form.keyField){//例如,将pu_id的值赋给pd_puid
  447. dd[grid.mainField] = Ext.getCmp(form.keyField).value;
  448. }
  449. console.log(dd);
  450. jsonGridData.push(Ext.JSON.encode(dd));
  451. }
  452. }
  453. console.log(jsonGridData);
  454. }
  455. param = jsonGridData == null ? [] : "[" + jsonGridData.toString().replace(/\\/g,"%") + "]";
  456. if(form.getForm().isValid()){
  457. Ext.each(form.items.items, function(item){
  458. if(item.xtype == 'numberfield'){
  459. if(item.value == null || item.value == ''){
  460. item.setValue(0);
  461. }
  462. }
  463. });
  464. var r = form.getValues();
  465. me.update(r, param);
  466. }else{
  467. me.FormUtil.checkForm();
  468. }
  469. },
  470. update:function(){
  471. var params = new Object();
  472. var r = arguments[0];
  473. Ext.each(Ext.Object.getKeys(r), function(k){//去掉页面非表单定义字段
  474. if(contains(k, 'ext-', true)){
  475. delete r[k];
  476. }
  477. });
  478. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  479. params.param = unescape(arguments[1].toString().replace(/\\/g,"%"));
  480. var me = this;
  481. var form = Ext.getCmp('form') ,url = form.updateUrl;
  482. if(url.indexOf('caller=') == -1){
  483. url = url + "?caller=" + caller;
  484. };
  485. console.log(params);
  486. Ext.Ajax.request({
  487. url : basePath + url,
  488. params : params,
  489. method : 'post',
  490. callback : function(options,success,response){
  491. var localJson = new Ext.decode(response.responseText);
  492. if(localJson.success){
  493. showMessage('提示', '更新成功!', 1000);
  494. //update成功后刷新页面进入可编辑的页面
  495. var u = String(window.location.href);
  496. var value = r[form.keyField];
  497. window.location.href =basePath+'jsps/ma/update/updateScheme.jsp?formCondition=id_IS' + value+ '&gridCondition=Scheme_Id_IS'+value;
  498. } else if(localJson.exceptionInfo){
  499. var str = localJson.exceptionInfo;
  500. showError(str);
  501. return;
  502. } else{
  503. saveFailure();//@i18n/i18n.js
  504. }
  505. }
  506. });
  507. },
  508. getOtherData: function(id){
  509. var me = this;
  510. var grid=Ext.getCmp('grid');
  511. Ext.Ajax.request({
  512. url : basePath + 'ma/getOtherData.action',
  513. async: false,
  514. params: {
  515. id:id
  516. },
  517. method : 'post',
  518. callback : function(options,success,response){
  519. var res = new Ext.decode(response.responseText);
  520. if(res.exceptionInfo){
  521. showError(res.exceptionInfo);return;
  522. } else if(res.success) {
  523. if(res.data){
  524. var store = grid.store;
  525. var arr=res.data;
  526. store.loadData(arr, true);
  527. var i = 0;
  528. store.each(function(item, x){
  529. if(item.index) {
  530. i = item.index;
  531. } else {
  532. if (i) {
  533. item.index = i++;
  534. } else {
  535. item.index = x;
  536. }
  537. }
  538. });
  539. }
  540. }
  541. }
  542. });
  543. },
  544. getUpdateLog: function(g,id){
  545. Ext.Ajax.request({
  546. url: basePath + 'ma/update/updateHistory.action',
  547. params: {
  548. id: id
  549. },
  550. method: 'post',
  551. callback: function(opt, s, r){
  552. var res = new Ext.decode(r.responseText);
  553. var dd = res.data;
  554. Ext.each(dd, function(d){
  555. d.ul_date = Ext.Date.format(new Date(d.ul_date), 'Y-m-d H:i:s');
  556. d.ul_checked = d.ul_checked == 1 ? '是' : '否';
  557. d.ul_success = d.ul_success == 1 ? '是' : '否';
  558. });
  559. g.store.loadData(dd);
  560. }
  561. });
  562. },
  563. onDelete: function(id){
  564. var me = this;
  565. warnMsg($I18N.common.msg.ask_del_main, function(btn){
  566. if(btn == 'yes'){
  567. var form = Ext.getCmp('form'),url = form.deleteUrl;
  568. if(url.indexOf('caller=') == -1){
  569. url = url + "?caller=" + caller;
  570. };
  571. form.setLoading(true);
  572. Ext.Ajax.request({
  573. url : basePath + url,
  574. params: {
  575. id: id
  576. },
  577. method : 'post',
  578. callback : function(options,success,response){
  579. form.setLoading(false);
  580. var localJson = new Ext.decode(response.responseText);
  581. if(localJson.exceptionInfo){
  582. showError(localJson.exceptionInfo);return;
  583. }
  584. if(localJson.success){
  585. window.location.href =basePath+'jsps/ma/update/updateScheme.jsp';
  586. } else {
  587. delFailure();
  588. }
  589. }
  590. });
  591. }
  592. });
  593. },
  594. confirm:function(){
  595. var win=Ext.getCmp('empwin');
  596. var select=Ext.getCmp('empnames_').selecteddata;
  597. if(select.length==0){
  598. showError('未选择数据');
  599. }else{
  600. var codes='',names='';
  601. Ext.each(select,function(s){
  602. codes+=s.em_code+"#";
  603. names+=s.em_name+"#";
  604. });
  605. Ext.getCmp('emps_').setValue(codes.substring(0,codes.length-1));
  606. Ext.getCmp('empnames_').setValue(names.substring(0,names.length-1));
  607. win.close();
  608. }
  609. },
  610. createWin: function() {
  611. var me=this;
  612. var dbwin = new Ext.window.Window({
  613. title: '查找',
  614. height: "100%",
  615. width: "90%",
  616. maximizable : true,
  617. buttonAlign : 'center',
  618. layout : 'anchor',
  619. id:'empwin',
  620. //resizable:false,
  621. items: [{
  622. tag : 'iframe',
  623. frame : true,
  624. anchor : '100% 100%',
  625. layout : 'fit',
  626. html : '<iframe id="iframe_empdbfind" src="'+basePath+'jsps/ma/update/empdbfind.jsp" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>'
  627. }],
  628. buttons : [{
  629. text : '确认',
  630. iconCls: 'x-button-icon-save',
  631. cls: 'x-btn-gray',
  632. handler : function(b){
  633. me.confirm();
  634. }
  635. },{
  636. text : '关 闭',
  637. iconCls: 'x-button-icon-close',
  638. cls: 'x-btn-gray',
  639. handler : function(b){
  640. b.ownerCt.ownerCt.close();
  641. }
  642. }]
  643. });
  644. return dbwin;
  645. }
  646. });