element plus 实现跨页面+跨tab栏多选

文章目录

    • element plus 层面
    • 数据层面

菜鸟好久没写博客了,主要是没遇见什么很难的问题,今天碰见了一个没有思路的问题,解决后立马来和大家伙分享了!

菜鸟今天要实现一个需求,就是:实现跨页面+跨 tab栏 多选!界面如下:

在这里插入图片描述
菜鸟一开始感觉毫无头绪,结果没有去百度,直接问 chatGPT 了,chatGPT 直接整了一堆代码,菜鸟试了,一点屁用没有,然后只能百度,按照 csdn 的发现还是不行!

然后出去走了一圈,思来想去,把 chatGPT 的代码注释了一部分,就出效果了,果然还是人类总结的智慧更胜一筹!

这里菜鸟是四个 table 公用一个分页,切换 tab栏 把分页重置为1而已,实现跨页面+跨 tab栏 多选的具体实现:

element plus 层面

其实 element plus 提供了数据变化不改变勾选状态的东西,这里菜鸟记录一下,也方便各位读者:

vue

<!-- :row-key 必须加上 -->
<el-tableref="table1"stripe:data="tableData"style="width: 100%; height: 100%"@selection-change="handleSelectionChange":row-key="getRowKey"
><!-- :reserve-selection="true" 必须加,且要在 type="selection" 上 --><el-table-column fixed type="selection" width="55" :reserve-selection="true" />
</el-table>

js

// row-key
function getRowKey(row) {return row.id
}

数据层面

// 记录每个tab选中的row
const selectedRows = [[], [], [], []]
// 选中的行
let multipleSelection = ref([]) // 用于批量删除
const handleSelectionChange = (val) => {multipleSelection.value = val// taskaddpage是区分,因为该组件既是另一个界面又是另一个界面的弹窗;sampleType.value 代表的是tab的值if (props.taskaddpage) {selectedRows[sampleType.value] = valemit('sampleCheck', selectedRows.flat()) // 传扁平化后的数据}
}

到这里,element plus 就实现完了跨页面+跨 tab栏 多选!

可能看完真的不难,但是没有思路的时候真的很难搞,只要有思路其实都挺简单 !

菜鸟就是被chatGPT的代码搞偏了,所以搞得贼复杂,这里可以把 chatGPT 的回答放这里,反正感觉挺影响思路的:

<template><el-tabs v-model="activeTab"><el-tab-pane label="Tab 1" name="1"><el-table:data="currentTableData"@selection-change="handleSelectionChange"ref="table1"><el-table-column type="selection" width="55"></el-table-column><el-table-column prop="name" label="Name" width="120"></el-table-column><el-table-column prop="age" label="Age" width="120"></el-table-column></el-table></el-tab-pane><el-tab-pane label="Tab 2" name="2"><el-table:data="currentTableData"@selection-change="handleSelectionChange"ref="table2"><el-table-column type="selection" width="55"></el-table-column><el-table-column prop="name" label="Name" width="120"></el-table-column><el-table-column prop="age" label="Age" width="120"></el-table-column></el-table></el-tab-pane><el-tab-pane label="Tab 3" name="3"><el-table:data="currentTableData"@selection-change="handleSelectionChange"ref="table3"><el-table-column type="selection" width="55"></el-table-column><el-table-column prop="name" label="Name" width="120"></el-table-column><el-table-column prop="age" label="Age" width="120"></el-table-column></el-table></el-tab-pane><el-tab-pane label="Tab 4" name="4"><el-table:data="currentTableData"@selection-change="handleSelectionChange"ref="table4"><el-table-column type="selection" width="55"></el-table-column><el-table-column prop="name" label="Name" width="120"></el-table-column><el-table-column prop="age" label="Age" width="120"></el-table-column></el-table></el-tab-pane></el-tabs><el-pagination@current-change="handleCurrentChange":current-page="currentPage":page-size="pageSize":total="total"layout="total, prev, pager, next"></el-pagination>
</template><script setup>
import { ref, watch, computed, nextTick } from 'vue';// 当前激活的标签页
const activeTab = ref('1');// 分页信息
const currentPage = ref(1);
const pageSize = ref(10);
const total = ref(30);// 模拟的表格数据
const tableData = ref([{ name: 'John', age: 25 },{ name: 'Jane', age: 30 },{ name: 'Tom', age: 35 },{ name: 'Alice', age: 28 },{ name: 'Bob', age: 32 },{ name: 'Charlie', age: 29 },{ name: 'Dave', age: 45 },{ name: 'Eve', age: 38 },{ name: 'Frank', age: 50 },{ name: 'Grace', age: 26 },{ name: 'Heidi', age: 33 },{ name: 'Ivan', age: 27 },{ name: 'Judy', age: 40 },{ name: 'Mallory', age: 35 },{ name: 'Niaj', age: 42 },{ name: 'Oscar', age: 36 },{ name: 'Peggy', age: 39 },{ name: 'Rupert', age: 31 },{ name: 'Sybil', age: 34 },{ name: 'Trent', age: 43 },{ name: 'Victor', age: 44 },{ name: 'Wendy', age: 37 },{ name: 'Xander', age: 41 },{ name: 'Yvonne', age: 30 },{ name: 'Zach', age: 29 },
]);// 选中的行
const selectedRows = ref({'1': [],'2': [],'3': [],'4': [],
});// 标志位,避免在分页和标签页切换时触发 @selection-change
let isRestoringSelection = false;// 计算当前页显示的数据
const currentTableData = computed(() => {const start = (currentPage.value - 1) * pageSize.value;const end = start + pageSize.value;return tableData.value.slice(start, end);
});// 处理表格行选中变化
const handleSelectionChange = (selection) => {if (!isRestoringSelection) {selectedRows.value[activeTab.value] = selection;}
};// 处理分页变化
const handleCurrentChange = (page) => {currentPage.value = page;restoreSelection();
};// 监听分页变化
watch(currentPage, () => {loading.value = true;setTimeout(() => {loading.value = false;restoreSelection();}, 500); // 模拟数据加载延迟
});// 恢复表格的选中项
const restoreSelection = () => {nextTick(() => {const tableRef = activeTab.value === '1' ? table1: activeTab.value === '2' ? table2: activeTab.value === '3' ? table3: table4;isRestoringSelection = true;tableRef.value.clearSelection();selectedRows.value[activeTab.value].forEach(row => {tableRef.value.toggleRowSelection(row, true);});isRestoringSelection = false;});
};// 监听标签页切换
watch(activeTab, () => {restoreSelection();
});const table1 = ref(null);
const table2 = ref(null);
const table3 = ref(null);
const table4 = ref(null);
</script><style>
/* 样式根据需要调整 */
</style>

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

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

相关文章

CVE-2024-27292:Docassemble任意文件读取漏洞复现 [附POC]

文章目录 CVE-2024-27292&#xff1a;Docassemble任意文件读取漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 CVE-2024-27292&#xff1a;Docassemble任意文件读取漏洞复现 [附POC] 0x01 前言 …

冒泡排序与其C语言通用连续类型排序代码

冒泡排序与其C语言通用连续类型排序代码 冒泡排序冒泡排序为交换排序的一种&#xff1a;动图展示&#xff1a;冒泡排序的特性总结&#xff1a;冒泡排序排整型数据参考代码&#xff08;VS2022C语言环境&#xff09;&#xff1a; 冒泡排序C语言通用连续类型排序代码对比较的方式更…

法律行业守护神:知识库+AI大模型,解锁企业知识全周期管理

在法律行业中&#xff0c;搭建一个有效的知识库并进行企业知识全生命周期管理确实是一项不小的挑战。法律环境的复杂性和不断变化的法规要求企业必须持续更新和维护其知识库&#xff0c;以确保所有信息的准确性和实时性。 这种系统化的信息管理不仅有助于提高律师和法律顾问的…

打卡第9天-----字符串

我在自学的时候,看了卡尔的算法公开课了,有些题目我就照葫芦画瓢写了一遍js代码,差不多都写出来了,有暴力解法,有卡尔推荐的思路和方法。话不多说,直接上题上代码吧: 一、翻转字符串里的单词 leetcode题目链接:151. 反转字符串中的单词 题目描述: 给你一个字符串 s…

5个自动化面试题,助你过关斩将!

面试时&#xff0c;自动化是软件测试高频面试内容&#xff0c;通过学习和准备面试题&#xff0c;你会对可能遇到的问题有所准备&#xff0c;从而减轻面试时的紧张感&#xff0c;让你在面试中稳操胜券&#xff01; 今天&#xff0c;分享一些在面试中可能会遇到的自动化测试面试…

大学生暑假“三下乡”社会实践工作新闻投稿指南请查收!

近年来&#xff0c;大学生暑期“三下乡”社会实践工作方兴未艾&#xff0c;越来越多的大学生通过参与“三下乡”实践工作&#xff0c;走出校园&#xff0c;深入基层&#xff0c;体验农村生活&#xff0c;服务农民&#xff0c;促进农村经济社会发展&#xff0c;实现了理论与实践…

算能科技,致力于成为全球领先的通用算力供应商

算能致力于成为全球领先的定制算力提供商&#xff0c;专注于RISC-V、TPU处理器等算力产品的研发和推广应用。公司遵循全面开源开放的生态理念&#xff0c;携手行业伙伴推动RISC-V高性能通用计算产业落地&#xff1b;打造覆盖“云、边、端”的全场景产品矩阵&#xff0c;为数据中…

【eNSP模拟实验】三层交换机实现VLAN通信

实验需求 让PC1和PC2能够互相通讯&#xff0c;其中PC1在vlan10中&#xff0c;PC2在vlan20中。 实验操作 首先把PC1和PC2都配置好ip&#xff0c;配置好之后&#xff0c;点击右下角的应用 然后&#xff0c;在S2交换机&#xff08;S3700&#xff09;上做如下配置 #进入系统 <…

【Redis】Redis十大类型

文章目录 前言一、string字符串类型二、List列表类型三、 Hash表四、 Set集合五、 ZSet有序集合六、 GEO地理空间七、 HyperLogLog基数统计八、Bitmap位图九、bitfield位域十、 Stream流10.1 队列指令10.2 消费组指令10.3 ACK机制 前言 redis是k-v键值对进行存储&#xff0c;k…

【最经典的79个】软件测试面试题(内含答案)提前备战“金九银十”

001.软件的生命周期(prdctrm) 计划阶段(planning)-〉需求分析(requirement)-〉设计阶段(design)-〉编码(coding)->测试(testing)->运行与维护(running maintrnacne) 测试用例 用例编号 测试项目 测试标题 重要级别 预置条件 输入数据 执行步骤 预期结果 0002.问&…

“论软件维护方法及其应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 软件维护是指在软件交付使用后&#xff0c;直至软件被淘汰的整个时间范围内&#xff0c;为了改正错误或满足 新的需求而修改软件的活动。在软件系统运行过程中&#xff0c;软件需要维护的原因是多种多样的&#xff0c; 根据维护的原因不同&#xff0c;可以将软件维护…

CVE-2024-34351 漏洞复现

CVE-2024-34351&#xff0c;由Next.js异步函数createRedirectRenderResult导致的SSRF。 影响版本&#xff1a;13.4.0< Next.js < 14.1.1 参考文章&#xff1a; Next.js Server-Side Request Forgery in Server Actions CVE-2024-34351 GitHub Advisory Database Gi…

RK3568平台开发系列讲解(内存篇)Linux进程内存的消耗统计

🚀返回专栏总目录 文章目录 一、VSS(Virtual Set Size)二、RSS(Resident Set Size)三、PSS(Proportional Set Size)四、USS(Unique Set Size)五、其他工具Linux 提供了多种进程内存占用的度量指标, 它们反映了不同的内存使用特征: VSS 反映进程虚拟内存总需求, 包括未…

Nature Communications|柔性无感智能隐形眼镜(柔性传感/可穿戴电子/柔性电子)

南京大学徐飞(Fei Xu)、陆延青(Yanqing Lu)、陈烨(Ye Chen)和江苏省人民医院袁松涛(Songtao Yuan)团队,在《Nature Communications》上发布了一篇题为“Frequency-encoded eye tracking smart contact lens for human–machine interaction”的论文。论文内容如下: 一、 摘…

一起了解开发表单设计器的几大优势

实现提质、降本、增效的办公效率&#xff0c;可以随时来了解低代码技术平台、开发表单设计器。它们可视化操作界面、更灵活、好维护的优势特点&#xff0c;使得其在激烈的市场竞争中拥有更多强劲的市场竞争力&#xff0c;是提升办公效率的理想武器。今天&#xff0c;小编就向大…

BGP第二日

上图为今日所用拓扑 &#xff0c;其中R1和R4&#xff0c;R3和R5为EBGP邻居&#xff0c;R1和R3为IBGP邻居&#xff0c;AS200区域做OSPF动态路由 一.BGP建立邻居的六种状态 1.idle 空闲状态&#xff1a;建立邻居最初的状态 2.Connect 连接状态&#xff1a;在…

第一关:Linux基础知识

Linux基础知识目录 前言LinuxInternStudio 关卡1. InternStudio开发机介绍2. SSH及端口映射2.1 什么是SSH&#xff1f;2.2 如何使用SSH远程连接开发机&#xff1f;2.2.1 使用密码进行SSH远程连接2.2.2 配置SSH密钥进行SSH远程连接2.2.3 使用VScode进行SSH远程连接 2.3. 端口映射…

Linux C embed development (personal rveiew)

1. 如何快速去bring up bcm 的wifi chipset a. 首先的确认 编译的BSP profile b. 其次要先用 default 的kernel config 去编译 c. 现在我们的一些 PCIE/GPIO/driver 总线的设置 都在dts 中&#xff0c;有错就去改dts 2. BCM 的板子bring up 注意事项 a. fw: bcm…

攻防世界 Web_python_template_injection(flask模版注入)

学习文章&#xff1a;https://www.freebuf.com/column/187845.html https://blog.csdn.net/weixin_54515836/article/details/113778233 flask的渲染方法有render_template和render_template_string两种。 render_template()是用来渲染一个指定的文件的。使用如下 return re…

自学第十五天----深入理解函数上

1. 函数是什么&#xff1f; 维基百科中对函数的定义&#xff1a; 子程序 在计算机科学中&#xff0c;子程序&#xff08;英语&#xff1a;Subroutine, procedure, function, routine, method, subprogram, callable unit&#xff09;&#xff0c;是一个大型程序中的某部分代码…