Vben admin - 表格组件合并单元格

news2024/9/30 5:34:06
需求

最近在项目中有需求需要表格合并单元格,不但内容有合并的,操作列也需要合并,找遍vben官方例子,没有实现操作列合并的,只能硬着头皮实现,还好实现了,下面具体就是实现思路;

原型设计图

在这里插入图片描述

分析需求

整体思路就是当数据中一级分类值相同则进行合并分数、一级分类以及编辑分数(操作列),由于操作列合并vben框架目前不支持,只能在数据上下功夫,假设表格数据中每组数据返回字段operatorName:‘操作’;这样我们就像渲染普通数据一样渲染出来,然后再给器操作加上事件即可

合并核心思路
let newArr = data.reduce((result, item) => {
     // 首先将字段作为新数组result取出
     if (result.indexOf(item['name']) < 0) {
       result.push(item['name']);
     }
     return result;
   }, []).reduce((res, name) => {
     // 将name相同的数据作为新数组取出,并在其内部添加新字段**rowSpan**
     const children = data.filter((item) => item['name'] === name);
     // eslint-disable-next-line no-param-reassign
     res = res.concat(
       children.map((item, index) => ({
         ...item,
         ['rowspan']: index === 0 ? children.length : 0, // 将第一行数据添加rowSpan字段
       })),
     );
     return res;
   }, []);
整体代码
const [registerTable] = useTable({
  title: '合并单元格',
  bordered: true,
  // 假数据
  dataSource: [
    {
      key: '1',
      fenshu: 5,
      name: '政治',
      age: '政治交流',
      num: 4545,
      address: 'New York No. 1 Lake Park',
      rowspan:2
    },
    {
      key: '2',
      fenshu: 5,
      name: '政治',
      age: '总统选举',
      num: 4545,
      address: 'London No. 1 Lake Park',
      rowspan:0
    },
    {
      key: '3',
      fenshu: 5,
      name: '经济',
      age: '黄金大涨',
      num: 4545,
      address: 'Sidney No. 1 Lake Park',
      rowspan:1
    },
    {
      key: '4',
      fenshu: 5,
      name: '军事',
      age: '核弹引爆',
      num: 4545,
      address: 'London No. 2 Lake Park',
      rowspan:1
    },
    {
      key: '5',
      fenshu: 5,
      name: '安全',
      age: '食品安全',
      num: 4545,
      address: 'Dublin No. 2 Lake Park',
      rowspan:1
    },
  ],
   afterFetch: (data) => {
      let newArr = data
        .reduce((result, item) => {
          // 首先将字段作为新数组result取出
          if (result.indexOf(item['name']) < 0) {
            result.push(item['name']);
          }
          return result;
        }, [])
        .reduce((res, name) => {
          // 将name相同的数据作为新数组取出,并在其内部添加新字段**rowSpan**
          const children = data.filter((item) => item['name'] === name);
          // eslint-disable-next-line no-param-reassign
          res = res.concat(
            children.map((item, index) => ({
              ...item,
              ['rowspan']: index === 0 ? children.length : 0, // 将第一行数据添加rowSpan字段
            })),
          );
          return res;
        }, []);
      return newArr;
    },
  columns: [
  {
    title: '分数',
    dataIndex: 'fenshu',
    width: 200,
    customRender: ({ text, record }) => {
      const obj = {
        children: text,
        props: {} as any,
      };
      obj.props.rowSpan = record.rowspan;
      return obj;
    },
  },
  {
    title: '一级分类',
    dataIndex: 'name',
    customRender: ({ text, record }) => {
      const obj = {
        children: text,
        props: {} as any,
      };
      obj.props.rowSpan = record.rowspan;
      return obj;
    },
  },
  {
    title: '二级分类',
    dataIndex: 'age',
    width: 180,
  },
  {
    title: '内容',
    dataIndex: 'address',
    width: 380,
  },
  {
    title: '数据来源数量',
    dataIndex: 'num',
    width: 180,
  },
  {
      title: '操作',
      dataIndex: 'operatorName',
      width: 180,
      customRender: ({ text, record }) => {
        return {
          children: h('a', { onClick: () => handelEdit(record) }, text),
          props: {
            rowSpan: record.rowspan,
          },
        };
      },
      className: 'caozuo', // 单独加上样式类名,在css中将字体颜色改为蓝色 以便和普通数据进行区分
    },
],
  pagination: false,
  showIndexColumn: false,
})

// 编辑操作
const handelEdit = (record: Recordable) => {
 console.log(record)
};
最后实现效果图

在这里插入图片描述

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

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

相关文章

再获Gartner认可!持安科技获评ZTNA领域代表供应商

近日&#xff0c;全球权威市场研究与咨询机构Gartner发布了《Hype Cycle for Security in China, 2023&#xff08;2023中国安全技术成熟度曲线&#xff09;》报告&#xff0c;对2023年的20个中国安全技术领域的现状与发展趋势进行了详细的分析与解读。 其中&#xff0c;持安科…

mac电脑视频处理推荐:达芬奇DaVinci Resolve Studio 18 中文最新

DaVinci Resolve Studio 18是一款专业的视频编辑、调色和后期制作软件&#xff0c;由Blackmagic Design开发。它被广泛应用于电影、电视和广告等行业&#xff0c;提供了全面的工具和功能&#xff0c;使用户能够进行高质量的影片制作和后期处理。 以下是DaVinci Resolve Studio…

JAVA-GC日志打印配置详解

一、为什么要打印GC日志&#xff1f; 当服务出现内存飙高、卡顿宕机等等情况&#xff0c;有可能因为GC问题&#xff0c;所以要有日志进行排查。 二、命令详解 #打印GC详情信息 -XX:PrintGCDetails #打印GC时间戳 -XX:PrintGCDateStamps #打印触发GC原因信息 -XX:PrintGCCause …

如何选择适合的美颜SDK?

美摄美颜SDK是一款专门为企业提供美颜技术支持的SDK&#xff0c;可以帮助企业开发出具有高品质美颜效果的移动应用。本文将介绍美摄美颜SDK的技术特点和面向企业提供的技术支持。 一、技术特点 美摄美颜SDK采用了先进的图像处理技术和人工智能算法&#xff0c;能够快速准确地…

基于SSM框架的校园招聘系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

Java开发者必备:支付宝沙箱环境支付远程调试指南

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f516;系列专栏&#xff1a; C语言、Linux、Cpolar ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级…

农村电力供应,这件事必须重视!

随着现代社会对持续电力供应的需求不断增加&#xff0c;柴油发电机成为了许多组织和企业的生命线。因此&#xff0c;柴油发电机监控系统的性能和可靠性对于维护连续的电力供应至关重要。 客户案例 工业设施 辽宁某大型工业设施中&#xff0c;柴油发电机是主要的备用电源。然而&…

伦敦银条有多大投资价值?

伦敦银本来是指存放在伦敦地下金库的实物白银银条&#xff0c;这个市场上银条的标准规格为1000金衡盎司。但随着信息科技技术的进步以及贵金属市场的发展&#xff0c;现在的伦敦银交易已经完全实现了电子化。 在当今的贵金属投资市场&#xff0c; 伦敦银的交易网络已经遍布全球…

写保护设置——二、NOR FLASH

二、NOR FLASH 以Winbond的W25Q16DVSSIG型NOR FLASH为例&#xff0c;W25Q16DVSSIG容量为16Mbit&#xff08;16777216bit&#xff0c;2Mbit8&#xff0c;2097152bit8,1FFFFF8&#xff09;&#xff0c;即有2097152个地址&#xff0c;每个地址对应8bit数据。 2.1 状态寄存器 W25…

欧科云链联合FT中文网与香港大学,探寻Web3未来安全合规之路

在新一代科技浪潮中&#xff0c;Web3作为下一代互联网的演进方向正在快速发展&#xff0c;技术推动了虚拟资产投资市场的快速增长&#xff0c;机遇与风险同步上升。10月24日&#xff0c;美国比特币现货ETF再迎新进展&#xff0c;市场情绪高涨&#xff0c;这对于全球Web3行业的发…

Android 类似淘宝的吸顶特效解决方案

运行图 布局的设计 要实现上面的效果需要搞定NestedScrollView和RecycleView的滑动冲突。有人要问RecycleView为何要滑动自动撑大不就好了么&#xff1f;这个问题其实对于有限的资源加载来说是很好的解决方案&#xff0c;但是如果涉及到的是图文结合的并且有大批量的数据的时候…

AquilaChat2-34B 主观评测接近GPT3.5水平,最新版本Base和Chat权重已开源!

两周前&#xff0c;智源研究院发布了最强开源中英双语大模型AquilaChat2-34B 并在 22项评测基准中综合能力领先&#xff0c;广受好评。为了方便开发者在低资源上运行 34B 模型&#xff0c;智源团队发布了 Int4量化版本&#xff0c;AquilaChat2-34B 模型用7B量级模型相近的GPU资…

分享119个ASP.NET源码总有一个是你想要的

分享119个ASP.NET源码总有一个是你想要的 链接&#xff1a;https://pan.baidu.com/s/1Mp0RugMnIJbS8Hrja4sCOQ?pwd8888 提取码&#xff1a;8888 项目名称 asp.net core 微服务 项目 ASP.NET Core 项目日志解决方案 Serilog Log4net ASP.NET Core分布式项目实战 asp.n…

GMT中标注特殊字符:平方,%,±号,希腊字母

在gmt中文社区的官网&#xff0c;我们可以得到以下的特殊字符表&#xff0c;通过在cmd命令窗口输入以下命令 gmt get PS_CHAR_ENCODING 查到你所安装的GMT的默认字符编码方式。如下图所示&#xff0c;本人是默认的ISOLation1 编码。 下面是一些具体的特殊字符的代码与标注效果…

使用网络摄像头进行眼睛注视估计 Mediapipe Gaze track

让我们看看下面的情况,你坐在图书馆里,你刚刚看到最漂亮的女人坐在图书馆的另一边。哎呀,她发现你在盯着她看。她估计你的目光在盯着她,而你通过理解她的目光指向你,注意到被她抓个正着。 眼睛凝视:一个人的眼睛聚焦的点 就像我们惊人的大脑毫不费力地完成许多任务一样,…

stable-diffusion-ui 下载和安装

简介 Stable Diffusion Web UI是一款基于Stable Diffusion基础应用的交互程序&#xff0c;它利用gradio模块搭建而成。这个模块除了具有txt2img、img2img等基本功能外&#xff0c;还包含许多模型融合改进、图片质量修复等附加升级。所有这些功能都可以通过易于使用的Web应用程…

漏洞复现-SeaCMS_v10.1_远程命令执行(CNVD-2020-22721)

SeaCMS_v10.1_远程命令执行(CNVD-2020-22721) 漏洞信息 seacms_v10.1有效cnvd-2020-22721命令执行漏洞 描述 海洋CMS一套程序自适应电脑、手机、平板、APP多个终端入口。 SeaCMS v10.1存在命令执行漏洞&#xff0c;在w1aqhp/admin_ip.php下第五行使用set参数&#xff0c;对…

不黑箱,不抽卡,分分钟带你拿捏SD中的色彩控制 | 京东云技术团队

导言 颜色控制一直是AIGC的难点&#xff0c;prompt会污染、img2img太随机… 今天带来利用controlnet&#xff0c;实现对画面颜色的有效控制。都说AIGC是抽卡&#xff0c;但对把它作为工具而非玩具的设计师&#xff0c;必须掌握如何控制它&#xff0c;让我们一起开始可控AI生成…

系列三、Spring Bean

一、什么是Spring bean * 一句话&#xff0c;被Spring容器管理的bean就是Spring bean。 二、Java bean和Spring bean对象之间的区别 Java bean的实例化对象是自己创建出来的&#xff0c;Spring的bean是IOC容器创建出来的。 三、配置bean有哪几种方式 * 答&#xff1a;有四…

ssh连接失败,提示ssh: connect to host port 22: Connection refused

情况描述 如图&#xff0c;ssh连接失败&#xff0c;连接显示器输入sudo netstat -tuln | grep 22命令查看占用22端口的服务&#xff0c;无任何输出&#xff0c;说明也不是默认端口22被占用的问题。 无法启动&#xff0c;提示如下查看 SSH 服务是否正在运行&#xff0c; syste…