GridPanel.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. Ext.define('erp.view.common.dbfind.GridPanel',{
  2. extend: 'Ext.grid.Panel',
  3. alias: 'widget.erpDbfindGridPanel',
  4. layout : 'fit',
  5. id: 'dbfindGridPanel',
  6. emptyText : $I18N.common.grid.emptyText,
  7. columnLines : true,
  8. autoScroll : true,
  9. store: [],
  10. columns: [],
  11. selModel: Ext.create('Ext.selection.CheckboxModel',{
  12. headerWidth: 0
  13. }),
  14. BaseUtil: Ext.create('erp.util.BaseUtil'),
  15. bodyStyle:'background-color:#f1f1f1;',
  16. dockedItems: [{
  17. id : 'pagingtoolbar',
  18. xtype: 'erpDbfindToolbar',
  19. dock: 'bottom',
  20. displayInfo: true
  21. }],
  22. plugins: [Ext.create('Ext.ux.grid.GridHeaderFilters')],
  23. initComponent : function(){
  24. this.callParent(arguments);
  25. this.getCount();
  26. },
  27. getColumnsAndStore: function(){
  28. var me = this;
  29. var c = condition;
  30. if(me.filterCondition){
  31. c += ' AND ' + me.filterCondition;
  32. }
  33. Ext.Ajax.request({//拿到grid的columns
  34. url : basePath + 'common/dbfind.action',
  35. method : 'post',
  36. params : {
  37. which : which,
  38. caller : caller,
  39. field: key,
  40. condition: c,
  41. ob: dbOrderby,// dynamic order by
  42. page: page,
  43. pageSize: pageSize
  44. },
  45. callback : function(options,success,response){
  46. var res = new Ext.decode(response.responseText);
  47. if(res.exceptionInfo){
  48. showError(res.exceptionInfo);return;
  49. }
  50. if(res.autoHeight) {
  51. me.addCls('custom-grid-autoheight');//自适应样式
  52. }
  53. var data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  54. if(me.columns && me.columns.length > 2){
  55. me.store.loadData(data);
  56. if(me.store.data.items.length != data.length){
  57. me.store.add(data);
  58. }
  59. //修改pagingtoolbar信息
  60. Ext.getCmp('pagingtoolbar').afterOnLoad();
  61. } else {
  62. me.reconfigure(Ext.create('Ext.data.Store', {
  63. storeId: 'dbfindGridPanelStore',
  64. fields: res.fields,
  65. data: data
  66. }), res.columns);
  67. //修改pagingtoolbar信息
  68. Ext.getCmp('pagingtoolbar').afterOnLoad();
  69. dbfinds = res.dbfinds;
  70. me.resetable = res.reset;//允许重置条件
  71. if(me.resetable){
  72. parent.Ext.getCmp('dbwin').down('#reset').show();
  73. }
  74. }
  75. }
  76. });
  77. },
  78. getCount: function(){
  79. var me = this;
  80. var c = condition;
  81. if(me.filterCondition){
  82. c += ' AND ' + me.filterCondition;
  83. }
  84. Ext.Ajax.request({//拿到grid的数据总数count
  85. url : basePath + 'common/dbfindCount.action',
  86. params : {
  87. which : which,
  88. caller : caller,
  89. field: key,
  90. condition: c
  91. },
  92. method : 'post',
  93. callback : function(options,success,response){
  94. var res = new Ext.decode(response.responseText);
  95. dataCount = res.count;
  96. me.getColumnsAndStore();
  97. }
  98. });
  99. },
  100. listeners: {
  101. 'beforeheaderfiltersapply': function(grid, filters) {
  102. if(this.allowFilter){
  103. var condition = null;
  104. for(var fn in filters){
  105. var value = filters[fn];
  106. if(!Ext.isEmpty(value)){
  107. var SimplizedValue=this.BaseUtil.Simplized(value);
  108. if(fn.ignoreCase) {// 忽略大小写
  109. fn = 'upper(' + fn + ')';
  110. value = value.toUpperCase();
  111. }
  112. if(SimplizedValue!=value){
  113. value = "("+fn + " LIKE '%" + value + "%' or "+fn+" LIKE '%"+SimplizedValue+"%')";
  114. }else value = fn + " LIKE '%" + value + "%' ";
  115. Ext.each(grid.columns, function(c){
  116. if(c.dataIndex == fn && c.xtype == 'datecolumn'){//日期形式的特殊处理成oracle支持的格式哦
  117. value = fn + "=to_date('" + Ext.Date.toString(filters[fn]) + "','YYYY-MM-DD') ";
  118. }
  119. });
  120. if(condition == null){
  121. condition = value;
  122. } else {
  123. condition = condition + " AND " + value;
  124. }
  125. }
  126. }
  127. this.filterCondition = condition;
  128. page = 1;
  129. this.getCount();
  130. return false;
  131. } else {
  132. this.allowFilter = true;
  133. return false;
  134. }
  135. }
  136. },
  137. reconfigure: function(store, columns){
  138. //改写reconfigure方法
  139. var d = this.headerCt;
  140. if (this.columns.length <= 1 && columns) {//this.columns.length > 1表示grid的columns已存在,没必要remove再add
  141. if(!Ext.isChrome){//ie,firefox下,format出现NaN-NaN-NaN,暂时作string处理
  142. Ext.each(columns, function(c){
  143. if(c.xtype == 'datecolumn'){
  144. c.xtype = "";
  145. c.format = "";
  146. }
  147. });
  148. }
  149. d.suspendLayout = true;
  150. d.removeAll();
  151. d.add(columns);
  152. }
  153. if (store) {
  154. if(!Ext.isChrome){//ie,firefox下,format出现NaN-NaN-NaN
  155. Ext.each(store.fields, function(f){
  156. if(f.type == 'date'){
  157. f.type = "string";
  158. f.format = "";
  159. }
  160. });
  161. }
  162. this.bindStore(store);
  163. } else {
  164. this.getView().refresh();
  165. }
  166. if (columns) {
  167. d.suspendLayout = false;
  168. this.forceComponentLayout();
  169. }
  170. this.fireEvent("reconfigure", this);
  171. },
  172. /**
  173. * 重置条件
  174. * dbfindSet.ds_allowreset(1-允许)
  175. * dbfindSetUI.ds_allowreset(1-允许)
  176. */
  177. resetCondition: function(){
  178. condition = this.getCondition();
  179. this.filterCondition = '';
  180. var fields = this.plugins[0].fields;
  181. Ext.each(Ext.Object.getKeys(fields), function(key){
  182. fields[key].reset();
  183. });
  184. },
  185. getCondition: function() {
  186. condition = 'upper(' + key + ") like '%%'";
  187. if(!trigger.ownerCt){//如果是grid的dbfind
  188. condition = 'upper(' + keyField + ") like '%%'";
  189. if(dbGridCondition && dbGridCondition != null){
  190. condition += " AND " + dbGridCondition.replace(/IS/g, '=');
  191. }
  192. }
  193. if(dbCondition && dbCondition != null){
  194. condition += " AND " + dbCondition.replace(/IS/g, '=');
  195. }
  196. if(dbBaseCondition && dbBaseCondition != null){
  197. condition += " AND " + dbBaseCondition.replace(/IS/g,'=');
  198. }
  199. return condition;
  200. }
  201. });