直接按照elementui表格组件给的合并单元格的方式,是写死的,不能满足动态合并的需求。一般都是自己总结合并规律,最后通过span-method方法返回的行列进行合并。
重点::span-method
上代码:
<el-table :data="tableData" border :span-method="cellMar" stripe>
<el-table-column prop="type" label="类型" width="200">
</el-table-column>
<el-table-column prop="class" label="课" width="200">
</el-table-column>
<el-table-column label="跳转">
<template scope="scope">
<el-tag :key="i" v-for="(item,i) in scope.row.urlList" :disable-transitions="false">
<a :href="url">{{item.urlName}}</a>
</el-tag>
</template>
</el-table-column>
</el-table>
//表格合并单元格跨行,实现首列根据不同类型进行跨行
getSpanArr(data) {
this.spanArr = []
for (var i = 0; i < data.length; i++) {
if (i === 0) {
this.spanArr.push(1);
this.podds = 0
} else {
/*判断当前元素与上一个元素type值是否相同
*相同就+1,代表需要合并的行+1
*/
if (data[i].type === data[i - 1].type) {
this.spanArr[this.podds] += 1;
this.spanArr.push(0);
} else {
this.spanArr.push(1);
this.podds = i;
}
}
}
},
//得到行、列的合并值
cellMar({row, column, rowIndex, columnIndex}) {
if (columnIndex === 0) {
const _rows = this.spanArr[rowIndex];
const _cols = _rows > 0 ? 1 : 0;
return {
rowspan: _rows, //跨的行合并数
colspan: _cols //跨的列合并数
}
}
},
最后,在得到表格数据时,调用getSpanArr()方法,函数参数就是表格数据的数组。如:getSpanArr(tableData);
tableData: [
{type:'语文',class:'唐诗五百首',urlList:[]},
{type:'语文',class:'宋词三百首',urlList:[]},
{type:'数学',class:'九九乘法表',urlList:[]},
{type:'数学',class:'微积分',urlList:[]},
{type:'数学',class:'行列式',urlList:[]}
],