/* * @Description: * @Author: hy * @Date: 2019-08-12 17:59:33 * @LastEditTime: 2019-08-15 14:24:07 */ Ext.define('uas.view.grid.mergeColumn.MergeColumnGrid', { extend: 'Ext.grid.Panel', xtype: 'mergeColumnGrid', cls:'x-merge-grid', columnLines: true, sortableColumns: false, bufferedRenderer:false, initComponent: function () { var me = this; Ext.apply(me, { store: Ext.create('uas.store.Companies',{}) }); me.callParent(arguments); me.store.load(function(records, operation, success) { const grid = me; //1000条数据 100延迟 超过10000条数据 延迟固定为1秒 let time = records.length*0.1>1000?1000:records.length*0.1; var myMask = new Ext.LoadMask({ msg: "正在合并单元格...", target: grid.ownerCt }); myMask.show(); setTimeout(() => { grid.mergeCells(grid,[...new Array(grid.columns.length).keys()]); myMask.destroy(); }, time); }); }, /* * 合并列 * cols 需要合并的列index */ mergeCells:function(grid,cols){ var id = grid.getView().getId(); //清除所有监听事件 避免一些bug grid.getView().clearListeners(); //获取view var gridview = document.getElementById(id); //获取所有的tr[] var trArray = gridview.getElementsByTagName('tr'); //只有一行时不合并 var length = trArray.length; if (length <= 1) { return; } //把所有的行都放入第一个table 并把原来的列删除 for (var i = 1; i < length; i++) { //指定位置插入对应table行的html文本 trArray[i - 1].insertAdjacentHTML("afterEnd", trArray[i].innerHTML); trArray[i + 1].remove(); } //margin像素 根据该合并grid的每一行的高度而定 const pixel = 25; //通用方法行合并单元格 var length = trArray.length; var html = "