MRPOnHandThrowGrid.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. Ext.define('erp.view.pm.mps.MRPOnHandThrow.MRPOnHandThrowGrid',{
  2. extend: 'Ext.grid.Panel',
  3. alias: 'widget.erpBatchDealGridPanel',
  4. requires: ['erp.view.core.grid.HeaderFilter', 'erp.view.core.plugin.CopyPasteMenu'],
  5. id: 'batchDealGridPanel',
  6. emptyText : $I18N.common.grid.emptyText,
  7. columnLines : true,
  8. autoScroll : true,
  9. multiselected: [],
  10. store: [],
  11. columns: [],
  12. bodyStyle: 'background-color:#f1f1f1;',
  13. headerCt: Ext.create("Ext.grid.header.Container"),
  14. invalidateScrollerOnRefresh: false,
  15. viewConfig: {
  16. trackOver: false
  17. },
  18. headerCt: Ext.create("Ext.grid.header.Container",{
  19. forceFit: false,
  20. sortable: true,
  21. enableColumnMove:true,
  22. enableColumnResize:true,
  23. enableColumnHide: true
  24. }),
  25. dockedItems: [{
  26. xtype: 'toolbar',
  27. items:[{
  28. xtype: 'tbtext',
  29. id: 'storeCount',
  30. tpl: '筛选结果: {count}条'
  31. },'-',{
  32. xtype:'erpGetB2CProductKindButton'
  33. }, '->', {
  34. xtype: 'tbtext',
  35. id: 'selectedCount',
  36. tpl: '已选择: {count}条'
  37. }],
  38. dock: 'bottom'
  39. }],
  40. sync: true,
  41. plugins: [Ext.create('erp.view.core.grid.HeaderFilter', {
  42. remoteFilter: true
  43. }),
  44. Ext.create('Ext.grid.plugin.CellEditing', {
  45. clicksToEdit: 1,
  46. listeners:{
  47. 'edit':function(editor,e,Opts){
  48. }
  49. }
  50. }), Ext.create('erp.view.core.plugin.CopyPasteMenu')],
  51. features : [Ext.create('Ext.grid.feature.Grouping',{
  52. //startCollapsed: true,
  53. hideGroupedHeader: true,
  54. groupHeaderTpl: '{name} (Count:{rows.length})'
  55. }),{
  56. ftype : 'summary',
  57. showSummaryRow : false,//不显示默认合计行
  58. generateSummaryData: function(){
  59. var me = this,
  60. data = {},
  61. store = me.view.store,
  62. columns = me.view.headerCt.getColumnsForTpl(),
  63. i = 0,
  64. length = columns.length,
  65. comp;
  66. for (i = 0, length = columns.length; i < length; ++i) {
  67. comp = Ext.getCmp(columns[i].id);
  68. data[comp.id] = me.getSummary(store, comp.summaryType, comp.dataIndex, false);
  69. var tb = Ext.getCmp(columns[i].dataIndex + '_' + comp.summaryType);
  70. if(tb){
  71. tb.setText(tb.text.split(':')[0] + ':' + data[comp.id]);
  72. }
  73. }
  74. return data;
  75. }
  76. }],
  77. selModel: Ext.create('Ext.selection.CheckboxModel',{
  78. ignoreRightMouseSelection : false,
  79. checkOnly: true,
  80. listeners:{
  81. selectionchange:function(selModel, selected, options){
  82. var grid = selModel.view.ownerCt;
  83. grid.down('#selectedCount').update({
  84. count: selected.length
  85. });
  86. },
  87. select:function(row,record,index){
  88. var grid = row.view.ownerCt;
  89. //if(!Ext.Array.contains(grid.multiselected,record)){
  90. grid.multiselected.push(record);
  91. // }
  92. },
  93. deselect:function(row,record,index){
  94. var grid = row.view.ownerCt;
  95. Ext.Array.remove(grid.multiselected, record);
  96. }
  97. },
  98. getEditor: function(){
  99. return null;
  100. }
  101. }),
  102. maxDataSize: 3000,
  103. initComponent : function(){
  104. this.GridUtil = Ext.create('erp.util.GridUtil');
  105. this.BaseUtil = Ext.create('erp.util.BaseUtil');
  106. this.RenderUtil = Ext.create('erp.util.RenderUtil');
  107. condition = this.BaseUtil.getUrlParam('urlcondition');
  108. condition = (condition == null) ? "" : condition;
  109. condition = condition.replace(/@/,"'%").replace(/@/,"%'");
  110. this.defaultCondition = condition;
  111. var gridParam = {caller: caller, condition: '',start:1,end:1000};
  112. this.GridUtil.getGridColumnsAndStore(this, 'common/singleGridPanel.action?', gridParam, "");
  113. this.callParent(arguments);
  114. },
  115. getMultiSelected: function(){
  116. var grid = this;
  117. grid.multiselected = [];
  118. var items = grid.selModel.getSelection();
  119. Ext.each(items, function(item, index){
  120. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  121. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  122. grid.multiselected.push(item);
  123. }
  124. });
  125. return Ext.Array.unique(grid.multiselected);
  126. },
  127. /**
  128. * 修改为selection改变时,summary也动态改变
  129. */
  130. summary: function(selected){
  131. var me = this,
  132. store = this.store,
  133. items = selected || store.data.items,
  134. value;
  135. Ext.each(me.columns, function(c){
  136. if(c.summaryType == 'sum'){
  137. value = store.getSum(c.dataIndex);
  138. me.down('tbtext[id=' + c.dataIndex + '_sum]').setText(c.header + '(sum):' + value);
  139. } else if(c.summaryType == 'count'){
  140. value = items.length;
  141. me.down('tbtext[id=' + c.dataIndex + '_count]').setText(c.header + '(count):' + value);
  142. } else if(c.summaryType == 'average'){
  143. value = store.getAverage(c.dataIndex);
  144. me.down('tbtext[id=' + c.dataIndex + '_average]').setText(c.header + '(average):' + value);
  145. }
  146. });
  147. },
  148. listeners: {
  149. 'headerfiltersapply': function(grid, filters) {
  150. if(this.allowFilter){
  151. var condition = null;
  152. for(var fn in filters){
  153. var value = filters[fn],f = grid.getHeaderFilterField(fn);
  154. if(!Ext.isEmpty(value)){
  155. if(f.filtertype) {
  156. if (f.filtertype == 'numberfield') {
  157. value = fn + "=" + value + " ";
  158. }
  159. } else {
  160. if(Ext.isDate(value)){
  161. value = Ext.Date.toString(value);
  162. value = fn + "=to_date('" + value + "','yyyy-MM-dd') ";
  163. } else {
  164. var exp_t = /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/,
  165. exp_d = /^(\d{4})\-(\d{2})\-(\d{2})$/;
  166. if(exp_d.test(value)){
  167. value = fn + "=to_date('" + value + "','yyyy-MM-dd') ";
  168. } else if(exp_t.test(value)){
  169. value = fn + "=to_date('" + value + "','yyyy-MM-dd HH24:mi:ss') ";
  170. } else{
  171. value = fn + " LIKE '%" + value + "%' ";
  172. }
  173. }
  174. }
  175. if(condition == null){
  176. condition = value;
  177. } else {
  178. condition = condition + " AND " + value;
  179. }
  180. }
  181. }
  182. this.filterCondition = condition;
  183. var QueryCondition=Ext.getCmp('dealform').getCondition();
  184. QueryCondition=QueryCondition!=""&&QueryCondition!=null?
  185. QueryCondition+(grid.defaultCondition!=""&&grid.defaultCondition!=null?" AND "+grid.defaultCondition:""):grid.defaultCondition;
  186. if(QueryCondition!=""&&QueryCondition!=null){
  187. QueryCondition= this.filterCondition!=""&&this.filterCondition!=null?QueryCondition+" AND "+this.filterCondition:QueryCondition;
  188. }else{
  189. QueryCondition= this.filterCondition!=""&&this.filterCondition!=null?this.filterCondition:QueryCondition;
  190. }
  191. this.GridUtil.loadNewStore(grid,{caller:caller,condition:QueryCondition, start: 1, end: 3000});
  192. } else {
  193. this.allowFilter = true;
  194. }
  195. return false;
  196. },
  197. scrollershow: function(scroller) {
  198. if (scroller && scroller.scrollEl) {
  199. scroller.clearManagedListeners();
  200. scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller);
  201. }
  202. }
  203. },
  204. reconfigure: function(store, columns){
  205. //改写reconfigure方法
  206. var d = this.headerCt;
  207. if (this.columns.length <= 1 && columns) {//this.columns.length > 1表示grid的columns已存在,没必要remove再add
  208. d.suspendLayout = true;
  209. d.removeAll();
  210. d.add(columns);
  211. }
  212. if (store) {
  213. this.bindStore(store);
  214. } else {
  215. this.getView().refresh();
  216. }
  217. if (columns) {
  218. d.suspendLayout = false;
  219. this.forceComponentLayout();
  220. }
  221. this.fireEvent("reconfigure", this);
  222. }
  223. });