vue-element-ui table 合并行/列
element-ui table的合并行/列
element-ui 官方文档:http://element-cn.eleme.io/#/zh-CN/component/table
官方给的文档是根据单双数来合并的,在实际调用数据的情况下,需要自己写方法
个人写法
table结构
<el-table :data="tableData" :span-method="objectSpanMethod">
<el-table-column prop="name" label="name" ></el-table-column>
<el-table-column prop="type" label="type" ></el-table-column>
<el-table-column prop="score" label="score" ></el-table-column>
</el-table>
table数据
根据name
进行合并的话,最好相同数据相邻
tableData: [
{name: '小王',type: '数学',score: 100},
{name: '小王',type: '英语',score: 90},
{name: '小王',type: '语文',score: 80},
{name: '小钱',type: '数学',score: 70},
{name: '小钱',type: '英语',score: 75},
{name: '小李',type: '数学',score: 100},
]
table操作
methods: {
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
//row 当前行数据、 column 当前列数据、 rowIndex 当前行号、 columnIndex 当前列号
if (columnIndex === 0) {
//需要合并第一列所以 columnIndex === 0 第二列 === 1 第三列 === 2 以此类推
const _row = this.spanArr[rowIndex];
const _col = _row > 0 ? 1 : 0;
return {
rowspan: _row,
colspan: _col
}
}
},
getSpanArr(data) {
for (var i = 0; i < data.length; i++) {
if (i === 0) {
this.spanArr.push(1);
this.pos = 0
} else {
// 判断当前元素与上一个元素是否相同
if (data[i].merchantId === data[i - 1].merchantId) {
this.spanArr[this.pos] += 1;
this.spanArr.push(0);
} else {
this.spanArr.push(1);
this.pos = i;
}
}
}
}
}
watch: {
tableData() {
this.spanArr = [];
this.getSpanArr(this.tableData);
}
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭