DetailGrid.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.ma.DetailGrid', {
  3. extend: 'Ext.app.Controller',
  4. GridUtil: Ext.create('erp.util.GridUtil'),
  5. BaseUtil: Ext.create('erp.util.BaseUtil'),
  6. FormUtil: Ext.create('erp.util.FormUtil'),
  7. views:[
  8. 'ma.DetailGrid','ma.MyDetail',
  9. 'core.button.DeleteDetail', 'core.button.DbfindButton','core.button.ComboButton',
  10. 'core.trigger.TextAreaTrigger','core.trigger.DbfindTrigger','core.toolbar.Toolbar','core.grid.YnColumn'
  11. ],
  12. init:function(){
  13. var me = this;
  14. this.control({
  15. 'erpDeleteDetailButton': {
  16. afterrender: function(btn){
  17. btn.ownerCt.add({
  18. xtype:'erpDbfindButton'
  19. });
  20. btn.ownerCt.add({
  21. xtype:'erpComboButton'
  22. });
  23. }
  24. },
  25. 'mydetail': {
  26. select: function(selModel, record){
  27. this.GridUtil.onGridItemClick(selModel, record);
  28. var grid = selModel.view.ownerCt.ownerCt;
  29. if(record&&record.data.dg_dbbutton != '0') {
  30. grid.down('erpDbfindButton').setDisabled(false);
  31. grid.down('erpComboButton').setDisabled(true);
  32. }else if(record && (record.data.dg_type == 'combo' || record.data.dg_type=='editcombo')) {
  33. grid.down('erpDbfindButton').setDisabled(true);
  34. grid.down('erpComboButton').setDisabled(false);
  35. }else {
  36. grid.down('erpComboButton').setDisabled(true);
  37. grid.down('erpDbfindButton').setDisabled(true);
  38. }
  39. }
  40. },
  41. /**
  42. * 下拉框设置
  43. */
  44. 'erpComboButton': {
  45. click: function(btn){
  46. var grid = Ext.getCmp('mydetail'), record = grid.selModel.lastSelected;
  47. if(record) {
  48. if(record.data.dg_type == 'combo' || record.data.dg_type =='editcombo')
  49. btn.comboSet((grid.whoami || record.data.dg_caller), record.data.dg_field);
  50. }
  51. }
  52. },
  53. /**
  54. * DBFind设置
  55. */
  56. 'erpDbfindButton': {
  57. click: function(btn){
  58. var grid = Ext.getCmp('mydetail'), record = grid.selModel.lastSelected;
  59. if(record) {
  60. btn.dbfindSetGrid((grid.whoami || record.data.dg_caller),grid, record.data.dg_field);
  61. }
  62. }
  63. },
  64. 'dbfindtrigger': {
  65. afterrender: function(t){
  66. t.autoDbfind = false;
  67. }
  68. },
  69. 'button[name=close]': {
  70. click: function(btn){
  71. me.FormUtil.beforeClose(me);
  72. }
  73. },
  74. 'button[name=save]': {
  75. click: function(btn){
  76. me.save();
  77. }
  78. }
  79. });
  80. },
  81. getForm: function(btn){
  82. return btn.ownerCt.ownerCt;
  83. },
  84. isUnique: function(grid, fieldName) {
  85. var keys = {}, key = null;
  86. grid.store.each(function(item){
  87. key = item.get(fieldName);
  88. if(item.get('deploy') && key) {
  89. key = key.toLowerCase();
  90. keys[key] = (keys[key] || 0) + 1;
  91. }
  92. });
  93. var fields = Ext.Object.getKeys(keys);
  94. var err = Ext.Array.filter(fields, function(field){
  95. return keys[field] > 1;
  96. });
  97. return err.join(',');
  98. },
  99. autoSetGridIgnore: function(item, dictionary) {
  100. if(item.get('deploy') && item.get('dg_field') && dictionary && !item.get('dg_logictype')) {
  101. var field = item.get('dg_field').toLowerCase();
  102. if (field.indexOf(" ")>0) {// column有取别名
  103. var strs = field.split(" ");
  104. field = strs[strs.length - 1];
  105. }
  106. var d = Ext.Array.filter(dictionary, function(i){
  107. return i.column_name == field;
  108. });
  109. if(d.length == 0)
  110. item.set('dg_logictype', 'ignore');
  111. }
  112. },
  113. save: function(){
  114. var me = this, isErr = false, isDefault = false;
  115. var detail =Ext.getCmp('mydetail');
  116. var items=detail.store.data.items ,table='',detno;
  117. Ext.each(items,function(item){
  118. if(item.data['deploy']==true){
  119. if(!detno){
  120. detno=item.data['dg_sequence'];
  121. table=item.data['dg_table'];
  122. }
  123. if(item.data['dg_sequence']<detno){
  124. detno=item.data['dg_sequence'];
  125. table=item.data['dg_table'];
  126. }
  127. }
  128. });
  129. var gridAdded = [], gridUpdated = [], gridDeleted = [];
  130. var err = me.isUnique(detail, "dg_field");
  131. if(err) {
  132. showError("字段重复:" + err);
  133. isErr = true;
  134. return;
  135. }
  136. if(isDefault){
  137. detail.store.each(function(item){
  138. me.autoSetGridIgnore(item, detail.dictionary);
  139. });
  140. }
  141. de = detail.getChange();
  142. gridAdded = Ext.Array.merge(gridAdded, de.added);
  143. gridUpdated = Ext.Array.merge(gridUpdated, de.updated);
  144. gridDeleted = Ext.Array.merge(gridDeleted, de.deleted);
  145. if (isErr)
  146. return;
  147. me.onSave(table,unescape(Ext.encode(gridAdded).toString()), unescape(Ext.encode(gridUpdated).toString()), unescape(Ext.encode(gridDeleted).toString()));
  148. },
  149. onSave: function(table, gridAdded, gridUpdated, gridDeleted){
  150. var me = this;
  151. me.FormUtil.setLoading(true);
  152. Ext.Ajax.request({
  153. url : basePath + 'ma/updateDetail.action',
  154. params: {
  155. table: table,
  156. gridAdded: gridAdded,
  157. gridUpdated: gridUpdated,
  158. gridDeleted: gridDeleted
  159. },
  160. method : 'post',
  161. callback : function(opt, s, res){
  162. me.FormUtil.setLoading(false);
  163. var rs = new Ext.decode(res.responseText);
  164. if(rs.success){
  165. showMessage('提示', '保存成功!', 1000);
  166. window.location.reload();
  167. } else if(rs.exceptionInfo){
  168. var str = rs.exceptionInfo;
  169. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){
  170. str = str.replace('AFTERSUCCESS', '');
  171. window.location.reload();
  172. }
  173. showError(str);return;
  174. } else {
  175. showMessage('提示', '保存失败!');
  176. }
  177. }
  178. });
  179. }
  180. });