MRPThrowGrid.js 10 KB

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