TaskGrid.js 5.2 KB

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