AttentionMainGrid.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. Ext.define('erp.view.oa.attention.AttentionMainGrid',{
  2. extend: 'Ext.grid.Panel',
  3. alias: 'widget.erpAttentionMainGridPanel',
  4. layout : 'auto',
  5. id: 'grid',
  6. emptyText : '无数据',
  7. columnLines : true,
  8. autoScroll : true,
  9. store: [],
  10. columns: [],
  11. multiselected: [],
  12. bodyStyle: 'background: #f1f1f1;',
  13. dockedItems: [{
  14. id : 'pagingtoolbar',
  15. xtype: 'erpDatalistToolbar',
  16. dock: 'bottom',
  17. displayInfo: true
  18. }],
  19. plugins: [{
  20. ptype: 'rowexpander',
  21. rowBodyTpl : [
  22. '<p><b>工作状态:</b> {ap_status}</p><br>',
  23. '<p><b>所有关注项:</b> {ap_maindata}</p>',
  24. ]
  25. }],
  26. BaseUtil: Ext.create('erp.util.BaseUtil'),
  27. RenderUtil: Ext.create('erp.util.RenderUtil'),
  28. initComponent : function(){
  29. this.addEvents({
  30. beforereconfigure: true
  31. });
  32. //condition = this.BaseUtil.getUrlParam('urlcondition');
  33. //condition = (condition == null) ? "" : condition;
  34. //caller = this.BaseUtil.getUrlParam('whoami');
  35. this.getCount(caller,condition);
  36. this.callParent(arguments);
  37. Ext.getCmp("pagingtoolbar").bind(this.store);
  38. Ext.getCmp('pagingtoolbar').updateInfo();
  39. } ,
  40. getColumnsAndStore: function(c, d, g, s){
  41. //var gridParam = {caller: "AttentionManage", condition: condition};
  42. c = c || "AttentionManage";
  43. d = d || "1=1";
  44. g = g || page;
  45. s = s || pageSize;
  46. var me = this;
  47. var f = d;
  48. if(me.filterCondition){
  49. if(d == null || d == ''){
  50. f = me.filterCondition;
  51. } else {
  52. f += ' AND ' + me.filterCondition;
  53. }
  54. }
  55. this.multiselected = [];
  56. var main = parent.Ext.getCmp("content-panel");
  57. main.getActiveTab().setLoading(true);//loading...
  58. Ext.Ajax.request({//拿到grid的columns
  59. url : basePath + 'oa/attention/getAttentionDataAndColumns.action',
  60. params: {
  61. caller: c,
  62. condition: f,
  63. page: g,
  64. pageSize: s
  65. },
  66. method : 'post',
  67. async: false,
  68. callback : function(options,success,response){
  69. main.getActiveTab().setLoading(false);
  70. var res = new Ext.decode(response.responseText);
  71. var data = res.data != null ? Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')) : [];
  72. if(me.columns && me.columns.length > 2){
  73. me.store.loadData(data);
  74. } else {
  75. var store = Ext.create('Ext.data.Store', {
  76. storeId: 'gridStore',
  77. fields: res.fields,
  78. data: data
  79. });
  80. Ext.each(res.columns, function(c){
  81. me.setRenderer(c);
  82. if(c.editor){
  83. c.locked = true;
  84. c.sortable = false;
  85. }
  86. });
  87. var arr=new Array();
  88. arr.push(res.columns);
  89. var columns=res.columns;
  90. me.columns=arr;
  91. me.store=store;
  92. }
  93. }
  94. });
  95. },
  96. getCount: function(c, d){
  97. c = c || caller;
  98. d = d || condition;
  99. var me = this;
  100. var f = d;
  101. if(me.filterCondition){
  102. if(d == null || d == ''){
  103. f = me.filterCondition;
  104. } else {
  105. f += ' AND ' + me.filterCondition;
  106. }
  107. }
  108. Ext.Ajax.request({//拿到grid的数据总数count
  109. url : basePath + 'oa/attention/AttentionCounts.action',
  110. params: {
  111. caller: c,
  112. condition: d
  113. },
  114. method : 'post',
  115. async: false,
  116. callback : function(options,success,response){
  117. var res = new Ext.decode(response.responseText);
  118. dataCount = res.count;
  119. me.getColumnsAndStore();
  120. }
  121. });
  122. },
  123. listeners: {
  124. 'beforeheaderfiltersapply': function(grid, filters) {
  125. if(this.allowFilter){
  126. var condition = null;
  127. for(var fn in filters){
  128. var value = filters[fn];
  129. if(!Ext.isEmpty(value)){
  130. if(Ext.isDate(value)){
  131. value = Ext.Date.toString(value);
  132. value = fn + "=to_date('" + value + "','yyyy-MM-dd') ";
  133. } else {
  134. var exp_t = /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/,
  135. exp_d = /^(\d{4})\-(\d{2})\-(\d{2})$/;
  136. if(exp_d.test(value)){
  137. value = fn + "=to_date('" + value + "','yyyy-MM-dd') ";
  138. } else if(exp_t.test(value)){
  139. value = fn + "=to_date('" + value + "','yyyy-MM-dd HH24:mi:ss') ";
  140. } else{
  141. value = fn + " LIKE '%" + value + "%' ";
  142. }
  143. }
  144. if(condition == null){
  145. condition = value;
  146. } else {
  147. condition = condition + " AND " + value;
  148. }
  149. }
  150. }
  151. this.filterCondition = condition;
  152. page = 1;
  153. this.getCount();
  154. } else {
  155. this.allowFilter = true;
  156. }
  157. return false;
  158. }
  159. },
  160. viewConfig: {
  161. stripeRows: true
  162. },
  163. getMultiSelected: function(){
  164. var grid = this;
  165. var records = grid.multiselected;
  166. var items = grid.selModel.getSelection();
  167. Ext.each(items, function(item, index){
  168. records.push(item);
  169. });
  170. return Ext.Array.unique(records);
  171. },
  172. getEffectData: function(){
  173. var grid = this;
  174. var items = grid.selModel.getSelection();
  175. Ext.each(items, function(item, index){
  176. if(this.data[keyField] != null && this.data[keyField] != ''
  177. && this.data[keyField] != '0' && this.data[keyField] != 0){
  178. grid.multiselected.push(item);
  179. }
  180. });
  181. var records = Ext.Array.unique(grid.multiselected);
  182. var fields = new Array();
  183. fields.push({name: keyField, type: 'number'});
  184. Ext.each(grid.columns, function(c, index){
  185. if (c.editor != null || (c.getEditor && c.getEditor() != null)) {
  186. var type = 'string';
  187. if(c.xtype == 'datecolumn'){
  188. type = 'date';
  189. } else if(c.xtype == 'datetimecolumn'){
  190. type = 'datetime';
  191. }
  192. fields.push({
  193. name: c.dataIndex,
  194. type: type
  195. });
  196. }
  197. });
  198. var data = new Array();
  199. var o = null;
  200. Ext.each(records, function(record, index){
  201. o = new Object();
  202. Ext.each(fields, function(f){
  203. var v = record.data[f.name];
  204. if(f.type == 'date'){
  205. if (Ext.isDate(v)) {
  206. v = Ext.Date.format(v, 'Y-m-d');
  207. }
  208. } else if(f.type == 'datetime'){
  209. if (Ext.isDate(v)) {
  210. v = Ext.Date.format(v, 'Y-m-d H:i:s');
  211. }
  212. }
  213. o[f.name] = v;
  214. });
  215. data.push(o);
  216. });
  217. return data;
  218. },
  219. setRenderer: function(column){
  220. var grid = this;
  221. if(!column.haveRendered && column.renderer != null && column.renderer != ""){
  222. var renderName = column.renderer;
  223. if(contains(column.renderer, ':', true)){
  224. var args = new Array();
  225. Ext.each(column.renderer.split(':'), function(a, index){
  226. if(index == 0){
  227. renderName = a;
  228. } else {
  229. args.push(a);
  230. }
  231. });
  232. if(!grid.RenderUtil.args[renderName]){
  233. grid.RenderUtil.args[renderName] = new Object();
  234. }
  235. grid.RenderUtil.args[renderName][column.dataIndex] = args;
  236. }
  237. column.renderer = grid.RenderUtil[renderName];
  238. column.haveRendered = true;
  239. }
  240. }
  241. });