效果圖
代碼
<el-table
:data="tableData"
:span-method="objectSpanMethod"
border
style="width: 100%;"
height="53vh"
v-loading="dataListLoading"
>
this.getSpanArr(this.tableData);//后台獲取到數據后進行數據處理 getSpanArr(data) {
this.spanArr=[]
for (var i = 0; i < data.length; i++) { if (i === 0) { this.spanArr.push(1); this.pos = 0 } else { // 判斷當前元素與上一個元素是否相同 inAccessCode(批次字段) if (data[i].inAccessCode === data[i - 1].inAccessCode) { this.spanArr[this.pos] += 1; this.spanArr.push(0); } else { this.spanArr.push(1); this.pos = i; } } } }, //進行表格合並 objectSpanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { const _row = this.spanArr[rowIndex]; const _col = _row > 0 ? 1 : 0; return { rowspan: _row, colspan: _col } } },
原理
getSpanArr(data)方法 data就是我們從后台拿到的數據,通常是一個數組;spanArr是一個空的數組,用於存放每一行記錄的合並數;pos是spanArr的索引。
如果是第一條記錄(索引為0),向數組中加入1,並設置索引位置;如果不是第一條記錄,則判斷它與前一條記錄是否相等,如果相等,則向spanArr中添入元素0,並將前一位元素+1,表示合並行數+1,
以此往復,得到所有行的合並數,0即表示該行不顯示
[0,0] 表示這一行不顯示, [2,1]表示行的合並數(該原理引用https://www.cnblogs.com/mmzuo-798/p/11686021.html )