jeecgboot前端antd Table组件动态合并单元格

简介: jeecgboot前端antd Table组件动态合并单元格


简单的表格:

分类中相同的值合并效果如下:

静态数据合并单元格

实现

  1. 将要合并列的第一列(index 为 0) 的 rowSpan 设置为 2。index 为 1(第二列) 的 rowSpan 设置为 0。
  2. 将 index 为 2 (第三列)的 rowSpan 设置为 1(可以不用设置 rowSpan,默认为1)。
  3. 将 index 为 3 (第四列)的 rowSpan 设置为 3,后面列(5和6列)的 rowSpan 设置为 0。
const columns = [
    {
        title: '分类',
        dataIndex: 'category',
        render: (value, row, index) => {
        const obj = {
          children: value,
          props: {},
        };
        if (index === 0) { // 第一列
          obj.props.rowSpan = 2;
        }
        if (index === 1) {  // 第二列
          obj.props.rowSpan = 0;
        }
        //没有相同项时可以不用设置 colSpan 
        if (index === 2) {  // 第三列
          obj.props.rowSpan = 1;
        }
        if (index === 3) {  // 第四列
          obj.props.rowSpan = 3;
        }
        if (index === 4) {  // 第五列
          obj.props.rowSpan = 0;
        }
        if (index === 5) {  // 第六列
          obj.props.rowSpan = 0;
        }
        return obj;
      }   
    },
    {
        title: '名称',
        dataIndex: 'name',
    },
    {
        title: '评价',
        dataIndex: 'desc',
    },
];
const data = [
  {
      "category":"水果",
      "name": "桃子",  
      "desc": "好吃"
    },{
      "category":"水果",
      "name": "梨子",  
      "desc": "真好吃"
    },{
      "category":"蔬菜",
      "name": "茄子",  
      "desc": "真TM好吃"
    },{
    "category":"家禽",
     "name": "牛肉",  
      "desc": "太好吃了"
    },{
    "category":"家禽",
     "name": "羊肉",  
      "desc": "好吃到停不下来"
    },{
    "category":"家禽",
     "name": "猪肉",  
      "desc": "吃不起,太贵"
    }
]

总结:

  1. 设置合并列的第一列 rowSpan 为合并数。
  2. 设置其他相同项 rowSpan 为 0。

动态数据合并单元格

可以先把数据源处理好再直接渲染页面,处理这种业务逻辑最好的方式就是直接处理数据状态,用数据状态代替业务逻辑。

import dataJson from './data/Table.json';
let data = dataJson.data;
let field = 'category';
const  changeData = (data,field)=>{
    let count = 0;                  // 重复项的第一项
    let indexCount = 1;               // 下一项
    while (indexCount<data.length){
        var item = data.slice(count,count+1)[0];  // 获取没有比较的第一个对象
        if(!item.rowSpan){
            item.rowSpan = 1;           // 初始化为1 合并单元格
        }
        if(item[field] === data[indexCount][field]){// 第一个对象与后面的对象相比,有相同项就累加,并且后面相同项设置为0
            item.rowSpan++;
            data[indexCount].rowSpan = 0;     // 其他为0 
        }else {
            count = indexCount;
        }
        indexCount++;
    }
}
changeData(data,field);               // 处理数据

将每个相同项的第一项的 rowSpan 设置为合并数。并且其他的相同项设置为 0。数据格式如下:

data = [
  {
      "category":"水果",
      "name": "桃子",  
      "desc": "好吃",
      "rowSpan":2 
    },{
      "category":"水果",
      "name": "梨子",  
      "desc": "真好吃",
      "rowSpan":0 
    },{
      "category":"蔬菜",
      "name": "茄子",  
      "desc": "真TM好吃",
       "rowSpan":1
    },{
    "category":"家禽",
     "name": "牛肉",  
      "desc": "太好吃了",
       "rowSpan":3
    },{
    "category":"家禽",
     "name": "羊肉",  
      "desc": "真不错", 
      "rowSpan":0
    },{
    "category":"家禽",
     "name": "猪肉",  
      "desc": "吃不起,太贵", 
      "rowSpan":0
    }
]


相关文章
|
4月前
|
数据采集 前端开发 JavaScript
《花100块做个摸鱼小网站! 》第四篇—前端应用搭建和完成第一个热搜组件
本文档详细介绍了从零开始搭建一个包含前后端交互的热搜展示项目的全过程。通过本教程,读者不仅能学习到完整的项目开发流程,还能掌握爬虫技术和前后端交互的具体实践。适合有一定编程基础并对项目实战感兴趣的开发者参考。
93 1
|
27天前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
100 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
4月前
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
167 0
|
1月前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
37 1
|
2月前
|
缓存 前端开发 JavaScript
前端serverless探索之组件单独部署时,利用rxjs实现业务状态与vue-react-angular等框架的响应式状态映射
本文深入探讨了如何将RxJS与Vue、React、Angular三大前端框架进行集成,通过抽象出辅助方法`useRx`和`pushPipe`,实现跨框架的状态管理。具体介绍了各框架的响应式机制,展示了如何将RxJS的Observable对象转化为框架的响应式数据,并通过示例代码演示了使用方法。此外,还讨论了全局状态源与WebComponent的部署优化,以及一些实践中的改进点。这些方法不仅简化了异步编程,还提升了代码的可读性和可维护性。
|
2月前
|
前端开发 JavaScript
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
241 1
|
2月前
|
前端开发 JavaScript 开发者
Web组件:一种新的前端开发范式
【10月更文挑战第9天】Web组件:一种新的前端开发范式
64 2
|
2月前
|
前端开发 JavaScript Go
前端开发趋势:从响应式设计到Web组件的探索
【10月更文挑战第1天】前端开发趋势:从响应式设计到Web组件的探索
43 3
|
3月前
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
3月前
|
前端开发 程序员
【前端web入门第二天】01 html语法实现列表与表格_合并单元格
本文介绍了HTML中的列表与表格的使用方法。列表包括无序列表(`&lt;ul&gt;`嵌套`&lt;li&gt;`)、有序列表(`&lt;ol&gt;`嵌套`&lt;li&gt;`)和定义列表(`&lt;dl&gt;`嵌套`&lt;dt&gt;`和`&lt;dd&gt;`)。
70 19
下一篇
DataWorks