前言
element-ui 1.0的时候没有表格合并的方法,这当时做表格合并的功能时候,非常头疼。2.0开始官方已经支持表格合并的方法,那怎么做到表格动态合并呢,还是直接看代码吧。
官方例子
通过给table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。该函数可以返回一个包含两个元素的数组,第一个元素代表rowspan,第二个元素代表colspan。 也可以返回一个键名为rowspan和colspan的对象。
<template>
<div>
<el-table
:data="tableData6"
: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 {
tableData6: [{
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: {
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex % 2 === 0) {
return {
rowspan: 2,
colspan: 1
};
} else {
return {
rowspan: 0,
colspan: 0
};
}
}
}
}
};
</script>
https://jsfiddle.net/ve4sy51x/1/
合并方法
https://jsfiddle.net/ve4sy51x...
通过一层一层往下找,
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if(cacheData.length<=0){
return false
}
let colNum = cacheData[rowIndex][columnIndex];
if (colNum < 2) {
return {
rowspan: colNum,
colspan: colNum
}
} else {
return {
rowspan: colNum,
colspan: 1
}
}
},
combine(){
this.tableData.forEach((res,i)=> {
cacheData[i] = [];
colData.forEach((item, j) => {
if (i === 0) {
cacheData[0][j] = 1;
cache = JSON.parse(JSON.stringify(res));
cacheIndex[j] = 0;
} else {
if(res[item.prop] === cache[item.prop] && item.prop !=='index'){
cacheData[cacheIndex[j]][j]++;
cacheData[i][j] = 0
}else{
cache[item.prop] = res[item.prop];
cacheIndex[j] = i;
cacheData[i][j] = 1;
}
}
})
})
}
预处理生成一个二维数组,然后在放在objectSpanMethod方法里面。