MRPOnHandThrowGrid.js 8.2 KB

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