AttentionSubGrid.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. Ext.define('erp.view.oa.attention.AttentionSubGrid',{
  2. extend: 'Ext.grid.Panel',
  3. alias: 'widget.AttentionSubGridPanel',
  4. id: 'AttentionSubGrid',
  5. layout : 'auto',
  6. emptyText : '无数据',
  7. columnLines : true,
  8. autoScroll : true,
  9. store: [],
  10. columns: [],
  11. multiselected: [],
  12. bodyStyle: 'background: #f1f1f1;',
  13. GridUtil: Ext.create('erp.util.GridUtil'),
  14. BaseUtil: Ext.create('erp.util.BaseUtil'),
  15. plugins: Ext.create('Ext.grid.plugin.CellEditing', {
  16. clicksToEdit: 1
  17. }),
  18. selModel: Ext.create('Ext.selection.CheckboxModel',{
  19. ignoreRightMouseSelection : false,
  20. id:'subgrid',
  21. listeners:{
  22. selectionchange:function(selectionModel, selected, options){
  23. }
  24. },
  25. renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
  26. metaData.tdCls = Ext.baseCSSPrefix + 'grid-cell-special';
  27. if(record.data.ap_isuse==1||record.data.aa_isuse==1){
  28. var grid=Ext.getCmp('AttentionSubGrid');
  29. grid.multiselected.push(record);
  30. grid.getSelectionModel().select(grid.multiselected);
  31. }
  32. return '<div class="' + Ext.baseCSSPrefix + 'grid-row-checker">&#160;</div>';
  33. },
  34. onRowMouseDown: function(view, record, item, index, e) {//改写的onRowMouseDown方法
  35. var me = Ext.getCmp('AttentionSubGrid');
  36. var bool = true;
  37. var items = me.selModel.getSelection();
  38. Ext.each(items, function(item, index){
  39. if(item&&item.data == record.data){
  40. bool = false;
  41. me.selModel.deselect(record);
  42. Ext.Array.remove(items, item);
  43. Ext.Array.remove(me.multiselected, record);
  44. }
  45. });
  46. Ext.each(me.multiselected, function(item, index){
  47. items.push(item);
  48. });
  49. me.selModel.select(items);
  50. if(bool){
  51. view.el.focus();
  52. var checkbox = item.childNodes[0].childNodes[0].childNodes[0];
  53. if(checkbox.getAttribute('class') == 'x-grid-row-checker'){
  54. me.multiselected.push(record);
  55. items.push(record);
  56. me.selModel.select(items);
  57. } else {
  58. me.selModel.deselect(record);
  59. Ext.Array.remove(me.multiselected, record);
  60. }
  61. }
  62. },
  63. onHeaderClick: function(headerCt, header, e) {
  64. if (header.isCheckerHd) {
  65. e.stopEvent();
  66. var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
  67. if (isChecked) {
  68. this.deselectAll(true);
  69. var grid = Ext.getCmp('AttentionGridPanel');
  70. this.deselect(grid.multiselected);
  71. grid.multiselected = new Array();
  72. var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements;
  73. Ext.each(els, function(el, index){
  74. el.setAttribute('class','x-grid-row-checker');
  75. });
  76. header.el.removeCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  77. } else {
  78. header.el.addCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  79. var grid = Ext.getCmp('AttentionGridPanel');
  80. this.deselect(grid.multiselected);
  81. grid.multiselected = new Array();
  82. var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements;
  83. Ext.each(els, function(el, index){
  84. el.setAttribute('class','x-grid-row-checker');
  85. });
  86. this.selectAll(true);
  87. header.el.addCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  88. }
  89. }
  90. }
  91. }),
  92. initComponent : function(){
  93. this.addEvents({
  94. mouseover: true
  95. });
  96. condition = this.BaseUtil.getUrlParam('urlcondition');
  97. condition = (condition == null) ? "1=1": condition;
  98. condition = condition.replace(/@/,"'%").replace(/@/,"%'");
  99. this.defaultCondition = condition;
  100. var attenedemid=this.BaseUtil.getUrlParam('emid');
  101. /**if(attenedemid){
  102. condition="ap_attentedemid="+attenedemid+" AND ap_emid="+emid;
  103. }else condition="ap_emid="+0;**/
  104. var gridParam = {caller: caller, condition: condition};
  105. this.GridUtil.getGridColumnsAndStore(this, 'common/singleGridPanel.action?', gridParam, "");
  106. this.callParent(arguments);
  107. },
  108. viewConfig: {
  109. stripeRows: true
  110. },
  111. loadNewStore: function(grid, param){
  112. var me = this;
  113. var main = parent.Ext.getCmp("content-panel");
  114. if(!main)
  115. main = parent.parent.Ext.getCmp("content-panel");
  116. if(main){
  117. main.getActiveTab().setLoading(true);//loading...
  118. }
  119. Ext.Ajax.request({//拿到grid的columns
  120. url : basePath + "common/loadNewGridStore.action",
  121. params: param,
  122. async: false,
  123. method : 'post',
  124. callback : function(options,success,response){
  125. if(main){
  126. main.getActiveTab().setLoading(false);
  127. }
  128. var res = new Ext.decode(response.responseText);
  129. if(res.exceptionInfo){
  130. showError(res.exceptionInfo);return;
  131. }
  132. var data = res.data;
  133. if(!data || data.length == 0){
  134. data = [];
  135. me.add10EmptyData(grid.detno, data);
  136. me.add10EmptyData(grid.detno, data);//添20条吧
  137. }
  138. grid.store.loadData(data);
  139. //自定义event
  140. grid.addEvents({
  141. storeloaded: true
  142. });
  143. grid.fireEvent('storeloaded', grid);
  144. }
  145. });
  146. },
  147. getMultiSelected: function(){
  148. var grid = this;
  149. var items = grid.selModel.getSelection();
  150. Ext.each(items, function(item, index){
  151. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  152. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  153. grid.multiselected.push(item);
  154. }
  155. });
  156. var records=Ext.Array.unique(grid.multiselected);
  157. var params = new Object();
  158. params.caller = caller;
  159. var data = new Array();
  160. console.log(grid.necessaryFields);
  161. Ext.each(records, function(record, index){
  162. var o = new Object();
  163. if(grid.necessaryFields){
  164. Ext.each(grid.necessaryFields, function(f, index){
  165. var v = record.data[f];
  166. if(Ext.isDate(v)){
  167. v = Ext.Date.toString(v);
  168. }
  169. o[f] = v;
  170. });
  171. }
  172. data.push(o);
  173. });
  174. params.data = Ext.encode(data);
  175. return params;
  176. },
  177. add10EmptyData: function(detno, data){
  178. if(detno){
  179. var index = data.length == 0 ? 0 : Number(data[data.length-1][detno]);
  180. for(var i=0;i<10;i++){
  181. var o = new Object();
  182. o[detno] = index + i + 1;
  183. data.push(o);
  184. }
  185. } else {
  186. for(var i=0;i<10;i++){
  187. var o = new Object();
  188. data.push(o);
  189. }
  190. }
  191. },
  192. getSearchValue: function() {
  193. var me = this,
  194. value = Ext.getCmp('search').getValue();
  195. if (value === '') {
  196. return null;
  197. }
  198. if (!me.regExpMode) {
  199. value = value.replace(me.regExpProtect, function(m) {
  200. return '\\' + m;
  201. });
  202. } else {
  203. try {
  204. new RegExp(value);
  205. } catch (error) {
  206. me.statusBar.setStatus({
  207. text: error.message,
  208. iconCls: 'x-status-error'
  209. });
  210. return null;
  211. }
  212. // this is stupid
  213. if (value === '^' || value === '$') {
  214. return null;
  215. }
  216. }
  217. return value;
  218. },
  219. });