el-table单元格合并
方法一:element官网给出的案例
<template>
<div>
<el-table
:data="tableData"
:span-method="arraySpanMethod"
border
style="width: 100%">
<el-table-column
prop="id"
label="ID"
width="180">
</el-table-column>
<el-table-column
prop="name"
label="姓名">
</el-table-column>
<el-table-column
prop="amount1"
sortable
label="数值 1">
</el-table-column>
<el-table-column
prop="amount2"
sortable
label="数值 2">
</el-table-column>
<el-table-column
prop="amount3"
sortable
label="数值 3">
</el-table-column>
</el-table>
<el-table
:data="tableData"
:span-method="objectSpanMethod"
border
style="width: 100%; margin-top: 20px">
<el-table-column
prop="id"
label="ID"
width="180">
</el-table-column>
<el-table-column
prop="name"
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 {
data() {
return {
tableData: [{
id: '12987122',
name: '王小虎',
amount1: '234',
amount2: '3.2',
amount3: 10
}, {
id: '12987123',
name: '王小虎',
amount1: '165',
amount2: '4.43',
amount3: 12
}, {
id: '12987124',
name: '王小虎',
amount1: '324',
amount2: '1.9',
amount3: 9
}, {
id: '12987125',
name: '王小虎',
amount1: '621',
amount2: '2.2',
amount3: 17
}, {
id: '12987126',
name: '王小虎',
amount1: '539',
amount2: '4.1',
amount3: 15
}]
};
},
methods: {
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
if (rowIndex % 2 === 0) {
if (columnIndex === 0) {
return [1, 2];
} else if (columnIndex === 1) {
return [0, 0];
}
}
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex % 2 === 0) {
return {
rowspan: 2,
colspan: 1
};
} else {
return {
rowspan: 0,
colspan: 0
};
}
}
}
}
};
</script>

方法二:网上找的合并数据相同的单元格方法
<el-table
:span-method="objectSpanMethod"
export default {
data() {
return {
rowList: [], //合并单元格
spanArr: [], //合并单元格
position: 0, //合并单元格
created() {
this.rowspan()
},
methods: {
rowspan() {
this.ZTPF.data.forEach((item, index) => {
if (index === 0) {
this.spanArr.push(1)
this.position = 0
} else {
if (
this.ZTPF.data[index].ZHScore === this.ZTPF.data[index - 1].ZHScore //判断ZHScore列中数据相同的单元格
) {
this.spanArr[this.position] += 1
this.spanArr.push(0)
} else {
this.spanArr.push(1)
this.position = index
}
}
})
},
//合并单元格
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 14) {
const _row = this.spanArr[rowIndex]
const _col = _row > 0 ? 1 : 0
return {
rowspan: _row,
colspan: _col
}
}
}
此方法可通过增加if语句增加判断的列数量
spanOneArr: [], //合并单元格
spanTwoArr: [], //合并单元格
positionOne: 0, //合并单元格
positionTwo: 0, //合并单元格
=======================================================================
mounted() {
this.rowspan()
},
======================================================================
methods: {
rowspan() {
this.tableData.forEach((item, index) => {
if (index === 0) {
this.spanOneArr.push(1)
this.spanTwoArr.push(1)
} else {
if (
this.tableData[index].params1 === this.tableData[index - 1].params1
) {
this.spanOneArr[this.positionOne] += 1
this.spanOneArr.push(0)
} else {
this.spanOneArr.push(1)
this.positionOne = index
}
if (
this.tableData[index].params2 === this.tableData[index - 1].params2
) {
this.spanTwoArr[this.positionTwo] += 1
this.spanTwoArr.push(0)
} else {
this.spanTwoArr.push(1)
this.positionTwo = index
}
}
})
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 1) {
const _row = this.spanOneArr[rowIndex]
const _col = _row > 0 ? 1 : 0
return {
rowspan: _row,
colspan: _col
}
}
if (columnIndex === 2) {
const _row = this.spanTwoArr[rowIndex]
const _col = _row > 0 ? 1 : 0
return {
rowspan: _row,
colspan: _col
}
}
}`
方法三: 通过某一行数据进行判断,合并任意具有列单元格
rowIndex: '-1', //合并单元格
OrderIndexArr: [], //合并单元格
hoverOrderArr: [], //合并单元格
====================================================
mounted() {
this.getOrderNumber()
},
=====================================================
// 获取相同编号的数组
getOrderNumber() {
let OrderObj = {}
this.tableData.forEach((element, index) => {
element.rowIndex = index
if (OrderObj[element.params1]) {
OrderObj[element.params1].push(index)
} else {
OrderObj[element.params1] = []
OrderObj[element.params1].push(index)
}
}) // 将数组长度大于1的值 存储到this.OrderIndexArr(也就是需要合并的项)
for (let k in OrderObj) {
if (OrderObj[k].length > 1) {
this.OrderIndexArr.push(OrderObj[k])
}
}
},
// 合并单元格
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 1 || columnIndex === 2) {
for (let i = 0; i < this.OrderIndexArr.length; i++) {
let element = this.OrderIndexArr[i]
for (let j = 0; j < element.length; j++) {
let item = element[j]
if (rowIndex == item) {
if (j == 0) {
return {
rowspan: element.length,
colspan: 1
}
} else if (j != 0) {
return {
rowspan: 0,
colspan: 0
}
}
}
}
}
}
}