UpdateScheme.js 18 KB

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