el-table分页时多选数据的保存和回显

大致思路:

把所有选择的数据全部存到一个大数组中,切页的时候匹配原数据利用ref节点的.toggleRowSelection方法进行回显

具体步骤:

1、勾选和全选时需要判断是选中还是取消,然后更新大数组数据。

2、分页获取新数据之后匹配当前页应该选中的数据,使用 multipleTableRef.value!.toggleRowSelection(row, true);进行回显

所有代码:(示例为前端分页)

html

<template><div style="padding: 20px"><el-tableref="multipleTableRef":data="tableData"@select-all="selectAllChange"@select="handleSelectionChange"><el-table-column type="selection" width="55" /><el-table-column prop="username" label="用户名" show-overflow-tooltip /><el-table-column prop="firstName" label="姓名" show-overflow-tooltip /><el-table-column prop="email" label="邮箱" show-overflow-tooltip /></el-table><!-- 分页器 --><div class="pagination"><el-paginationv-model:current-page="pagination.pageNum"v-model:page-size="pagination.pageSize":page-sizes="[10, 20, 50, 100]"layout="total,  prev, pager, next,sizes, jumper":total="pagination.total"@size-change="handleSizeChange"@current-change="handleCurrentChange"/></div><el-button type="primary" @click="yesTo">确 定</el-button></div>
</template>

js

<script setup lang="ts">
import { ref, reactive, nextTick } from "vue";
import { ElMessage } from "element-plus";
import { setUsers } from "../../utils/api";let listAll: any = []; // 存起来选中的数据
let multipleSelection: any = []; // 当前页选中的数据
const multipleTableRef = ref(); // 表格reflet tableData = ref<any>([]); // 表格数据
let allList = reactive<any>([]);
//分页器
const pagination = reactive<any>({pageNum: 1,pageSize: 10,total: 0,
});// 前端分页-切割数据
const paging = () => {// 起始位置 = (当前页 - 1) x 每页的大小const start = (pagination.pageNum - 1) * pagination.pageSize;// 结束位置 = 当前页 x 每页的大小const end = pagination.pageNum * pagination.pageSize;tableData.value = allList.slice(start, end);
};// 获取列表数据
const getList = async () => {// 接口请求allList = [{id:1, username: "admin1", firstName: "管理员", email: "123456@163.com" },{id:2, username: "admin2", firstName: "管理员", email: "123456@163.com" },{id:3, username: "admin3", firstName: "管理员", email: "123456@163.com" },{id:4, username: "admin4", firstName: "管理员", email: "123456@163.com" },{id:5, username: "admin5", firstName: "管理员", email: "123456@163.com" },{id:6, username: "admin6", firstName: "管理员", email: "123456@163.com" },{id:7, username: "admin7", firstName: "管理员", email: "123456@163.com" },{id:8, username: "admin8", firstName: "管理员", email: "123456@163.com" },{id:9, username: "admin9", firstName: "管理员", email: "123456@163.com" },{id:10, username: "admin10", firstName: "管理员", email: "123456@163.com" },{id:11, username: "admin11", firstName: "管理员", email: "123456@163.com" },{id:12, username: "admin12", firstName: "管理员", email: "123456@163.com" },{id:13, username: "admin13", firstName: "管理员", email: "123456@163.com" },{id:14, username: "admin14", firstName: "管理员", email: "123456@163.com" },{id:15, username: "admin15", firstName: "管理员", email: "123456@163.com" },{id:16, username: "admin16", firstName: "管理员", email: "123456@163.com" },{id:17, username: "admin17", firstName: "管理员", email: "123456@163.com" },{id:18, username: "admin18", firstName: "管理员", email: "123456@163.com" },];pagination.total = allList.length;paging(); toggleSelection(getTurn()); // 回显勾选
};
getList();// 确认导入
const yesTo = async () => {if (listAll.length) {listAll = deduplicate(listAll, "username"); //去重await setUsers(listAll);ElMessage.success("导入成功");getList();} else {ElMessage.warning("请先选择用户!");}
};// 匹配获取当前页应该选中的数据
const getTurn = () => {let list: any = [];listAll.forEach((v: any) => {tableData.value.forEach((s: any) => {if (v.username == s.username) list.push(s);});});return list;
};
// 勾选时
const handleSelectionChange = (val: any, item: any) => {multipleSelection = val;listAll.push(...multipleSelection);if (val.includes(item)) {//勾选时做的事} else {//取消勾选时做的事,listAll.forEach((v: any, i: number) => {if (v.username == item.username) {listAll.splice(i, 1);}});}
};
// 全选
const selectAllChange = (val: any) => {if (val.length) {multipleSelection = JSON.parse(JSON.stringify(val));listAll.push(...val);} else {multipleSelection.forEach((v: any) => {listAll.forEach((s: any, i: number) => {if (v.username == s.username) {listAll.splice(i, 1);}});});multipleSelection = [];}
};
// 当前页之前勾选过的数据 - 回显
const toggleSelection = (rows?: any) => {nextTick(() => {if (rows) {rows.forEach((row: any) => {multipleTableRef.value!.toggleRowSelection(row, true);});} else {multipleTableRef.value!.clearSelection();}});
};// 分页事件
const handleSizeChange = (val: number) => {pagination.page = 1;pagination.limit = val;if (listAll.length) {listAll = deduplicate(listAll, "username"); //去重}getList();
};
const handleCurrentChange = (val: number) => {pagination.page = val;if (listAll.length) {listAll = deduplicate(listAll, "username"); //去重}getList();
};
//  数组去重方法
const deduplicate = (arr: any, t: any) => {const newArr = [arr[0]];for (let i = 1; i < arr.length; i++) {let repeat = false;for (let j = 0; j < newArr.length; j++) {if (t && arr[i][t] === newArr[j][t]) {repeat = true;break;}}if (!repeat) newArr.push(arr[i]);}return newArr;
};
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023Q4 私有化版本发布,和鲸 ModelWhale 持续赋能大科研、高校教改的 AI for Science

作为数据科学多人协同平台&#xff0c;和鲸 ModelWhale 从一而终地为各级用户提供完备而周全的解决方案&#xff0c;覆盖数据研究、算法探索、模型调优、Python 案例教学等多个场景。特别地&#xff0c;如果对研究分析平台有更高的安全合规要求、希望兼容原有业务系统&#xff…

不懂编程,如何获取全面海量的重要数据?

在大数据和人工智能时代&#xff0c;数据的重要性变得更加突出。以下是数据在这个时代的重要性所体现的几个方面&#xff1a; 决策依据 模型训练 个性化服务 创新驱动 智能决策支持 本文&#xff0c;将介绍两个获取数据的方法 1、利用爬虫框架写采集程序 在前面&#xff…

JIRA 重建索引

JIRA为了增快搜索速度&#xff0c;为所有的问题的字段生成一个索引文件。这个索引文件存在磁盘的一个文件里面&#xff0c; 并且会实时更新。但是有时候某些操作后&#xff08;例如增加自定义字段&#xff09;&#xff0c;需要重新建索引。 详情请见 Re-indexing after major c…

(华为)网络工程师教程笔记(网工教程)网工入门——3、静态路由路由表的配置

参考文章&#xff1a;【全236集】网络工程师从基础入门到进阶必学教程&#xff01;通俗易懂&#xff0c;2023最新版&#xff0c;学完即可就业&#xff01;网工入门_华为认证_HCIA_HCIP_数据通信_网工学习路线 文章目录 13. 网工入门10-静态路由&#xff08;路由表的配置&#x…

GORM 多对多many2many 自定义连接表

文章目录 多对多 many2many表结构搭建多对多添加多对多查询多对多的删除、更新 自定义连接表生成表结构操作案例添加文章并添加标签&#xff0c;并自动关联添加文章&#xff0c;关联已有标签给已有文章关联标签替换已有文章的标签查询文章列表&#xff0c;显示标签 自定义连接…

在 Mac 上使用浅色或深色外观

在 Mac 上&#xff0c;选取苹果菜单 >“系统设置”&#xff0c;然后点按边栏中的“外观” 。&#xff08;你可能需要向下滚动。&#xff09;选择右侧的“浅色”、“深色”或“自动”。 “浅色”表示不会发生变化的浅色外观。 “深色”表示不会发生变化的深色外观。“深色模式…

uniapp 之 短信验证码登录

一、需求 输入手机号码&#xff0c;可以获取验证码。 二、实现效果 点击前&#xff1a; 点击后&#xff1a; 三、代码实现 <template><view class"login"><view class"infobox"><view class"item"><input type…

使用Java语言判断一个数据类型是奇数还是偶数

判断一个数字类型是奇数&#xff0c;还是偶数&#xff0c;只需要引入Scanner类&#xff0c;然后按照数据类型的定义方式进行定义&#xff0c;比较是按照与2进行整除后的结果&#xff1b;如果余数为零&#xff0c;则代表为偶数&#xff0c;否则为奇数。 import java.util.Scann…

★136. 只出现一次的数字(位运算)

136. 只出现一次的数字 这个题主要考察的知识点是位运算&#xff08;这里是异或&#xff09; 如果不要求空间复杂度为O&#xff08;1&#xff09;&#xff0c;那有很多方法。但是这里有这样的要求。 可以通过位运算 的方法来实现。 异或运算 ⊕有以下三个性质&#xff1a; 任…

数据分析师的学习之路-pandas篇(6)

接上篇&#xff0c;画图告一段落&#xff0c;现在学习表格的各种操作。 3.8 表格操作 3.8.1 表的校验 表里有些列的数据是有一定的要求的&#xff0c;比如说下面这个表&#xff0c;Score分数列&#xff0c;要求成绩只能是0到100&#xff0c;那如果有出现错误的数据&#xff0…

Swift 常用关键字

目录 一、数据类型 1. 流程控制 2. 访问控制 3. 功能修饰词 4. 错误处理 5. 泛型和类型 6. 其它关键字 二、部分关键字说明 1. guard 2. class 和 struct struct&#xff08;结构体&#xff09; class&#xff08;类&#xff09; 使用场景 3. mutating 4. proto…

【算法专题】前缀和

前缀和 前缀和1. 前缀和【模板】2. 二维前缀和【模板】3. 寻找数组的中心下标4. 除自身以外数组的乘积5. 和为K的子数组6. 和可被K整除的子数组7. 连续数组8. 矩阵区域和 前缀和 1. 前缀和【模板】 题目链接 -> Nowcoder -DP34.前缀和【模板】 Nowcoder -DP34.前缀和【模…

nodejs微信小程序+python+PHP天天网站书城管理系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

matlab实践(九):分段线性插值与三次样条插值

题目 用matlab对572所在区间分别进行分段线性插值、三次样条插值&#xff0c;计算出151&#xff0c;159&#xff0c;984&#xff0c;995的对数值&#xff0c;画出图形并在图形上用红色圆圈标记151&#xff0c;159&#xff0c;984&#xff0c;995所在的点,同时在图形中显示这些…

Java Socket编程之基于TCP协议通信

1.说明 Socket&#xff08;套接字&#xff09;是计算机网络编程中用于实现网络通信的一种编程接口或抽象概念。 它提供了一种标准的接口&#xff0c;使应用程序能够通过网络与其他计算机进行通信。 Socket可以看作是应用程序与网络之间的一个通信端点&#xff0c;类似于电话中…

如何在 Chrome 上调试文件打断点

1. 控制台进入 Source 2. CtrlP 输入文件名称 3. 在需要的位置手动打断点 4. 重新触发代码运行&#xff0c;触发断点

分享 | 顶刊高质量论文插图配色(含RGB值及16进制HEX码)(第一期)

我在很早之前出过一期高质量论文绘图配色&#xff0c;但当时觉得搜集太麻烦于是就没继续做&#xff0c;后来用MATLAB爬了上万张顶刊绘图&#xff0c;于是又想起来做这么一个系列&#xff0c;拿了一个多小时写了个提取论文图片颜色并得出RGB值和16进制码并标注在原图的代码&…

简单了解传输层协议之TCP和UDP

目录 一、什么是端口号? 二、TCP协议 2.1 TCP报文格式 2.2 三次握手 2.3 四次挥手 2.4 窗口流量控制 三、UDP协议 3.1 UDP报文格式 3.4 传输过程 一、什么是端口号? 我们自己的一台电脑上有时可能会同时运行多个进程软件来进行上网。那么当网络上的服务器响应我们电…

Chrome清除特定网站的Cookie,从而让网址能正常运行(例如GPT)

Chrome在使用某些网址的时候&#xff0c;例如GPT的时候&#xff0c;可能会出现无法访问这个网址的情况&#xff0c;就是点不动啥的 只需要把你需要重置的网址删除就好了

C语言小游戏:三子棋

目录 &#x1f30d;前言 &#x1f685;目录设计 &#x1f48e;游戏逻辑设置 ⚔三子棋棋盘设计 ⚔三子棋运行逻辑 &#x1f440;怎么设置人下棋 &#x1f440;怎么设置电脑下棋 ✈如何判断输赢 ✍结语 &#x1f30d;前言 Hello,csdn的各位小伙伴你们好啊!这次小赵给大…