当前位置:实例文章 » HTML/CSS实例» [文章]el-table树形表格实现复选框多选效果

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` 实现树形表格,并且支持复选框多选效果。我们定义了一个基本的树形表格结构,实现了树形结构的功能,并且实现了复选框多选效果。

其他信息

其他资源

Top