vue table树形数据 多选,分页多选,数据保存 实现逻辑

embedded/2025/3/16 22:15:44/

vue table树形数据 多选,分页多选留存, 实现逻辑

在这里插入图片描述
如上图所示,vue table 的多选是不能选中子级的上面是我重写后的效果

实现逻辑有很多种,我直接使用checkbox 组件

以下只写出实现逻辑,具体的数据结构,不赘述了,直接抄官网即可

1. 首列直接显示全选checkbox,以及每列开头的checkbox

<template><el-table-column prop="id" label="全选" width="120"><template slot="header"><el-checkbox v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox></template><template slot-scope="scope"><el-checkbox v-model="scope.row.isSelect" @change="(checked) => handleChecked(checked, scope.row)">{{scope.row.id }}</el-checkbox></template></el-table-column>
</template>

2. js 实现逻辑

  • 获取树形数据,遍历,添加是否选中的字段。目的是重新加载列表,已选中的渲染
  • 处理全选,单独选中,取消的逻辑。主要的是,不管是全选和单个选中,都需要处理子级数据
  • 处理选中时,有保存选中的逻辑,方便分页后,能正常渲染已选中
  • 我的树形只有二级,处理子级时,直接就遍历了,如果大家是多级,需要自己优化成 递归写法。正常够用

<script>
export default {data() {return {tableData: [],select_row: [],selectData: [],};},methods: {getList() {this.loading = true;orderWorkList({page: this.pageParam.page,perPage: this.pageParam.size,}).then((res) => {let tableData = res.data.list;//添加一个是否选中的属性tableData.forEach((item, index) => {item.isSelect = this.select_row && this.select_row.indexOf(item.id) > -1 ? true : false;if (item.child_many && item.child_many.length > 0) {item.child_many.map(itemChild => {itemChild.isSelect = this.select_row && this.select_row.indexOf(itemChild.id) > -1 ? true : false;return itemChild;});}});this.loading = false;});},//全选handleCheckAllChange(checked) {this.tableData.forEach(item => {item = this.handleSelect(item, checked)});},//单选每条handleChecked(checked, row) {this.handleSelect(row, checked)this.handleParentChecked(row);//this.saveCheckdata();},//checkbox选中处理子级handleSelect(row, checked) {row.isSelect = checked ? true : false;this.saveCheckdata(row);if (row.child_many && row.child_many.length > 0) {row.child_many.forEach(itemChild => {itemChild.isSelect = checked ? true : false;this.saveCheckdata(itemChild);return itemChild;});}return row;},//保存选择的数据saveCheckdata(item) {if (item.isSelect) {this.selectData.push(item);} else {let index = this.selectData.findIndex(row => row.id == item.id);if (index > -1) {this.selectData.splice(index, 1);}}},//当所有子节点取消选中,父节点也要取消选中;当所有子节点已选中,父节点也要相应选中handleParentChecked(row) {this.tableData.forEach(item => {if (item.child_many && item.child_many.length > 0 && row.fid == item.id) {let rowParentFlag = true;item.child_many.forEach(itemChild => {rowParentFlag = itemChild.isSelect && rowParentFlag;});item.isSelect = rowParentFlag;return item;}});},}
}
</script>

逻辑很简单,说白了就是玩数据。

选中父级,然后处理子级状态。

子级数据变动后,然后看看父级是否有影响。

遇到了,我就写下,供大家参考参考。欢迎大家评论,留言。


http://www.ppmy.cn/embedded/173166.html

相关文章

基于NXP+FPGA轨道交通3U机箱结构逻辑控制单元(LCU)

基于NXPFPGA轨道交通3U机箱结构逻辑控制单元&#xff08;LCU&#xff09; 逻辑控制单元&#xff08;LCU&#xff09;是专门为在轨道交通环境下应用而设计的数字逻辑控制装置。用于替代列车控制中的硬接线继电器回路&#xff0c;并实现其相应的逻辑控制功能。 模块化 LCU装置采用…

Excel(函数篇):Vlookup函数 详细用法

目录 Vlookup函数基础用法精确查找易错问题员工信息查询表 进阶用法近似匹配&#xff08;模糊查找&#xff09;结合通配符查找反向查找 高级技巧多条件查找动态列查询 错误处理屏蔽错误值处理数字/文本格式问题注意事项常见错误解决方案 拓展用法跨表与跨工作簿查找查找返回多列…

env.development.local 和 env.development 的区别

env.development.local 和 env.development 的区别 区别1、场景2、git管理3、加载策略 思考原因如下 区别 1、场景 env.development: 用于开发环境的环境变量配置env.development.local: 用于存储特定于开发者的本地配置信息 2、git管理 env.development.local 会通过*.loca…

责任链模式如何减少模块之间的耦合

责任链模式如何减少模块之间的耦合 在复杂的软件系统中&#xff0c;模块之间的耦合是一个常见的问题。高耦合的代码不仅增加了维护成本&#xff0c;还会导致系统的扩展性和灵活性受限。当我们需要为不同的请求设计灵活的处理逻辑时&#xff0c;传统的硬编码方式会将请求的发送…

UE4-UE5虚幻引擎,前置学习一--Console日志输出经常崩溃,有什么好的解决办法

有些差异 这么牛逼的引擎&#xff0c;居然有这种入门级别的问题&#xff0c;一触发清理&#xff0c;大概率(80%)会崩溃 无论虚幻5还是UE4都有这个问题&#xff0c;挺烦人的 实在忍不了了&#xff0c;这次&#xff0c;今天 就想问问有什么好的处理方法么&#xff1f;&#x…

项目开发 1-确定选题,制作原型

一、AI问答 问&#xff1a; 作为计算机专家&#xff0c;密码学家&#xff0c;给研究生一年级学生设计20个实践项目&#xff0c;具体要求如下&#xff1a; 一. 总体要求 必须使用 Linux 系统调用&#xff0c;要求使用文件I/O,多进程或多线程&#xff0c;一定要用到 Socket 系统…

Web服务器配置、虚拟主机配置、访问权限控制

一、Web服务器配置——建站&#xff0c;测试虚拟主机访问 内容概述&#xff1a; 配置虚拟主机并启动XAMPP的Apache。在htdocs目录中创建www.php.test目录&#xff0c;并在其中创建index.html文件&#xff0c;内容为“Welcome www.php.test”。访问虚拟主机添加额外的虚拟主机配…

KMeans实战——聚类和轮廓系数评估啤酒数据集

原理&#xff1a; 在数据分析和机器学习中&#xff0c;聚类是一种常用的无监督学习方法&#xff0c;用于将数据集中的样本划分为若干个簇&#xff0c;使得同一簇内的样本相似度较高&#xff0c;而不同簇之间的样本相似度较低。KMeans算法是其中最常用的聚类算法之一。本文将介绍…