因实际业务需求,此处根据purchaseNo字段进行表格行合并;
a. 先根据purchaseNo字段将表格数据排序,purchaseNo相同的数据排在一起
b. 在表格上添加合并行列的方法;:span-method="arraySpanMethod"
官方说明:( 通过给table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。该函数可以返回一个包含两个元素的数组,第一个元素代表rowspan,第二个元素代表colspan。 也可以返回一个键名为rowspan和colspan的对象)
c. 在methods中定义合并行列的方法;arraySpanMethod,返回一个数组或者对象
<el-table :data="tableData" :span-method="arraySpanMethod" border style="width: 100%">
........
</el-table>
<script>
....
methods() {
// 合并相同的采购订单编号行,如果返回[0,1]则表示改行也被合并了
arraySpanMethod ({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
return {
rowspan: row.rowspan,
colspan: row.rowspan > 0 ? 1 : 0
}
}
},
// 计算每行数据需要合并的行rowspan,在表格数据更新后进行调用
setrowspans (list) {
list.forEach(v => {
v.rowspan = 1
})
// 双层循环
for (let i = 0; i < list.length; i++) {
/**
* 内层循环,上面已经给所有的行都加了v.rowspan = 1
* 如果当前行的purchaseNo和下一行的purchaseNo相等
* 就把当前v.rowspan + 1
* 下一行的v.rowspan - 1
*/
for (let j = i + 1; j < list.length; j++) {
// 此处可根据相同字段进行合并,此处是根据的purchaseNo,实际情况根据业务需要修改
if (list[i].purchaseNo === list[j].purchaseNo) {
list[i].rowspan++
list[j].rowspan--
} else {
break
}
}
// 这里跳过已经合并的行数据,从下一次需要合并的行开始
i = i + list[i].rowspan - 1
}
}
}
</script>