GridPanel.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. Ext.define('erp.view.common.multiDbfind.GridPanel',{
  2. extend: 'Ext.grid.Panel',
  3. alias: 'widget.erpMultiDbfindGridPanel',
  4. layout : 'fit',
  5. id: 'dbfindGridPanel',
  6. emptyText : $I18N.common.grid.emptyText,
  7. columnLines : true,
  8. autoScroll : true,
  9. multiselected: [],
  10. store: [],
  11. columns: [],
  12. multiselected: new Array(),
  13. selModel: Ext.create('Ext.selection.CheckboxModel',{
  14. ignoreRightMouseSelection : false,
  15. checkOnly: true,
  16. listeners:{
  17. selectionchange:function(selModel, selected, options){
  18. selModel.view.ownerCt.setMultiValues(selected);
  19. trigger.multiRecords = selected;
  20. }
  21. }
  22. }),
  23. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  24. clicksToEdit: 1
  25. }), Ext.create('Ext.ux.grid.GridHeaderFilters')],
  26. initComponent : function(){
  27. this.callParent(arguments);
  28. this.getCount();
  29. },
  30. RenderUtil: Ext.create('erp.util.RenderUtil'),
  31. setMultiValues: function(selected) {
  32. if(selected.length > 0) {
  33. if(dbfinds){
  34. var keys = Ext.Object.getKeys(selected[0].data);
  35. Ext.Array.each(selected, function(item){
  36. var keyValues = item.data;
  37. Ext.each(keys, function(k){
  38. Ext.Array.each(dbfinds,function(ds){
  39. if(k == ds.dbGridField) {
  40. if(ds.field && parent.Ext.getCmp(ds.field)){
  41. if(trigger.multiValue == null){
  42. trigger.multiValue = new Object();
  43. }
  44. if(trigger.multiValue[ds.field] == null || trigger.multiValue[ds.field] == ''){
  45. trigger.multiValue[ds.field] = keyValues[k];
  46. } else if(!contains(trigger.multiValue[ds.field], keyValues[k], true)){
  47. trigger.multiValue[ds.field] = trigger.multiValue[ds.field] + '#' + keyValues[k];
  48. }
  49. }
  50. }
  51. });
  52. });
  53. });
  54. } else {
  55. trigger.multiValue = selected;
  56. }
  57. } else {
  58. if(dbfinds)
  59. trigger.multiValue = {};
  60. else
  61. trigger.multiValue = [];
  62. }
  63. },
  64. getColumnsAndStore: function(c, d, g, s){
  65. var me = this;
  66. c = c || caller;
  67. d = d || condition;
  68. g = g || page;
  69. s = s || pageSize;
  70. var f = d;
  71. if(me.filterCondition){
  72. if(d == null || d == ''){
  73. f = me.filterCondition;
  74. } else {
  75. f += ' AND ' + me.filterCondition;
  76. }
  77. }
  78. me.setLoading(true);
  79. Ext.Ajax.request({//拿到grid的columns
  80. url : basePath + 'common/dbfind.action',
  81. method : 'post',
  82. params : {
  83. which : which,
  84. caller : c,
  85. field: key,
  86. condition: f,
  87. page: g,
  88. pageSize: s
  89. },
  90. callback : function(options, success, response){
  91. me.setLoading(false);
  92. var res = new Ext.decode(response.responseText);
  93. if(res.exceptionInfo){
  94. showError(res.exceptionInfo);return
  95. }
  96. var data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  97. if(me.columns && me.columns.length > 2){
  98. me.store.loadData(data);
  99. if(me.store.data.items.length != data.length){
  100. me.store.add(data);
  101. }
  102. me.selectDefault();
  103. } else {
  104. //处理render
  105. var grid = this;
  106. Ext.Array.each(res.columns, function(column, y) {
  107. if(!column.haveRendered && column.renderer != null && column.renderer != ""){
  108. if(!grid.RenderUtil){
  109. grid.RenderUtil = Ext.create('erp.util.RenderUtil');
  110. }
  111. var renderName = column.renderer;
  112. if(contains(column.renderer, ':', true)){
  113. var args = new Array();
  114. Ext.each(column.renderer.split(':'), function(a, index){
  115. if(index == 0){
  116. renderName = a;
  117. } else {
  118. args.push(a);
  119. }
  120. });
  121. if(!grid.RenderUtil.args[renderName]){
  122. grid.RenderUtil.args[renderName] = new Object();
  123. }
  124. grid.RenderUtil.args[renderName][column.dataIndex] = args;
  125. }
  126. column.renderer = grid.RenderUtil[renderName];
  127. column.haveRendered = true;
  128. }
  129. });
  130. me.reconfigure(Ext.create('Ext.data.Store', {
  131. fields: res.fields,
  132. data: data
  133. }), res.columns);
  134. Ext.getCmp('pagingtoolbar').afterOnLoad();
  135. dbfinds = res.dbfinds;
  136. me.selectDefault();
  137. }
  138. }
  139. });
  140. },
  141. getCount: function(c, d){
  142. var me = this;
  143. c = c || caller;
  144. d = d || condition;
  145. var f = d;
  146. if(me.filterCondition){
  147. if(d == null || d == ''){
  148. f = me.filterCondition;
  149. } else {
  150. f += ' AND ' + me.filterCondition;
  151. }
  152. }
  153. Ext.Ajax.request({//拿到grid的数据总数count
  154. url : basePath + 'common/dbfindCount.action',
  155. params : {
  156. which : which,
  157. caller : c,
  158. field: key,
  159. condition: f
  160. },
  161. method : 'post',
  162. callback : function(options,success,response){
  163. var res = new Ext.decode(response.responseText);
  164. dataCount = res.count;
  165. me.getColumnsAndStore(c, d);
  166. }
  167. });
  168. },
  169. selectDefault: function(){
  170. var grid = this;
  171. if(!Ext.isEmpty(trigger.value)){
  172. var f = '';
  173. Ext.each(dbfinds, function(d){
  174. if(d.field == key){
  175. f = d.dbGridField;
  176. }
  177. });
  178. var arr = trigger.value.split('#');
  179. var def = new Array();
  180. Ext.each(grid.store.data.items, function(item){
  181. if(Ext.Array.contains(arr, item.data[f])){
  182. def.push(item);
  183. var keyValues = item.data;
  184. Ext.each(Ext.Object.getKeys(keyValues), function(k){
  185. Ext.Array.each(dbfinds,function(ds){
  186. if(k == ds.dbGridField) {
  187. if(parent.Ext.getCmp(ds.field)){
  188. if(trigger.multiValue == null){
  189. trigger.multiValue = new Object();
  190. }
  191. if(trigger.multiValue[ds.field] == null || trigger.multiValue[ds.field] == ''){
  192. trigger.multiValue[ds.field] = keyValues[k];
  193. } else if(!contains(trigger.multiValue[ds.field], keyValues[k], true)){
  194. trigger.multiValue[ds.field] = trigger.multiValue[ds.field] + '#' + keyValues[k];
  195. }
  196. }
  197. }
  198. });
  199. });
  200. }
  201. });
  202. grid.selModel.select(def);
  203. }
  204. },
  205. listeners: {
  206. 'headerfiltersapply': function(grid, filters) {
  207. if(this.allowFilter){
  208. var condition = null;
  209. for(var fn in filters){
  210. var value = filters[fn],f = grid.getHeaderFilterField(fn);
  211. if(!Ext.isEmpty(value)){
  212. if(f.filtertype) {
  213. if (f.filtertype == 'numberfield') {
  214. value = fn + "=" + value + " ";
  215. }
  216. } else {
  217. if(Ext.isDate(value)){
  218. value = Ext.Date.toString(value);
  219. value = "to_char(" + fn + ",'yyyy-MM-dd')='" + value + "' ";
  220. } else {
  221. var exp_t = /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/,
  222. exp_d = /^(\d{4})\-(\d{2})\-(\d{2})$/;
  223. if(exp_d.test(value)){
  224. value = "to_char(" + fn + ",'yyyy-MM-dd')='" + value + "' ";
  225. } else if(exp_t.test(value)){
  226. value = "to_char(" + fn + ",'yyyy-MM-dd')='" + value.substr(0, 10) + "' ";
  227. } else{
  228. if(!f.autoDim) {
  229. value = fn + " LIKE '" + value + "%' ";
  230. } else {
  231. value = fn + " LIKE '%" + value + "%' ";
  232. }
  233. }
  234. }
  235. }
  236. if(condition == null){
  237. condition = value;
  238. } else {
  239. condition = condition + " AND " + value;
  240. }
  241. }
  242. }
  243. this.filterCondition = condition;
  244. page = 1;
  245. this.getCount();
  246. } else {
  247. this.allowFilter = true;
  248. }
  249. return false;
  250. }
  251. }
  252. });