說明:本篇采用2.12版本,在官方文檔上面分別提供了行或列的合並,整合起來后根據個人或項目不同的需求,整合起來的合並效果會不相同,這里只進行舉例。
文末說明示例弊端和本篇示例可調控范圍
<template>
<div>
<el-table
:data="tableData"
:span-method="arraySpanMethod"
border
style="width: 100%">
<el-table-column
prop="addr"
label="地址">
</el-table-column>
<el-table-column
prop="name"
label="姓名">
</el-table-column>
<el-table-column
prop="nameA"
label="別名">
</el-table-column>
<el-table-column
prop="amount1"
label="數值 1">
</el-table-column>
<el-table-column
prop="amount2"
label="數值 2">
</el-table-column>
<el-table-column
prop="amount3"
label="數值 3">
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
name: "newTbTest",
data() {
return {
tableData: [{
addr: '成都',
name: '王小虎1',
nameA: '王小虎1',
amount1: '234',
amount2: '3.2',
amount3: 10,
id: '12987122'
}, {
addr: '成都',
name: '王小虎2',
nameA: '王小虎2',
amount1: '165',
amount2: '4.43',
amount3: 12,
id: '12987122'
}, {
addr: '長沙',
name: '王小虎3',
nameA: '王小虎3',
amount1: '324',
amount2: '1.9',
amount3: 9,
id: '12987122'
}, {
addr: '長沙',
name: '王小虎4',
nameA: '王小虎5',
amount1: '621',
amount2: '2.2',
amount3: 17,
id: '12987122'
}, {
addr: '長沙',
name: '王小虎4',
nameA: '王小虎6',
amount1: '539',
amount2: '4.1',
amount3: 15,
id: '12987122'
}]
};
},
methods: {
// ele自定義方案
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
// 合並行列產品名字相同合並(計算組長度以內的列,需要進行合並操作的列)
let mergeLength = 3;//需要進行橫縱合並的列
if (columnIndex < mergeLength) {
let finArray = [1,1];
// 處理行數據
let cgname = Object.keys(row)[columnIndex]
if(rowIndex === 0 || row[cgname] !== this.tableData[rowIndex-1][cgname]){
let rowspan = 1;
//計算需要進行合並操作的行
for(let i=0; i<this.tableData.length-1; i++){
// 只合並連續的
if(this.tableData[i][cgname] === row[cgname] && this.tableData[i+1][cgname] === row[cgname]){
rowspan ++;
}
}
finArray[0] = rowspan;
}else {
finArray[0] = 0;
}
// 處理列數據
let colkeys = Object.keys(row);
let cgvalue = Object.values(row)[columnIndex]
if(columnIndex ===0 || row[colkeys[columnIndex-1]] !== row[colkeys[columnIndex]]){
let colspan = 1;
//計算需要進行合並操作的列
for(let i=columnIndex; i<mergeLength; i++) {
// 只合並連續的
if (row[colkeys[i]]===cgvalue && row[colkeys[i+1]]===cgvalue && i+1<mergeLength) {
colspan ++;
}
}
finArray[1] = colspan;
} else {
finArray[1] = 0;
}
return finArray
}
}
},
mounted(){
}
}
</script>
<style scoped>
</style>
示例弊端:1.同官方一樣,合並行之后,就沒有在使用排序會渲染導致問題。2.示例控制了合並的列數和連續條件合並,所以tabaData數據列項順序必須同表頭名字順序一致。3.示例同官方一致采用的簡單的值合並,值相同就會進行合並計算,受2條件約束后不會出現前后跨行或跨列名字相同統計錯亂問題。
可調范圍:1.連續合並或指定條件合並,根據tabaData數據構成調控。2.可以根據id或其他特殊標識符進行合並,根據tabaData數據構成調控。3.增加合並規則和唯一判斷條件后tabaData數據可以不同表頭名順序一致(非連續合並)。
