记录el-table的表格合并问题

news2024/11/25 16:55:29

项目需求背景:
利用el-table进行数据展示时,时常会有需要表格合并的情景,比如一个表格由5列组成:
类型 地区 金额 重量 长度
在这个表格里,如果同金额、重量的列可以合并到一起,这时应该怎么做呢?查看element plus文档可以看到,对于el-table有一个span-method方法:
在这里插入图片描述

可以看到该属性默认返回一个函数,函数有四个参数,分别表示横行数据、纵行数据、横行索引和纵行索引,然后我们实操一下,为该参数绑定一个函数rowSpanRulesHandler,在这之前声明一个数组,数组各项表示table各列,

const columns = ['type', 'area', 'amount', 'weight', 'length'];

然后利用switch case 列出所有需要合并的行,并在最后一个case调用合并函数:

const rowSpanRulesHandler = ({ row, column, rowIndex, columnIndex }, data) => {
  switch (columns[columnIndex]) {
    case 'amount':
    case 'weight':
      const r = CombineColumns.compareAttrReturnColSpan(row, 'amount', rowIndex, list.value);
      return r;
    }
    default:
      return [1, 1];
  }
};

所以现在的核心就是CombineColumns函数该如何实现,先上代码:

const compareSingleAttrReturnColSpan=(row, str, index, list) =>{
    let count = 0;
    let start = index;
    let multCompare = true;
    while (start < list.length && multCompare) {
      start++;
      count++;

      multCompare = row[str] === list[start]?.[compareAttr];
    }
    start--;

    if (start < list.length) {
      list[index][`${compareAttr}_count`] = count;
    }

    if (index > 0 && count + 1 === list[index - 1][`${compareAttr}_count`]) {
      return [0, 0];
    }

    return [count, 1];
  }

首先,初始化 count(计数器)和 start(起始位置)变量,以及一个名为 multCompare 的布尔值,用于在循环中判断是否需要继续合并。

使用一个 while 循环遍历 list,在循环中检查当前行的 compareAttr 属性值是否与下一行的相同。如果相同,则增加 count,并继续循环。否则,跳出循环。

在循环结束后,如果 start 仍然小于 list.length,则将计数器 count 分配给当前行的 ${compareAttr}_count 属性。

如果 index 大于 0,且 count + 1 等于前一行的 ${compareAttr}_count 属性值,则返回 [0, 0]。这表示当前单元格已经被合并到前一行,因此不需要额外的跨度。

否则,返回一个数组,包含 count(合并列的跨度)和 1(合并行的跨度)。

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

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

相关文章

神经网络与深度学习(一)

线性回归 定义 利用数理统计中回归分析&#xff0c;来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法 要素 训练集&#xff08;训练数据&#xff09;输出数据拟合函数数据条目数 场景 预测价格&#xff08;房屋、股票等&#xff09;、预测住院时间&#…

计算机网络 - 基础篇总结

TCP/IP 网络模型有哪几层&#xff1f; 1.应用层 为用户提供应用功能 2.传输层 负责为应用层提供网络支持 使用TCP和UDP 当传输层的数据包大小超过 MSS&#xff08;TCP 最大报文段长度&#xff09; &#xff0c;就要将数据包分块&#xff0c;这样即使中途有一个分块丢失或损坏…

汇总:五个开源的Three.js项目

Three.js 是一个基于 WebGL 的 JavaScript 库&#xff0c;它提供了一套易于使用的 API 用来在浏览器中创建和显示 3D 图形。通过抽象和简化 WebGL 的复杂性&#xff0c;Three.js 使开发者无需深入了解 WebGL 的详细技术就能够轻松构建和渲染3D场景、模型、动画、粒子系统等。 T…

OSI七层参考模型

osi即开放系统互联参考模型。 osi的目的是为了解决主机间的通信 从下到上&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示出、应用层 上三层&#xff08;应用层、表示出、会话层&#xff09;负责产生数据&#xff0c;下四层&#xff08;传输层、网络层、数据…

设计模式(9):外观模式

一.迪米特法则(最少知识原则) 一个软件实体应当尽可能少的与其他实体发生相互作用。 二.外观模式 为子系统提供统一的入口&#xff0c;封装子系统的复杂性&#xff0c;便于客户端调用。它的核心是什么呢&#xff0c;就是为我们的子系统提供一个统一的入口&#xff0c;封装子…

YOLOv5改进系列:升级版ResNet的新主干网络DenseNet

一、论文理论 论文地址&#xff1a;Densely Connected Convolutional Networks 1.理论思想 DenseNet最大化前后层信息交流&#xff0c;通过建立前面所有层与后面层的密集连接&#xff0c;实现了特征在通道维度上的复用&#xff0c;不但减缓了梯度消失的现象&#xff0c;也使其…

【前端Vue】Vue从0基础完整教程第4篇:面经PC端 - Element (下)【附代码文档】

Vue从0基础到大神学习完整教程完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;vue基本概念&#xff0c;vue-cli的使用&#xff0c;vue的插值表达式&#xff0c;{{ gaga }}&#xff0c;{{ if (obj.age > 18 ) { } }}&#xff0c;vue指令&#xff0c;综合…

Spring: 在SpringBoot项目中解决前端跨域问题

这里写目录标题 一、什么是跨域问题二、浏览器的同源策略三、SpringBoot项目中解决跨域问题的5种方式&#xff1a;使用CORS1、自定 web filter 实现跨域(全局跨域)2、重写 WebMvcConfigurer(全局跨域)3、 CorsFilter(全局跨域)4、使用CrossOrigin注解 (局部跨域) 一、什么是跨域…

稀碎从零算法笔记Day34-LeetCode:最小栈

感谢耶稣&#xff0c;笔者又过了一天“复活节”。月末斩杀一道Hard画上句号 题型&#xff1a;栈、模拟数据结构 链接&#xff1a;155. 最小栈 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 设计一个支持 push &#xff0c;pop &#xff0c;…

适用于 Windows 的 6 个最佳视频转换器

视频转换器可以帮助您在设备上转换和播放不受支持的视频格式。它还可以方便地减小视频文件大小、以通用格式组织所有视频或与其他人共享文件以在不同设备上播放。 Windows 有大量视频转换器可供选择。虽然有些是免费的&#xff0c;但其他一些则提供迎合专业用户的高级功能。在…

Pycharm选择使用Anaconda环境中的Pytorch 失败解决办法之一

前几日想要复现一篇论文&#xff0c;结果给配的台式机完全禁不住&#xff0c;老是报溢出&#xff0c;慢都没事&#xff0c;溢出就很难受了&#xff0c;因此想用自己笔记本的GPU来训练。 安装以后遇到一个问题&#xff1a; Anaconda里创建了环境&#xff0c;安装好了对应pytor…

AR智能眼镜解决方案_MTK平台安卓主板硬件芯片方案开发

AR智能眼镜&#xff0c;是一个可以让现场作业更智能的综合管控设备。采用移动互联网、大数据和云计算等技术&#xff0c;现场数据的采集与分析&#xff1b;同时实现前端现场作业和后端管理的实时连动、信息的同步传输与存储。让前端现场作业更加智能&#xff0c;后端管理更加高…

再次加深理解Java中的并发编程

目录 一、线程、进程、程序 二、线程状态 三、线程的七大参数 四、lock与synchronized锁机制 一&#xff09;、lock与synchronized锁区别 二&#xff09;、synchronized锁原理 三&#xff09;、Lock锁原理 五、synchronized锁升级原理 一&#xff09;、锁升级基础知识 …

【Web】NSSCTF Round#20 Basic 两道0解题的赛后谈

目录 前言 baby-Codeigniter 组合拳&#xff01; 前言 本想着说看看go的gin框架就睡了的&#xff0c;r3师傅提醒说赛题环境已经上了&#xff0c;那不赶紧研究下&#x1f600; 主要来谈谈做题的心路历程 baby-Codeigniter 拿到题目的第一反应应该是&#xff1a;“什么是C…

C之易错注意点转义字符,sizeof,scanf,printf

目录 前言 一&#xff1a;转义字符 1.转义字符顾名思义就是转换原来意思的字符 2.常见的转义字符 1.特殊\b 2. 特殊\ddd和\xdd 3.转义字符常错点----计算字符串长度 注意 &#xff1a; 如果出现\890,\921这些的不是属于\ddd类型的&#xff0c;&#xff0c;不是一个字符…

SOA-面向服务架构

SOA-面向服务架构 1.概述2.SOA的设计原则包括&#xff1a;3. SOA实现方法1.Web Service2. 服务注册表3. 企业服务总线 细讲 超赞笔记 1.概述 SOA &#xff08;Service-Oriented Architecture&#xff0c;SOA&#xff09;&#xff0c;从应用和原理的角度&#xff0c;目前有2种…

书生·浦语大模型-第一节课笔记

视频总结 23年发布的模型在一些材料中归位指令微调模型&#xff0c;后面逐渐升级应该已经是train的模型了 技术报告总结 InternLM2 Technical Report 评测与特点 6 dimensions and 30 benchmarks, long-context modeling, and open-ended subjective evaluations长文本…

【软件工程】概要设计

1. 导言 1.1 目的 该文档的目的是描述学生成绩管理系统的概要设计&#xff0c;其主要内容包括&#xff1a; 系统功能简介 系统结构简介 系统接口设计 数据设计 模块设计 界面设计 本文的预期读者是&#xff1a; 项目开发人员 项目管理人员 项目评测人员&#xff08;…

C++:数据类型—字符串(11)

字符串就是包含多个字符组成的一个串 比如字符a,b&#xff0c;单个字符就是字符 那么"hello world" 就是一串字符组成的一个字符串 注意字符要在双引号里引用上&#xff0c;而字符一般都是单引号引用 在c中有两种定义字符串的方法&#xff0c;一个是原始c语言的定义方…

swift中的autoreleasepool(自动释放池)有用么?

想到一个问题 swift中的autoreleasepool(自动释放池)有用么? 我们进行验证一下 首先我们写一个加载图片的方法,保证会真正用到真实的IMP内存func loadBigData(string: String?) {if let path Bundle.main.path(forResource: "big", ofType: "png") {for…