SourceGrid.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. Ext.define('erp.view.pm.source.SourceGrid',{
  2. extend: 'Ext.grid.Panel',
  3. alias: 'widget.SourceGridPanel',
  4. id: 'grid',
  5. emptyText : $I18N.common.grid.emptyText,
  6. columnLines : true,
  7. autoScroll : true,
  8. height:height-26,//坑爹的样式
  9. layout : 'fit',
  10. multiselected: [],
  11. store: [],
  12. columns: [],
  13. GridUtil: Ext.create('erp.util.GridUtil'),
  14. BaseUtil: Ext.create('erp.util.BaseUtil'),
  15. plugins: [Ext.create('Ext.ux.grid.GridHeaderFilters')],
  16. headerCt: Ext.create("Ext.grid.header.Container"),
  17. invalidateScrollerOnRefresh: false,
  18. viewConfig: {
  19. trackOver: false
  20. },
  21. buffered: true,
  22. sync: true,
  23. selModel: Ext.create('Ext.selection.CheckboxModel',{
  24. ignoreRightMouseSelection : false,
  25. listeners:{
  26. selectionchange:function(selectionModel, selected, options){
  27. }
  28. },
  29. onRowMouseDown: function(view, record, item, index, e) {//改写的onRowMouseDown方法
  30. var me = Ext.getCmp('grid');
  31. var bool = true;
  32. var items = me.selModel.getSelection();
  33. Ext.each(items, function(item, index){
  34. if(this.index == record.index){
  35. bool = false;
  36. me.selModel.deselect(record);
  37. Ext.Array.remove(items, item);
  38. Ext.Array.remove(me.multiselected, record);
  39. }
  40. });
  41. Ext.each(me.multiselected, function(item, index){
  42. items.push(item);
  43. });
  44. me.selModel.select(items);
  45. if(bool){
  46. view.el.focus();
  47. var checkbox = item.childNodes[0].childNodes[0].childNodes[0];
  48. if(checkbox.getAttribute && checkbox.getAttribute('class') == 'x-grid-row-checker'){
  49. me.multiselected.push(record);
  50. items.push(record);
  51. me.selModel.select(items);
  52. } else {
  53. me.selModel.deselect(record);
  54. Ext.Array.remove(me.multiselected, record);
  55. }
  56. }
  57. },
  58. onHeaderClick: function(headerCt, header, e) {
  59. if (header.isCheckerHd) {
  60. e.stopEvent();
  61. var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
  62. if (isChecked) {
  63. this.deselectAll(true);
  64. var grid = Ext.getCmp('grid');
  65. this.deselect(grid.multiselected);
  66. grid.multiselected = new Array();
  67. var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements;
  68. Ext.each(els, function(el, index){
  69. el.setAttribute('class','x-grid-row-checker');
  70. });
  71. header.el.removeCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  72. } else {
  73. var grid = Ext.getCmp('grid');
  74. this.deselect(grid.multiselected);
  75. grid.multiselected = new Array();
  76. var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements;
  77. Ext.each(els, function(el, index){
  78. el.setAttribute('class','x-grid-row-checker');
  79. });
  80. this.selectAll(true);
  81. header.el.addCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  82. }
  83. }
  84. }
  85. }),
  86. initComponent : function(){
  87. caller='MRPSSaleM';
  88. this.getCount(caller, condition);
  89. this.callParent(arguments);
  90. },
  91. /*listeners:{
  92. scrollershow:function(scroller,orientation){
  93. if(scroller.dock=="bottom"){
  94. scroller.setPosition( 100,50,true );
  95. }
  96. }
  97. },*/
  98. getMultiSelected: function(){
  99. var grid = this;
  100. var items = grid.selModel.getSelection();
  101. Ext.each(items, function(item, index){
  102. grid.multiselected.push(item);
  103. });
  104. return this.unique(grid.multiselected);
  105. },
  106. unique: function(items) {
  107. var d = new Object();
  108. Ext.Array.each(items, function(item){
  109. d[item.id] = item;
  110. });
  111. return Ext.Object.getValues(d);
  112. },
  113. getFields: function(tn, fields, con){
  114. var des = '';
  115. Ext.Ajax.request({//拿到grid的columns
  116. url : basePath + "pm/bom/getFields.action",
  117. params: {
  118. tablename: tn,
  119. field: fields,
  120. condition: con
  121. },
  122. method : 'post',
  123. async: false,
  124. callback : function(options,success,response){
  125. var res = new Ext.decode(response.responseText);
  126. if(res.exceptionInfo){
  127. showError(res.exceptionInfo);return;
  128. }
  129. if(res.success && res.data != null){
  130. des = res.data;
  131. }
  132. }
  133. });
  134. return des;
  135. },
  136. getCount: function(caller, condition){
  137. var me = this;
  138. //condition
  139. var OrderKind=caller.indexOf("Sale") >0 ? 'SALE' :'FORECAST';
  140. var distinct=null;
  141. if(kind=='MDS'){
  142. condition=condition+" sd_id not in (select mdd_sdid from mdsdetail where mdd_orderkind='"+OrderKind+"' AND mdd_mainid="+keyValue+") ";
  143. }else {
  144. condition=condition+" sd_id not in (select md_sdid from mpsdetail where md_orderkind='"+OrderKind+"' AND md_mainid="+keyValue+") ";
  145. }
  146. var sourcecode = me.getFields("MPSMain","mm_sourcecode","mm_id="+keyValue);
  147. if (sourcecode && sourcecode!='' && sourcecode!=' ' && sourcecode!='ALL' && sourcecode!='全部' ){
  148. if(OrderKind=='SALE'){
  149. condition=condition+" and sa_cop='"+sourcecode+"' ";
  150. }else if(OrderKind=='FORECAST'){
  151. condition=condition+" and sf_cop='"+sourcecode+"' ";
  152. }
  153. }
  154. if(caller=='MRPSSaleM'){
  155. distinct="sa_code";
  156. }else if(caller=="MRPSForeCastM"){
  157. distinct="sf_code";
  158. }
  159. Ext.Ajax.request({//拿到grid的数据总数count
  160. url : basePath + 'pm/source/sourceCount.action',
  161. params: {
  162. caller: caller,
  163. condition: condition,
  164. distinct:distinct
  165. },
  166. method : 'post',
  167. callback : function(options,success,response){
  168. var res = new Ext.decode(response.responseText);
  169. if(res.exception || res.exceptionInfo){
  170. showError(res.exceptionInfo);
  171. return;
  172. }
  173. dataCount = res.count;
  174. Ext.getCmp('datacount').setValue('共 '+dataCount+' 条');
  175. me.getColumnsAndStore(caller, condition, page, pageSize);
  176. }
  177. });
  178. },
  179. getColumnsAndStore: function(caller, condition, page, pageSize){
  180. var me = this;
  181. me.BaseUtil.getActiveTab().setLoading(true);//loading...
  182. Ext.Ajax.request({//拿到grid的columns
  183. url : basePath + 'pm/source/source.action',
  184. params: {
  185. caller: caller,
  186. condition: condition,
  187. },
  188. method : 'post',
  189. callback : function(options,success,response){
  190. me.BaseUtil.getActiveTab().setLoading(false);
  191. var res = new Ext.decode(response.responseText);
  192. if(res.exception || res.exceptionInfo){
  193. showError(res.exceptionInfo);
  194. return;
  195. }
  196. var data = res.data != null ? Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')) : [];//一定要去掉多余逗号,ie对此很敏感
  197. var store = Ext.create('Ext.data.Store', {
  198. fields: res.fields,
  199. data: data
  200. });
  201. me.reconfigure(store, res.columns);
  202. var View = me.view;//grid 会往下隐藏几条记录
  203. if(View){
  204. var tableEl = View.el.child('.x-grid-table');
  205. if(tableEl){
  206. tableEl.dom.style.marginBottom = '307px';
  207. }
  208. }
  209. var grid=Ext.getCmp('grid');
  210. grid.setHeight(height);//不解释
  211. grid.getSelectionModel().deselectAll(true);//不解释
  212. grid.multiselected = new Array();
  213. }
  214. });
  215. },
  216. });