2 添加另一种动态合并单元格方法
由于原文动态合并单元格写的比较繁琐,这里将提供更简单的办法
通过findIndex与findLastIndex分别找到需要合并的数据开始位置与结束位置,再由结束位置 - 开始位置即可得出合并几行,列同理。
<template>
<div>
<el-table :data="tableData" style="width: 100%" :span-method="spanMethod" ref="tableRef">
<el-table-column prop="date" label="日期" width="150"> </el-table-column>
<el-table-column label="配送信息">
<el-table-column prop="name" label="姓名" width="120">
</el-table-column>
<el-table-column label="地址">
<el-table-column prop="province" label="省份" width="120">
</el-table-column>
<el-table-column prop="city" label="市区" width="120">
</el-table-column>
<el-table-column prop="address" label="地址" width="300">
</el-table-column>
<el-table-column prop="zip" label="邮编" width="120">
</el-table-column>
<el-table-column prop="articleNumber" label="物品数量" width="120">
</el-table-column>
<el-table-column prop="zipNumber" label="邮件数量" width="120">
</el-table-column>
<el-table-column prop="zipNumber" label="数量" width="120">
</el-table-column>
</el-table-column>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
name: "tableMerge",
data () {
return {
tableColumnSpanTime: [],
tableData: [
{
id: "1",
date: "2016-05-03",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
articleNumber: 10,
zipNumber: 15,
},
{
id: "1",
date: "2016-05-02",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
articleNumber: 10,
zipNumber: 15,
},
{
id: "2",
date: "2016-05-04",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
articleNumber: 10,
zipNumber: 15,
},
{
id: "3",
date: "2016-05-01",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
articleNumber: 10,
zipNumber: 15,
},
{
id: "3",
date: "2016-05-08",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
articleNumber: 10,
zipNumber: 15,
},
{
id: "3",
date: "2016-05-06",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
articleNumber: 10,
zipNumber: 15,
},
{
id: "4",
date: "2016-05-07",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
articleNumber: 10,
zipNumber: 15,
},
],
};
},
mounted () {
this.mergingRule();
},
methods: {
// 制定合并规则
mergingRule () {
let val = []
this.tableData.forEach((x, index) => {
// 判断是否已存入相同项
if (val.find(v => x.id === v.id)) {
val.push(x)
this.tableColumnSpanTime.push({
start: '', end: "" })
} else {
val = []
val.push(x)
this.tableColumnSpanTime.push({
start: this.tableData.findIndex(item => item.id === x.id), end: this.tableData.findLastIndex(item => item.id === x.id) + 1 })
}
})
console.log(this.tableColumnSpanTime);
},
// 合并单元格
// { 当前行的值, 当前列的值, 行的下标, 列的下标 }
spanMethod ({
row, column, rowIndex, columnIndex }) {
try {
if (columnIndex === 0 || columnIndex === 2) {
if (this.tableColumnSpanTime[rowIndex].end !== '' && this.tableColumnSpanTime[rowIndex].start !== '') {
return {
rowspan: this.tableColumnSpanTime[rowIndex].end - this.tableColumnSpanTime[rowIndex].start,
colspan: 1,
};
} else {
return {
rowspan: 0,
colspan: 0,
};
}
}
} catch (error) {
// console.log(error);
}
},
},
};
</script>
<style scoped lang="less">
</style>