react的table合并行时,出现border-bottom重复问题

news2024/12/25 0:36:10

背景:

需求是呈现一个表格,根据操作人跟操作时间是否相同来进行合并行数据

数据结构:

经过跟后端的同事商量,需要在每一行数据中返回rowSpanNum的值,前端在column中根据值来判断是否满足合并行(没有合并行是rowSpanNum值是1,有合并行时,第一行的值大于1,接下来的几行值是null

[
    {
        ...,
        rowSpanNum: 1,
    },
    {
        ...,
        rowSpanNum: 3,
    },
    {
        ...,
        rowSpanNum: null,
    },
    {
        ...,
        rowSpanNum: null,
    },
    {
        ...,
        rowSpanNum: 1,
    },
]

前端处理column:

在column的render里面,我们可以定义一个obj对象,给obj对象的rowSpan属性进行赋值处理,再将obj返回即可

const columns = [
      {
        title: '数量',
        dataIndex: '数量',
        width: '80px',
        align: 'right'
      },
      {
        title: '日期',
        dataIndex: '日期',
        width: '90px'
      },
      {
        title: '备注',
        dataIndex: '备注',
      },
      {
        title: '操作人',
        dataIndex: 'createName',
        width: '80px',
        render: (text, record, index) => {
          const obj = {
            children: isShowPopover(text),
            props: {
            },
          };
          if(record.rowSpanNum){
            obj.props.rowSpan = record.rowSpanNum;
          }else{
            obj.props.rowSpan = 0;
          }
          return obj;
        },
      },
      {
        title: '操作时间',
        dataIndex: 'createTime',
        width: '140px',
        render: (text, record, index) => {
          const obj = {
            children: text,
            props: {
            },
          };
          if(record.rowSpanNum){
            obj.props.rowSpan = record.rowSpanNum;
          }else{
            obj.props.rowSpan = 0;
          }
          return obj;
        },
      },
    ]

效果如图:

存在问题:antd针对table的最后一个tr做了border-bottom: 0;的处理,但是由于合并的行恰好能合并到table的最后一行,但是本身不属于最后一个tr,所以不具有该属性,导致td本身的border-bottom跟table的boder-bottom双重渲染。(好像antd的官网的table并不会出现这个问题,估计是公司在封装table组件的时候出现了问题)

解决方法:

定义一个方法,接收整个list跟当前行的index,通过index截取剩下的list,赋值给newArr数组,for循环newArr数组,判断接下来的元素是否还存在rowSpanNum有值的行信息,如果有,则保持当前td的borderBottom值,如果没有,则当前td的borderBottom为'none'

在column的中运用改方法修改style即可

borderBottomFunc = (List, currentIndex) => {
    let newArr = List.slice(currentIndex+1)
    for(let i=0; i<newArr.length; i++){
      if(newArr[i].rowSpanNum){
        return ''
      }
    }
    return 'none'
}


// 修改column
{
    title: '操作人',
    dataIndex: 'createName',
    width: '80px',
    render: (text, record, index) => {
        const obj = {
            children: isShowPopover(text),
            props: {
              style: {
                  borderBottom: this.borderBottomFunc(List, index)
                }
            },
        };
        if(record.rowSpanNum){
            obj.props.rowSpan = record.rowSpanNum;
        }else{
            obj.props.rowSpan = 0;
        }
        return obj;
    },
},
{
    title: '操作时间',
    dataIndex: 'createTime',
    width: '80px',
    render: (text, record, index) => {
        const obj = {
            children: isShowPopover(text),
            props: {
              style: {
                  borderBottom: this.borderBottomFunc(List, index)
                }
            },
        };
        if(record.rowSpanNum){
            obj.props.rowSpan = record.rowSpanNum;
        }else{
            obj.props.rowSpan = 0;
        }
        return obj;
    },
},
 

效果如图:

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

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

相关文章

在Go项目中封装AES加解密客户端接口

1.摘要 在一个中型以上的项目中, 我们一般会在项目工程中开辟一个pkg文件夹用来存放一些基础工具接口,比如:数据库、中间件、加解密算法、基础协议等等。在这篇文章中, 我主要分享一下在基于Go语言的项目中, 加解密算法中如何封装一个通用的加解密接口, 并以使用比较广泛的AES…

day11力扣打卡

打卡记录 避免洪水泛滥&#xff08;贪心 Map Set&#xff09; 链接 将晴天的日期全部记录到 set 中。 使用 unordered_map 来记录每个湖泊上一次下雨的日期。 当下雨时&#xff0c;湖泊已经水满了时&#xff0c;查询到上次下雨的日期。 通过这个日期在晴天记录中查找对应的…

JS问题:项目中如何区分使用防抖或节流?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约2300字&#xff0c;整篇阅读大约需要6分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …

Android 发布 15 周年了!Google 员工说出了这些年的美好回忆

原文链接&#xff1a;https://blog.google/products/android/android-15th-anniversary-googler-highlights/ 作者&#xff1a;Sameer Samat, GM and VP of Android Ecosystem 翻译者&#xff1a;张拭心 https://shixin.blog.csdn.net/ 自从带有 Android Market&#xff08;现在…

MVC架构_Qt自己的MV架构

文章目录 前言模型/视图编程1.先写模型2. 视图3. 委托 例子&#xff08;Qt代码&#xff09;例1 查询本机文件系统例2 标准模型项操作例3 自定义模型示例:军事武器模型例4 只读模型操作示例例5 选择模型操作例6 自 定 义委 托(在testSelectionModel上修改) 前言 在Qt中&#xf…

Git(四)底层命令:git对象、树对象、提交对象

目录 一、知识回顾1.1 Linux 基础命令1.2 .git 文件夹解析 二、git 对象&#xff08;数据对象&#xff09;2.1 hash-object 存储对象2.2 cat-file 查看对象 三、树对象3.1 ls-files 查看暂存区3.2 update-index 创建暂存区3.3 write-tree 生成树对象3.4 更新暂存区&#xff0c;…

C/C++面试常见问题——const关键字的作用和用法

首先我们需要一下const关键字的定义&#xff0c;const名叫常量限定符&#xff0c;当const修饰变量时&#xff0c;就是在告诉编译器该变量只可访问不可修改&#xff0c;而编译器对于被const修饰的变量有一个优化&#xff0c;编译器不会专门为其开辟空间&#xff0c;而是将变量名…

Liunx两台服务器实现相互SSH免密登录

一、首先准备两台Linux虚拟机当作此次实验的两台服务器 服务器1&#xff1a;server IPV4&#xff1a;192.168.110.136 服务器2&#xff1a;client IPV4&#xff1a; 192.168.110.134 二、准备阶段 [rootserver ~]# systemctl disable firewalld #关…

【MySQL索引与优化篇】InnoDB数据存储结构

文章目录 1. 数据库的存储结构:页1.1 磁盘与内存交互基本单位:页1.2 页结构概述1.3 页的上层结构 2. 页的内部结构3. InnoDB行格式(或记录格式)3.1 Compact行格式3.2 Dynamic和Compressed行格式3.3 Redundant行格式 4. 区、段与碎片区4.1 为什么要有区&#xff1f;4.2 为什么要…

Webpack简介及打包演示

Webpack 是一个静态模块打包工具&#xff0c;从入口构建依赖图&#xff0c;打包有关的模块&#xff0c;最后用于展示你的内容 静态模块&#xff1a;编写代码过程中的&#xff0c;html&#xff0c;css&#xff0c; js&#xff0c;图片等固定内容的文件 打包过程&#xff0c;注…

【iOS安全】提取app对应的URLScheme

获取app的URLScheme 在已越狱的iPhone上&#xff0c;使用Filza进入app列表目录&#xff1a; /private/var/containers/Bundle/Application/ 比如我要分析Microsoft Authenticator&#xff0c;明显对应的是这里面的“Authenticator”&#xff0c;那就在Filza中点击进入“Authen…

网络协议--TFTP:简单文件传送协议

15.1 引言 TFTP(Trivial File Transfer Protocol)即简单文件传送协议&#xff0c;最初打算用于引导无盘系统&#xff08;通常是工作站或X终端&#xff09;。和将在第27章介绍的使用TCP的文件传送协议&#xff08;FTP&#xff09;不同&#xff0c;为了保持简单和短小&#xff0…

STM32中断,看着一篇就够了

1&#xff0c;环境搭建&#xff1a; 硬件平台&#xff1a;STM32H750XBH6 开发环境&#xff1a;STM32CubeMX V6.8.1KEIL V5.28.0.0 STM32H750固件版本&#xff1a;package V1.11.0 仿真下载驱动&#xff1a;ST-Link 2&#xff0c;中断的定义 中断&#xff08;Interrupt&#xff…

【考研数学】数学“背诵”手册 | 需要记忆且容易遗忘的知识点

文章目录 引言一、高数常见泰勒展开 n n n 阶导数公式多元微分函数连续、可微、连续可偏导之间的关系多元函数极值无条件极值条件极值 三角函数的积分性质华里士公式&#xff08; “点火”公式 &#xff09;特殊性质 原函数与被积函数的奇偶性结论球坐标变换公式 二、写在最后 …

centos中安装mysql5.7

建议第八步骤&#xff0c;和第九步骤对于生产者人员就不用配置了&#xff0c;风险大&#xff0c;我自己的也没有配置 1.首先切换到root用户下 2.更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 3.安装mysql yum库 rpm -Uvh https://repo.mysql.com//…

云计算模式的区域LIS系统源码,基于ASP.NET+JQuery、EasyUI+MVC技术架构开发

云计算模式的区域LIS系统源码 云LIS系统源码&#xff0c;自主版权 LIS系统是专为医院检验科的仪器设备能与计算机连接。可通过LIS系统向仪器发送指令&#xff0c;让仪器自动操作和接收仪器数据。并快速的将检验仪器中的数据导入到医生工作站中进行管理&#xff0c;且可将检验结…

10.26ALP论文原代码请稿

尊敬的作者&#xff0c; 我是中国重庆大学的一名学生&#xff0c;近期准备就浮点数据无损压缩这个研究领域作一篇综述。 我对于您的ALP压缩算法十分感兴趣&#xff0c;并对于它的表现感到十分惊喜&#xff0c;我自己也尝试按您文章里的伪代码与思路复现您的方法&#xff0c;但…

非小米笔记本小米妙享中心安装最新教程 3.2.0.464 兼容所有Windows系统

小米妙享中心 3.2.0.464 版本帮助 : 支持音频流转、屏幕镜像、屏幕拓展、键鼠拓展、无线耳机、小米互传 目录 小米妙享中心 3.2.0.464 版本帮助 : 1.常规教程使用安装包方式安装失败 或者 1.1安装失败可使用大佬的加载补丁方法解决 补充卸载残留 1.2 截图存档 2. 本教程…

CentOS - 安装 Elasticsearch

"Elasticsearch"是一个流行的开源搜索和分析引擎&#xff0c;它可以用于实时搜索、日志和事件数据分析等任务。以下是在 CentOS 上安装 Elasticsearch 的基本步骤&#xff1a; 安装 Java&#xff1a; Elasticsearch 是基于 Java 的应用程序&#xff0c;所以首先需要…

Git窗口打开vim后如何退出编辑(IDEA/Goland等编辑器)

最近在学习git高级操作过程中&#xff0c;遇到了一下问题&#xff1a; 我在学习Git合并多个commit为一个的时候&#xff0c;需要输入一个命令 git rebase -i HEAD~2 这说明已经是编辑模式了。当我写好后&#xff0c;我还按照原来在linux上的按下ESC键&#xff0c;但是只是光…