el-table实现多行合并、选择(解决合并导致的半选问题)、删除操作

news/2024/12/16 3:54:02/

背景

有个页面有这个需求,多行合并、编辑、删除、多选、header添加筛选条件

主要解决问题

  1. 表格多行合并
  2. 解决合并导致的单选、多选和状态为半选的问题
  3. 删除统一行数
  4. header筛选

没法给图,直接给代码

代码

<template><div><el-tableref="multipleTableDevice":data="tableData":span-method="objectSpanMethod"borderstyle="width: 100%; margin-top: 20px"@select="selectTab"><!-- @selection-change="handleSelectionChange" --><el-table-column prop="id" label="ID" width="180"> </el-table-column><el-table-columnprop="name"label="姓名":filters="[{ text: '王小虎1', value: '王小虎1' },{ text: '王小虎2', value: '王小虎2' },{ text: '王小虎3', value: '王小虎3' },]":filter-method="filterHandler"></el-table-column><el-table-column prop="amount1" label="数值 1(元)"> </el-table-column><el-table-column prop="amount2" label="数值 2(元)"> </el-table-column><el-table-column prop="amount3" label="数值 3(元)"> </el-table-column><el-table-column label="操作" width="130" align="center"><template><el-button type="text">编辑</el-button></template></el-table-column><el-table-column type="selection" width="55" key="selection" /></el-table></div>
</template><script>
export default {name: "HelloWorld",data() {return {tableData: [{id: "12987122",name: "王小虎1",amount1: "234",amount2: "3.2",amount3: 10,},{id: "12987122",name: "王小虎1",amount1: "165",amount2: "4.43",amount3: 12,},{id: "12987122",name: "王小虎1",amount1: "165",amount2: "4.43",amount3: 12,},{id: "12987122",name: "王小虎1",amount1: "165",amount2: "4.43",amount3: 12,},{id: "12987124",name: "王小虎2",amount1: "324",amount2: "1.9",amount3: 9,},{id: "12987124",name: "王小虎2",amount1: "621",amount2: "2.2",amount3: 17,},{id: "12987125",name: "王小虎3",amount1: "539",amount2: "4.1",amount3: 15,},],};},created() {},methods: {filterHandler(value, row) {return row.name === value;},objectSpanMethod({ row, column, rowIndex, columnIndex }) {// 仅对第一列(类别列)进行合并if (columnIndex === 0 ||columnIndex === 1 ||columnIndex === 2 ||columnIndex === 5 ||columnIndex === 6) {// 查找当前行与上一行是否属于同一类别const prevRow = this.tableData[rowIndex - 1];if (prevRow && prevRow.name === row.name) {// 如果属于同一类别,则当前行设置为不显示(即合并到上一行)return { rowspan: 0, colspan: 0 };} else {// 如果不属于同一类别,计算当前类别连续出现的行数作为rowspan的值let count = 1;for (let i = rowIndex + 1; i < this.tableData.length; i++) {if (this.tableData[i].name !== row.name) {break;}count++;}return { rowspan: count, colspan: 1 };}}},unique(arr, val) {const res = new Map();return arr.filter((item) => !res.has(item[val]) && res.set(item[val], 1));},selectTab(val, row) {// 当前是选中还是取消 true 选中 false 取消let isSelect = val.length && val.indexOf(row) > -1;// 当前显示的复选框let arr = this.unique(val, "name");// 取当前所有选中的框的iD的全集 (过滤未被选中的)let arrId = [];for (var i = 0; i < arr.length; i++) {if (isSelect || (!isSelect && arr[i].id !== row.id)) {arrId.push(arr[i].id);}}// 根据选中的id筛选数组let rowArrById = this.tableData.filter((item) => {return arrId.indexOf(item.id) > -1;});this.$nextTick(() => {this.tableData.forEach((item) => {this.$refs.multipleTableDevice.toggleRowSelection(item, false);});// 根据条件把指定行选中rowArrById.forEach((item) => {this.$refs.multipleTableDevice.toggleRowSelection(item, true);});});},},
};
</script><style scoped>
/* 样式调整,根据需要添加 */
</style>

删除功能没做,逻辑是通过id删除相同id的数据即可

如有帮助请点个赞,谢谢


http://www.ppmy.cn/news/1555485.html

相关文章

Vue实训---6-完成用户退出操作

完成用户退出操作 1.在src\stores\index.js中添加退出登录方法 setToken(newToken) { this.token newToken; }, import { defineStore } from "pinia"; import { ref, computed, reactive } from "vue";// 你可以认为 state 是 store 的数据 (…

IDEA懒人必备插件:自动生成单元测试,太爽了!

今天来介绍一款工具Squaretest&#xff0c;它是一款自动生成单元测试的插件&#xff0c;会用到它也是因为最近公司上了代码质量管控的指标&#xff0c;会考评各个项目的单元测试覆盖率&#xff0c;以及sonar扫描出来的各种问题。 很多老项目老代码&#xff0c;或者着急交付的项…

【Linux基础】基本开发工具的使用

目录 一、编译器——gcc/g的使用 gcc/g的安装 gcc的安装&#xff1a; g的安装&#xff1a; gcc/g的基本使用 gcc的使用 g的使用 动态链接与静态链接 程序的翻译过程 1. 一个C/C程序的构建过程&#xff0c;程序从源代码到可执行文件必须经历四个阶段 2. 理解选项的含…

PostgreSQL JSON/JSONB 查询与操作指南

PostgreSQL 提供了强大的 JSON 和 JSONB 数据类型及相关操作&#xff0c;适用于存储和查询半结构化数据。本文将详细介绍其常用操作。 1. 基础操作 1.1 JSON 属性访问 ->: 返回 JSON 对象中的值&#xff0c;结果为 JSON 格式。 SELECT {"a": {"b": 1…

如何在服务器上安装 Maven

1. 安装Java Development Kit (JDK) 由于Maven依赖于Java运行环境&#xff0c;因此首先需要确保系统中已经安装了合适的JDK版本。 通过以下命令检查Java版本&#xff0c; java -version如果未安装JDK可以参考如何在服务器上安装 Java OpenJDK相关文档来安装特定版本的JDK。 …

HOW - PPT 制作系列(四)- 实践和技巧

目录 一、神器与技巧二、色彩的搭配三、图片的处理四、形状与图标五、字体的处理六、图表的制作七、总结/制作思维八、如何精简 ppt 内容我们 PPT 制作系列在之前已经介绍过: HOW - PPT 制作系列(一)- 一页ppt里要注意什么HOW - PPT 制作系列(二)- 三大技能HOW - PPT 制作…

魅族手机刷官方系统

从魅族官网下载固件 https://flyme.cn/firmware.html 找到自己的型号&#xff0c;里面有历史版本、最新版&#xff0c;按照需求下载。 下载的是update.zip&#xff0c;改名就不能升级了 方法1 直接点击下载的update.zip包就可以升级。 方法2 将文件移动到文件管理的根目录&a…