MRPThrowGrid.js 9.2 KB

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