合并行---
实现逻辑
- 使用
span-method属性,返回对象{rowspan: num,colspan: 1},
- 如果需要合并第一行和第二行,那么第一行返回值为
{rowspan: 2,colspan: 1},第二行返回值:{rowspan: 2,colspan: 1}
- 所以核心是设置
rowspan的值,
- 通过递归的方式,判断相邻行的值是否一致:
- 判断前一行与该行值是否一致,如果一致
rowspan置为0
- 如果不等则判断下一行与该行值是否相等,如果一致则该项
rowspan的值+1,不一致则rowspan的值置为1
示例代码:
<el-table :data="state.tableData" max-height="340px"
:span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px">
<el-table-column prop="typeName" label="评估类型" width="180" align="center" />
...
</el-table>
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }: any) => {
let num = 1
if (columnIndex === 0) {
num = recursionRowSpan(row, rowIndex, 'typeName', state.tableData)
}
return {
rowspan: num,
colspan: 1,
};
}
let nowRowSpan = 1;
const recursionRowSpan: any = (row: any, rowIndex: number, str: string, data: any) => {
let num: number = 0;
if (nowRowSpan == 1 && rowIndex > 0 && row[str] == data[rowIndex - 1][str]) {
return 0;
}
if (rowIndex + 1 < data.length && row[str] == data[rowIndex + 1][str]) {
nowRowSpan++;
num = rowIndex + 1;
return recursionRowSpan(data[num], num, str, data);
} else {
num = nowRowSpan;
nowRowSpan = 1;
return num;
}
}
实例图片:

合并列---
实现逻辑
- 合并列比较简单,判断合并那一列然后返回
{rowspan: 1,colspan: num}
示例代码:
<el-table :data="tableData" style="width: 100%" :span-method="objectSpanMethod"></el-table>
const objectSpanMethod = ({row, column, rowIndex, columnIndex}: any) => {
let num = 1
if (columnIndex === 0) {
num = 2
}
if (columnIndex === 1) {
num = 0
}
return {
rowspan: 1,
colspan: num,
}
}
实例图片:
