AttentionManageGrid.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. Ext.define('erp.view.oa.attention.AttentionManageGrid',{
  2. extend: 'Ext.grid.Panel',
  3. alias: 'widget.erpAttentionManageGridPanel',
  4. id: 'AttentionGridPanel',
  5. layout : 'fit',
  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. injectCheckbox:1,
  21. listeners:{
  22. selectionchange:function(selectionModel, selected, options){
  23. }
  24. },
  25. onRowMouseDown: function(view, record, item, index, e) {//改写的onRowMouseDown方法
  26. var me = Ext.getCmp('AttentionGridPanel');
  27. console.log(index);
  28. var bool = true;
  29. var items = me.selModel.getSelection();
  30. Ext.each(items, function(item, index){
  31. if(item.data == record.data){
  32. bool = false;
  33. me.selModel.deselect(record);
  34. Ext.Array.remove(items, item);
  35. Ext.Array.remove(me.multiselected, record);
  36. }
  37. });
  38. Ext.each(me.multiselected, function(item, index){
  39. items.push(item);
  40. });
  41. me.selModel.select(items);
  42. if(bool){
  43. view.el.focus();
  44. var checkbox = item.childNodes[1].childNodes[0].childNodes[0];
  45. if(checkbox.getAttribute('class') == 'x-grid-row-checker'){
  46. me.multiselected.push(record);
  47. //多选
  48. var datas=me.store.data.items;
  49. for(var i=index;i<datas.length;i++){
  50. if(datas[i].data.ap_attentedemid==record.data.ap_attentedemid){
  51. items.push(datas[i]);
  52. }else if(datas[i].data.ap_attentedemid!=record.data.ap_attentedemid) break;
  53. }
  54. items.push(record);
  55. me.selModel.select(items);
  56. } else {
  57. me.selModel.deselect(record);
  58. Ext.Array.remove(me.multiselected, record);
  59. }
  60. }
  61. },
  62. onHeaderClick: function(headerCt, header, e) {
  63. if (header.isCheckerHd) {
  64. e.stopEvent();
  65. var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
  66. if (isChecked) {
  67. this.deselectAll(true);
  68. var grid = Ext.getCmp('AttentionGridPanel');
  69. this.deselect(grid.multiselected);
  70. grid.multiselected = new Array();
  71. var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements;
  72. Ext.each(els, function(el, index){
  73. el.setAttribute('class','x-grid-row-checker');
  74. });
  75. header.el.removeCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  76. } else {
  77. header.el.addCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  78. var grid = Ext.getCmp('AttentionGridPanel');
  79. this.deselect(grid.multiselected);
  80. grid.multiselected = new Array();
  81. var els = Ext.select('div[@class=x-grid-row-checker-checked]').elements;
  82. Ext.each(els, function(el, index){
  83. el.setAttribute('class','x-grid-row-checker');
  84. });
  85. this.selectAll(true);
  86. header.el.addCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');//添加这个
  87. }
  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 gridParam = {caller: "AttentionManage", condition: condition};
  101. this.getGridColumnsAndStore(this, 'oa/attention/getAttentionDataAndColumns.action?', gridParam, "");
  102. this.callParent(arguments);
  103. },
  104. getGridColumnsAndStore: function(grid, url, param, no){
  105. var me = this;
  106. var main = parent.Ext.getCmp("content-panel");
  107. if(!main)
  108. main = parent.parent.Ext.getCmp("content-panel");
  109. if(main){
  110. main.getActiveTab().setLoading(true);//loading...
  111. }
  112. Ext.Ajax.request({//拿到grid的columns
  113. url : basePath + url,
  114. params: param,
  115. method : 'post',
  116. async: true,
  117. callback : function(options,success,response){
  118. if(main){
  119. main.getActiveTab().setLoading(false);
  120. }
  121. var res = new Ext.decode(response.responseText);
  122. if(res.exceptionInfo){
  123. showError(res.exceptionInfo);return;
  124. }
  125. if(res.columns){
  126. Ext.each(res.columns, function(column, y){
  127. //render
  128. if(!column.haveRendered && column.renderer != null && column.renderer != ""){
  129. if(!grid.RenderUtil){
  130. grid.RenderUtil = Ext.create('erp.util.RenderUtil');
  131. }
  132. var renderName = column.renderer;
  133. if(contains(column.renderer, ':', true)){
  134. var args = new Array();
  135. Ext.each(column.renderer.split(':'), function(a, index){
  136. if(index == 0){
  137. renderName = a;
  138. } else {
  139. args.push(a);
  140. }
  141. });
  142. if(!grid.RenderUtil.args[renderName]){
  143. grid.RenderUtil.args[renderName] = new Object();
  144. }
  145. grid.RenderUtil.args[renderName][column.dataIndex] = args;
  146. }
  147. column.renderer = grid.RenderUtil[renderName];
  148. column.haveRendered = true;
  149. }
  150. });
  151. }
  152. var data = [];
  153. if(!res.data || res.data.length == 2){
  154. me.add10EmptyData(grid.detno, data);
  155. me.add10EmptyData(grid.detno, data);//添20条吧
  156. } else {
  157. data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  158. //me.add10EmptyData(grid.detno, data);
  159. }
  160. var store = Ext.create('Ext.data.Store', {
  161. fields: res.fields,
  162. data: data,
  163. });
  164. if(grid.selModel.views == null){
  165. grid.selModel.views = [];
  166. }
  167. grid.reconfigure(store, res.columns);
  168. //grid.mergeCells(grid,[1,2,3,4]);
  169. /**setTimeout(function(){
  170. // grid.mergeCells(grid,[1,2,3,4]);
  171. },10000);**/
  172. }
  173. });
  174. },
  175. viewConfig: {
  176. stripeRows: true
  177. },
  178. getMultiSelected: function(){
  179. var grid = this;
  180. var items = grid.selModel.getSelection();
  181. var records=Ext.Array.unique(grid.multiselected);
  182. var params = new Object();
  183. params.caller = caller;
  184. var data = new Array();
  185. Ext.each(records, function(record, index){
  186. var o = new Object();
  187. o.ap_attentedemid = record.data.ap_attentedemid;
  188. data.push(o);
  189. });
  190. params.data = Ext.encode(data);
  191. return params;
  192. },
  193. loadNewStore: function(grid, param){
  194. var me = this;
  195. var main = parent.Ext.getCmp("content-panel");
  196. if(!main)
  197. main = parent.parent.Ext.getCmp("content-panel");
  198. if(main){
  199. main.getActiveTab().setLoading(true);//loading...
  200. }
  201. Ext.Ajax.request({//拿到grid的columns
  202. url : basePath + "oa/attention/getAttentionDataAndColumns.action",
  203. params: param,
  204. async: false,
  205. method : 'post',
  206. callback : function(options,success,response){
  207. if(main){
  208. main.getActiveTab().setLoading(false);
  209. }
  210. var res = new Ext.decode(response.responseText);
  211. if(res.exceptionInfo){
  212. showError(res.exceptionInfo);return;
  213. }
  214. var data = [];
  215. if(!res.data || res.data.length == 2){
  216. me.add10EmptyData(grid.detno, data);
  217. me.add10EmptyData(grid.detno, data);//添20条吧
  218. } else {
  219. data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  220. }
  221. grid.store.loadData(data);
  222. grid.mergeCells(grid,[1,2,3,4]);
  223. }
  224. });
  225. },
  226. /**
  227. * 从index行开始,往grid里面加十空行
  228. * @param detno 编号字段
  229. * @param data 需要添加空白数据的data
  230. */
  231. add10EmptyData: function(detno, data){
  232. if(detno){
  233. var index = data.length == 0 ? 0 : Number(data[data.length-1][detno]);
  234. for(var i=0;i<10;i++){
  235. var o = new Object();
  236. o[detno] = index + i + 1;
  237. data.push(o);
  238. }
  239. } else {
  240. for(var i=0;i<10;i++){
  241. var o = new Object();
  242. data.push(o);
  243. }
  244. }
  245. },
  246. getSearchValue: function() {
  247. var me = this,
  248. value = Ext.getCmp('search').getValue();
  249. if (value === '') {
  250. return null;
  251. }
  252. if (!me.regExpMode) {
  253. value = value.replace(me.regExpProtect, function(m) {
  254. return '\\' + m;
  255. });
  256. } else {
  257. try {
  258. new RegExp(value);
  259. } catch (error) {
  260. me.statusBar.setStatus({
  261. text: error.message,
  262. iconCls: 'x-status-error'
  263. });
  264. return null;
  265. }
  266. // this is stupid
  267. if (value === '^' || value === '$') {
  268. return null;
  269. }
  270. }
  271. return value;
  272. },
  273. mergeCells:function(grid,cols){
  274. var arrayTr=document.getElementById(grid.getId()+"-body").firstChild.firstChild.firstChild.getElementsByTagName('tr');
  275. var trCount = arrayTr.length;
  276. var arrayTd;
  277. var td;
  278. var merge = function(rowspanObj,removeObjs){ //定义合并函数
  279. if(rowspanObj.rowspan != 1){
  280. arrayTd =arrayTr[rowspanObj.tr].getElementsByTagName("td"); //合并行
  281. td=arrayTd[rowspanObj.td-1];
  282. td.rowSpan=rowspanObj.rowspan;
  283. td.vAlign="middle";
  284. td.style="text-align:center";
  285. Ext.each(removeObjs,function(obj){ //隐身被合并的单元格
  286. arrayTd =arrayTr[obj.tr].getElementsByTagName("td");
  287. arrayTd[obj.td-1].style.display='none';
  288. });
  289. }
  290. };
  291. var rowspanObj = {}; //要进行跨列操作的td对象{tr:1,td:2,rowspan:5}
  292. var removeObjs = []; //要进行删除的td对象[{tr:2,td:2},{tr:3,td:2}]
  293. var col;
  294. Ext.each(cols,function(colIndex){ //逐列去操作tr
  295. var rowspan = 1;
  296. var divHtml = null;
  297. for(var i=1;i<trCount;i++){
  298. arrayTd = arrayTr[i].getElementsByTagName("td");
  299. var cold=0;
  300. // Ext.each(arrayTd,function(Td){ //获取RowNumber列和check列
  301. // if(Td.getAttribute("class").indexOf("x-grid-cell-special") != -1)
  302. // cold++;
  303. // });
  304. col=colIndex+cold;//跳过RowNumber列和check列
  305. if(!divHtml){
  306. divHtml = arrayTd[col-1].innerHTML;
  307. rowspanObj = {tr:i,td:col,rowspan:rowspan}
  308. }else{
  309. var cellText = arrayTd[col-1].innerHTML;
  310. var addf=function(){
  311. rowspanObj["rowspan"] = rowspanObj["rowspan"]+1;
  312. removeObjs.push({tr:i,td:col});
  313. if(i==trCount-1)
  314. merge(rowspanObj,removeObjs);
  315. };
  316. var mergef=function(){
  317. merge(rowspanObj,removeObjs);
  318. divHtml = cellText;
  319. rowspanObj = {tr:i,td:col,rowspan:rowspan}
  320. removeObjs = [];
  321. };
  322. if(cellText == divHtml){
  323. if(colIndex!=cols[0]){
  324. var leftDisplay=arrayTd[col-2].style.display;
  325. if(leftDisplay=='none')
  326. addf();
  327. else
  328. mergef();
  329. }else
  330. addf();
  331. }else
  332. mergef();
  333. }
  334. }
  335. });
  336. }
  337. });