SourceGrid.js 8.8 KB

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