el-table 树形结构表格合并单元格
在 el-table 中有一些属性可以用于合并单元格:
1. rowspan:合并当前行的单元格个数;
2. colspan:合并当前列的单元格个数;
3. formatter:格式化单元格内容,可以返回一个对象来定义该单元格合并的行列数。
下面是一个示例代码,用于合并树形结构表格中的单元格:
```html
<el-table :data="data" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
<el-table-column prop="name" label="Name">
<template slot-scope="{row, $index}">
<div :>
{{ row.name }}
</div>
</template>
</el-table-column>
<el-table-column prop="age" label="Age">
<template slot-scope="{row, $index}">
<template v-if="!row.ageMerge">
{{ row.age }}html colspan属性
</template>
<template v-else>
<el-table-cell :rowspan="wspan" :colspan="lspan">{{row.age}}</el-table-cell>
</template>
</template>
</el-table-column>
</el-table>
```
```js
export default {
data() {
return {
data: [
{
name: 'John Brown',
age: 18,
level: 0,
hasChildren: true,
children: [
{
name: 'Jim Green',
age: 24,
level: 1,
hasChildren: false
},
{
name: 'Jim Red',
age: 20,
level: 1,
hasChildren: false
}
]
},
{
name: 'Joe Black',
age: 30,
level: 0,
hasChildren: true,
children: [
{
name: 'Jon Snow',
age: 26,
level: 1,
hasChildren: false
}
]
}
]
}
},
mounted() {
Cells()
},
methods: {
mergeCells() {
let mergedRows = 0;
this.data.forEach((item, index) => {
if (item.children && item.children.length > 0) {
let childrenCount = item.children.length;
// 合并当前行的 age 单元格
if (index === mergedRows) {
item.ageMerge = true;
wspan = childrenCount;
lspan = 1;
mergedRows += childrenCount;
childrenCount--;
}
// 合并 child 节点行的 age 单元格
item.children.forEach((child, i) => {
if (i === 0 && childrenCount > 0) {
child.ageMerge = true;
wspan = childrenCount;
lspan = 1;
} else {
child.ageMerge = false;
wspan = lspan = 1;
}
});
} else {
// 没有子节点的情况
item.ageMerge = false;
wspan = lspan = 1;
mergedRows++;
}
});
}
}
}
```
在上述代码中,我们利用了 formatter 属性来格式化 age 单元格,返回了一个对象:
```js
{
rowspan: 2, // 合并的行数
colspan: 1, // 合并的列数
age: 18 // 单元格的内容
}
```
我们利用 mergeCells 方法来计算出每个单元格需要合并的行列数,在格式化的时候使用。当然,也可以不用 formatter,直接在合并单元格的时候,用 el-table-cell 来渲染合并后的单元格。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论