el-table树形表格实现复选框多选效果
发布人:shili8
发布时间:2025-03-09 06:38
阅读次数:0
**树形表格实现复选框多选效果**
在实际的开发中,我们经常需要实现复杂的数据展示和操作功能。其中,树形表格是其中一种常见的需求。在本文中,我们将介绍如何使用 `el-table` 实现树形表格,并且支持复选框多选效果。
### 一、基本结构首先,我们需要定义一个基本的树形表格结构。我们可以使用 `el-table` 组件来实现这一点。
html<template>
<div>
<el-table :data="tableData" style="width:100%" @selection-change="handleSelectionChange">
<!-- 表头 -->
<el-table-column type="selection" width="55"></el-table-column>
<!-- 树形结构的列 -->
<el-table-column label="树形结构" prop="treeStructure" width="200"></el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [
// 表格数据 ]
}
},
methods: {
handleSelectionChange(val) {
console.log(val)
}
}
}
</script>
### 二、树形结构的实现接下来,我们需要实现树形结构的功能。我们可以使用 `el-table-column` 组件来定义一个树形结构列。
html<template>
<div>
<el-table :data="tableData" style="width:100%" @selection-change="handleSelectionChange">
<!-- 表头 -->
<el-table-column type="selection" width="55"></el-table-column>
<!-- 树形结构的列 -->
<el-table-column label="树形结构" prop="treeStructure" width="200">
<template slot-scope="scope">
<span v-if="!scope.row.children">{{ scope.row.treeStructure }}</span>
<div v-else>
<el-checkbox :indeterminate="scope.row.isIndeterminate" @change="handleCheckAllChange(scope.row)" v-model="scope.row.checkAll"></el-checkbox>
<ul class="tree-list">
<li v-for="(item, index) in scope.row.children" :key="index">
{{ item.treeStructure }}
<span v-if="item.children.length >0">({{ item.children.length }})</span>
<div v-if="item.children.length >0">
<el-checkbox @change="handleCheckChange(scope.row, index)" v-model="scope.row.children[index].checkAll"></el-checkbox>
<ul class="tree-list">
<li v-for="(grandChild, grandChildIndex) in item.children" :key="grandChildIndex">
{{ grandChild.treeStructure }}
<span v-if="grandChild.children.length >0">({{ grandChild.children.length }})</span>
<!-- ... -->
</li>
</ul>
</div>
</li>
</ul>
</div>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [
// 表格数据 ]
}
},
methods: {
handleSelectionChange(val) {
console.log(val)
},
handleCheckAllChange(row) {
row.children.forEach((item, index) => {
item.checkAll = row.checkAll if (item.children.length >0) {
item.children.forEach((grandChild, grandChildIndex) => {
grandChild.checkAll = row.checkAll })
}
})
},
handleCheckChange(row, index) {
row.children[index].checkAll = !row.children[index].checkAll if (row.children[index].children.length >0) {
row.children[index].children.forEach((grandChild, grandChildIndex) => {
grandChild.checkAll = row.children[index].checkAll })
}
}
}
}
</script>
### 三、复选框多选效果最后,我们需要实现复选框多选效果。我们可以使用 `el-checkbox` 组件来定义一个复选框。
html<template>
<div>
<el-table :data="tableData" style="width:100%" @selection-change="handleSelectionChange">
<!-- 表头 -->
<el-table-column type="selection" width="55"></el-table-column>
<!-- 树形结构的列 -->
<el-table-column label="树形结构" prop="treeStructure" width="200">
<!-- ... -->
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [
// 表格数据 ]
}
},
methods: {
handleSelectionChange(val) {
console.log(val)
},
handleCheckAllChange(row) {
row.children.forEach((item, index) => {
item.checkAll = row.checkAll if (item.children.length >0) {
item.children.forEach((grandChild, grandChildIndex) => {
grandChild.checkAll = row.checkAll })
}
})
},
handleCheckChange(row, index) {
row.children[index].checkAll = !row.children[index].checkAll if (row.children[index].children.length >0) {
row.children[index].children.forEach((grandChild, grandChildIndex) => {
grandChild.checkAll = row.children[index].checkAll })
}
}
}
}
</script>
### 四、总结在本文中,我们介绍了如何使用 `el-table` 实现树形表格,并且支持复选框多选效果。我们定义了一个基本的树形表格结构,实现了树形结构的功能,并且实现了复选框多选效果。

