部分代码
<el-table
ref="tableRef"
border
:data="entryEntity"
style="width: 100%; margin-bottom: 20px"
height="500px"
:header-cell-style="handerMethod"
:span-method="mergeSub"
>
<el-table-column
prop="subName"
label="子公司"
align="center"
width="120"
/>
<el-table-column
prop="productTypeName"
label="子公司"
align="center"
width="120"
/>
.......
</el-table>
合并表头:
:header-cell-style="handerMethod" //合并表头用这个
// 隐藏表头
handerMethod({ row, column, rowIndex, columnIndex }) {
if (row[0].level === 1) {
// 这里有个非常坑的bug 必须是row[0]=0 row[1]=2才会生效
row[0].colSpan = 0
row[1].colSpan = 2
if (columnIndex === 0) {
return { display: 'none' }
}
}
},
合并数据相同的单元格:
:span-method="mergeSub" //合并数据相同的单元格
mergeSub({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
// 获取当前单元格的值
const currentValue = row[column.property]
// 获取上一行相同列的值
// 这里的entryEntity是表格里的数据
const preRow = this.entryEntity[rowIndex - 1]
const preValue = preRow ? preRow[column.property] : null
// 如果当前值和上一行的值相同,则将当前单元格隐藏
if (currentValue === preValue) {
return { rowspan: 0, colspan: 0 }
} else {
// 否则计算当前单元格应该跨越多少行
let rowspan = 1
for (let i = rowIndex + 1; i < this.entryEntity.length; i++) {
const nextRow = this.entryEntity[i]
const nextValue = nextRow[column.property]
if (nextValue === currentValue) {
rowspan++
} else {
break
}
}
return { rowspan, colspan: 1 }
}
}
},