RecordGrid.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. Ext.require([
  2. 'erp.util.*'
  3. ]);
  4. Ext.define('erp.view.plm.record.RecordGrid',{
  5. extend: 'Ext.grid.Panel',
  6. alias: 'widget.erpRecordGridPanel',
  7. layout : 'auto',
  8. id: 'grid',
  9. emptyText : '无数据',
  10. columnLines : true,
  11. autoScroll : true,
  12. store: [],
  13. columns: new Array(),
  14. bodyStyle:'background-color:#f1f1f1;',
  15. selModel: Ext.create('Ext.selection.CheckboxModel',{
  16. headerWidth: 0
  17. }),
  18. dockedItems: [{
  19. id : 'pagingtoolbar',
  20. xtype: 'erpDatalistToolbar',
  21. dock: 'bottom',
  22. displayInfo: true
  23. }],
  24. plugins: [Ext.create('Ext.ux.grid.GridHeaderFilters')],
  25. BaseUtil: Ext.create('erp.util.BaseUtil'),
  26. RenderUtil:Ext.create('erp.util.RenderUtil'),
  27. initComponent : function(){
  28. caller = this.BaseUtil.getUrlParam('whoami');
  29. this.getCount(caller, condition);
  30. this.callParent(arguments);
  31. } ,
  32. getColumnsAndStore: function(caller, condition, page, pageSize){
  33. var me = this;
  34. me.BaseUtil.getActiveTab().setLoading(true);//loading...
  35. Ext.Ajax.request({//拿到grid的columns
  36. url : basePath + 'common/datalist.action',
  37. params: {
  38. caller: caller,
  39. condition: condition,
  40. page: page,
  41. pageSize: pageSize
  42. },
  43. method : 'post',
  44. callback : function(options,success,response){
  45. me.BaseUtil.getActiveTab().setLoading(false);
  46. var res = new Ext.decode(response.responseText);
  47. if(res.exception || res.exceptionInfo){
  48. showError(res.exceptionInfo);
  49. return;
  50. }
  51. var data = res.data != null ? Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')) : [];//一定要去掉多余逗号,ie对此很敏感
  52. if(me.columns && me.columns.length > 2){
  53. me.store.loadData(data);
  54. Ext.getCmp('pagingtoolbar').afterOnLoad();
  55. } else {
  56. var store = Ext.create('Ext.data.Store', {
  57. fields: res.fields,
  58. data: data
  59. });
  60. //处理render
  61. Ext.Array.each(res.columns, function(column) {
  62. if(column.renderer != null && column.renderer != ""){
  63. var renderName = column.renderer;
  64. column.renderer = me.RenderUtil[renderName];
  65. }
  66. });
  67. me.reconfigure(store, res.columns);//用这个方法每次都会add一个checkbox列
  68. }
  69. //修改pagingtoolbar信息
  70. Ext.getCmp('pagingtoolbar').afterOnLoad();
  71. //拿到datalist对应的单表的关键词
  72. keyField = res.keyField;//form表主键字段
  73. pfField = res.pfField;//grid表主键字段
  74. url = basePath + res.url;//grid行选择之后iframe嵌入的页面链接
  75. }
  76. });
  77. },
  78. getCount: function(caller, condition){
  79. var me = this;
  80. Ext.Ajax.request({//拿到grid的数据总数count
  81. url : basePath + '/common/datalistCount.action',
  82. params: {
  83. caller: caller,
  84. condition: condition
  85. },
  86. method : 'post',
  87. callback : function(options,success,response){
  88. var res = new Ext.decode(response.responseText);
  89. if(res.exception || res.exceptionInfo){
  90. showError(res.exceptionInfo);
  91. return;
  92. }
  93. dataCount = res.count;
  94. me.getColumnsAndStore(caller, condition, page, pageSize);
  95. }
  96. });
  97. },
  98. listeners: {
  99. 'beforeheaderfiltersapply': function(grid, filters) {
  100. var condition = "1=1";
  101. for(var fn in filters){
  102. var value = filters[fn];
  103. if(!Ext.isEmpty(value)){
  104. value = " AND " + fn + " LIKE '%" + value + "%' ";
  105. Ext.each(grid.columns, function(c){
  106. if(c.dataIndex == fn && c.xtype == 'datecolumn'){//日期形式的特殊处理成oracle支持的格式哦
  107. value = " AND " + fn + "=to_date('" + Ext.Date.toString(filters[fn]) + "','YYYY-MM-DD') ";
  108. }
  109. });
  110. condition = condition + value;
  111. }
  112. }
  113. if (condition == "1=1") return false;
  114. this.getColumnsAndStore(caller, condition, page, pageSize);
  115. return false;
  116. }
  117. },
  118. reconfigure: function(store, columns){
  119. //改写reconfigure方法
  120. var d = this.headerCt;
  121. if (this.columns.length <= 1 && columns) {//this.columns.length > 1表示grid的columns已存在,没必要remove再add
  122. if(Ext.isIE){//ie下,format出现NaN-NaN-NaN,暂时作string处理
  123. Ext.each(columns, function(c){
  124. if(c.xtype == 'datecolumn'){
  125. c.xtype = "";
  126. c.format = "";
  127. }
  128. });
  129. }
  130. d.suspendLayout = true;
  131. d.removeAll();
  132. d.add(columns);
  133. }
  134. if (store) {
  135. if(Ext.isIE){//ie下,format出现NaN-NaN-NaN
  136. Ext.each(store.fields, function(f){
  137. if(f.type == 'date'){
  138. f.type = "string";
  139. f.format = "";
  140. }
  141. });
  142. }
  143. this.bindStore(store);
  144. } else {
  145. this.getView().refresh();
  146. }
  147. if (columns) {
  148. d.suspendLayout = false;
  149. this.forceComponentLayout();
  150. }
  151. this.fireEvent("reconfigure", this);
  152. }
  153. });