Ant Design Vue Table 行合并的实现方式

首先封装实现函数如下

function getRowSpanCount (data, key, mainKey, target) {if (!Array.isArray(data)) return 1// 只取出筛选项const mainData = data.map(_ => {
return _[mainKey]
})// 只取出筛选项data = data.map(_ => {
return _[key]
}) let preValue = data[0]let mainValue = mainData[0]const res = [[preValue]] // 放进二维数组里let index = 0 // 二维数组下标for (let i = 1; i < data.length; i++) {if (data[i] === preValue && mainData[i] === mainValue) {// 相同放进二维数组res[index].push(data[i])} else {// 不相同二维数组下标后移index += 1res[index] = []res[index].push(data[i])preValue = data[i]mainValue = mainData[i]}}const arr = []res.forEach(_ => {const len = _.lengthfor (let i = 0; i < len; i++) {arr.push(i === 0 ? len : 0)}})return arr[target]
}

应用实例如下:

const columnPickItem = [{title: '物料编号',dataIndex: 'itemno',customRender: (value, row, index) => {const obj = {children: value,attrs: {}}obj.attrs.rowSpan = getRowSpanCount(this.noPickingData, 'itemno', 'itemId', index)return obj}},{title: '物料名称',dataIndex: 'itemname',customRender: (value, row, index) => {const obj = {children: value,attrs: {}}obj.attrs.rowSpan = getRowSpanCount(this.noPickingData, 'itemname', 'itemId', index)return obj}},{title: '规格型号',dataIndex: 'specifiCation',customRender: (value, row, index) => {const obj = {children: value,attrs: {}}obj.attrs.rowSpan = getRowSpanCount(this.noPickingData, 'specifiCation', 'itemId', index)return obj}},{title: '待备料数量',dataIndex: 'allcount',customRender: (value, row, index) => {const obj = {children: value,attrs: {}}obj.attrs.rowSpan = getRowSpanCount(this.noPickingData, 'allcount', 'itemId', index)return obj}},{title: '已备料数',dataIndex: 'pickcount',customRender: (value, row, index) => {const obj = {children: value,attrs: {}}obj.attrs.rowSpan = getRowSpanCount(this.noPickingData, 'pickcount', 'itemId', index)return obj}},{title: '单套数量',dataIndex: 'routecount',customRender: (value, row, index) => {const obj = {children: value,attrs: {}}obj.attrs.rowSpan = getRowSpanCount(this.noPickingData, 'routecount', 'itemId', index)return obj}},{title: '所在仓库名称',dataIndex: 'warehousename'},{title: '所在仓库编号',dataIndex: 'warehouseno'},{title: '所在库位名称',dataIndex: 'locationname'},{title: '所在库位编号',dataIndex: 'locationno'},{title: '批次号',dataIndex: 'lotNo'},{title: '包装号',dataIndex: 'packNo'},{title: '批次在库数量',dataIndex: 'count'},{title: '供应商',dataIndex: 'clientname'},{title: '备料数量',dataIndex: 'pickingCount',scopedSlots: {customRender: 'pickingCount'}}]

实现逻辑及实现思路如下:
1.首先明确在 Ant Design Vue Table 的框架下要实现每一列行合并的方法是:
以从上往下的顺序来看待一个table,每一列的column属性都需要配置一个customRender如下

    {title: '物料编号',dataIndex: 'itemno',customRender: (value, row, index) => {const obj = {children: value,attrs: {}}obj.attrs.rowSpan = getRowSpanCount(this.noPickingData, 'itemno', 'itemId', index)return obj}},

并且设置对应的rowSpan数值,每一列对应的每一行rowSpan设置的数值就决定了行与行之间的合并方式。如一共三列三行数据,第一列第一行的rowSpan设置为3,第一列其余两行rowSpan设置为0则第一列的一到三行就会进行合并。(tips:有多少条数据或者说有多少行,该列对应配置的customRender函数就会执行多少次)

2.在明确官方实现逻辑的基础上进行函数封装做到自定义指定:当不同行中的一个或多个字段相同的情况下才进行行合并
上面函数封装内容从上往下的大概逻辑是:
(1) 校验传入的table数据类型
(2) 以传入的key, mainKey或更多的参数作为过滤条件,得到由所有table数据过滤所得仅包含对应字段的数组
(3) 设置初始值,创建二维数组,遍历数据执行逻辑:第二条数据与第一条数据做对比,当所有对应值相等,则把第二条数据对应值push进第一条数据所在二维数组的元素数组中,然后第三条数据再与第一条数据进行同样对比逻辑,直到遇到与第一条数据不满足所有对应值相等时,则该条数据在二维数组中新增一个数组元素,并作为该数组元素的第一个元素。然后继续进行遍历,后面的将该条数据作为前者进行对比,后续逻辑都相同了
(4) 然后再遍历上述二维数组,拿到我们所需要的该列所有行进行合并时所对应的rowSpan数字数组
(5)最后通过传入的行index,相应返回该行在rowSpan数字数组中所对应的数字

3.最终我们使用封装函数的方式如下

{title: '物料编号',dataIndex: 'itemno',customRender: (value, row, index) => {const obj = {children: value,attrs: {}}obj.attrs.rowSpan = getRowSpanCount(this.noPickingData, 'itemno', 'itemId', index)return obj}
},

意为在物料编号这一列,只要出现itemno和itemId这两个字段同时相等时,则进行行合并

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

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

相关文章

数据结构与算法-栈-移掉K位数字

移掉K位数字 给你一个以字符串表示的非负整数 num 和一个整数 k &#xff0c;移除这个数中的 k **位数字&#xff0c;使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 &#xff1a; 输入&#xff1a;num "1432219", k 3 输出&#xff1a;&quo…

kubernetes ingress 详解 (包含灰度发布/金丝雀部署)

写在前面&#xff1a;如有问题&#xff0c;以你为准&#xff0c; 目前24年应届生&#xff0c;各位大佬轻喷&#xff0c;部分资料与图片来自网络 内容较长&#xff0c;页面右上角目录方便跳转 ingress 介绍 架构 原理 官网资料&#xff1a;Ingress 控制器 | Kubernetes 我…

智能商品系统如何协同其他系统共享数据和优化供应链决策?

智能商品系统可以通过与其他系统&#xff08;如ERP系统&#xff09;进行数据集成和协同工作&#xff0c;以实现数据共享和优化供应链决策。具体而言&#xff0c;可以采取以下方法&#xff1a; 数据接口和集成&#xff1a;智能商品系统和ERP系统可以通过数据接口进行连接和数据交…

原码和补码之间的相互转化

写个笔记&#xff0c;防止遗忘。 补码是一种计算机中用于表示有符号整数的方式&#xff0c;它允许使用相同的二进制加法操作来处理有符号数的加法和减法&#xff0c;简化了计算机的设计。 补码转换为原码&#xff08;从补码得到实际数值&#xff09;&#xff1a; 如果补码的…

apache共享目录文件配置

httpd配置文件路径 /etc/httpd/conf/httpd.conf 配置单个节点 httpd中原本有一个配置 <Directory "/var/www">AllowOverride None# Allow open access:Require all granted </Directory># Further relax access to the default document root: <D…

身为程序员,你很有必要了解一下提效工具“JNPF”

如果你有软件开发的需求&#xff0c;推荐你使用以Vue为技术栈的低代码JNPF。 这款低代码和市面上的其他低代码区别很大的&#xff0c;相较于轻流、简道云、轻宜搭、微搭、帆软、活字格等等&#xff0c;这类面向业务人群使用的低代码&#xff08;不需要研发人员操作的编写的&am…

英飞凌TC3xx之一起认识GTM(九)GTM相关知识简述及应用实例(CMU,CCM,TBU,MON)

英飞凌TC3xx之一起认识GTM(九)GTM相关知识简述及应用实例(CMU,CCM,TBU,MON) 1 时钟管理单元(CMU)2 集群配置模块(CCM)3 时基单元(TBU)4 监控单元(MON)5 总结由前文的各篇内容,开发者已经知道如何使用GTM的大部分功能,在这些功能中,都需要一个信息就是fGTM 的数据…

软件测试|MySQL SHOW DATABASES详解

简介 在MySQL中&#xff0c;SHOW DATABASES是一条SQL语句&#xff0c;用于显示当前MySQL服务器上所有可用的数据库。这条简单而常用的命令可以让你快速查看服务器上的数据库列表。本文将详细介绍SHOW DATABASES的使用方法以及相关注意事项。 语法 在 MySQL 中&#xff0c;可…

Redis 7.0性能大揭秘:如何优化缓存命中率?

Redis 7.0&#xff0c;这货不仅仅是一个简单的缓存工具&#xff0c;它更是一款高性能的数据结构服务器。现在&#xff0c;大家都知道缓存命中率对性能影响特别大&#xff0c;但怎么优化它呢&#xff1f; 本文&#xff0c;已收录于&#xff0c;我的技术网站 ddkk.com&#xff0…

vue3 img图片怎么渲染

在 Vue3 中加载图片&#xff08;img&#xff09;src地址时&#xff0c;出现无法加载问题。网上很多都建议使用 require 加载相对路径&#xff0c;如下&#xff1a; <img :src"require(../assets/img/icon.jpg)"/>但是按照这种方式加载又会报错如下&#xff1a;…

商城小程序(7.加入购物车)

目录 一、配置vuex二、创建购物车的store模块三、在商品详情页中使用store模块四、实现购加入购物车功能五、动态统计购物车中商品的总数量六、持久化存储购物车的商品七、优化商品详情页的total侦听器八、动态为tabBar页面设置数据徽标九、将设置tabBar徽标的代码抽离为mixins…

tcp/ip协议2实现的插图,数据结构6 (24 - 章)

(142) 142 二四1 TCP传输控制协议 tcpstat统计量与tcp 函数调用链 (143) 143 二四2 TCP传输控制协议 宏定义与常量值–上 (144) 144 二四3 TCP传输控制协议 宏定义与常量值–下 (145) 145 二四4 TCP传输控制协议 结构tcphdr,tcpiphdr (146) 146 二四5 TCP传输控制协议 结构 tcp…

05、Kafka ------ 各个功能的作用解释(主题和分区 详解,用命令行和图形界面创建主题和查看主题)

目录 CMAK 各个功能的作用解释&#xff08;主题&#xff09;★ 主题★ 分区★ 创建主题&#xff1a;★ 列出和查看主题 CMAK 各个功能的作用解释&#xff08;主题&#xff09; ★ 主题 Kafka 主题虽然也叫 topic&#xff0c;但它和 Pub-Sub 消息模型中 topic 主题及 AMQP 的 t…

考研个人经验总结【心理向】

客官你好 首先&#xff0c;不管你是以何种原因来到这篇博客&#xff0c;以下内容或多或少可能带给你一些启发。如果你还是大二or大三学生&#xff0c;有考研的打算&#xff0c;不妨提前了解一些考研必备的心理战术&#xff0c;有时候并不是你知识学得不好&#xff0c;而是思维…

SQL DML

# DML—添加数据 1.给指定字段添加数据 INSERT INTO表名(字段名1,字段名2,...)VALUES(值1&#xff0c;值2...); 2.给全部字段添加数据 INSERT INTO表名VALUES(值1&#xff0c;值2,...); 3.批量添加数据 INSERT INTO表名(字段名1,字段名2,...)VALUES(值1&#xff0c;值2..…

供应链安全-镜像 Trivy kubesec

开头语 写在前面&#xff1a;如有问题&#xff0c;以你为准&#xff0c; 目前24年应届生&#xff0c;各位大佬轻喷&#xff0c;部分资料与图片来自网络 内容较长&#xff0c;页面右上角目录方便跳转 Dockerfile 文件优化 减少镜像层&#xff1a;一次RUN指令形成新的一层&a…

华纳云:Ubuntu上如何增加Swap分区?

在Ubuntu上增加Swap分区有几种常见的方式&#xff0c;以下是其中两种&#xff1a; 1. 创建Swap文件&#xff1a; 这是一种在已有系统上扩展Swap空间的简便方法。 创建一个Swap文件&#xff0c;假设为2GB&#xff08;根据需要进行调整&#xff09;&#xff1a; sudo fallocate -…

人工智能图像生成的道德利弊

目录 一、我们应该关注人工智能图像吗&#xff1f;二、利用人工智能增强创造力的积极作用三、版权和剽窃问题四、对就业和劳动力动态的影响五、无意识的偏见和影响六、负责任地前行 人工智能&#xff08;AI&#xff09;发展迅速&#xff0c;尤其是近年来。据估计&#xff0c;超…

Flutter 监听前台和后台切换的状态

一 前后台的切换状态监听 混入 WidgetsBindingObserver 这个类&#xff0c;这里提供提供了程序状态的一些监听 二 添加监听和销毁监听 overridevoid initState() {super.initState();//2.页面初始化的时候&#xff0c;添加一个状态的监听者WidgetsBinding.instance.addObserver…

服务器宕机怎么办?怎么预防宕机?

相信不少用户会听到或者在文章中提到电脑宕机或者服务器宕机&#xff0c;不少用户对宕机的意思不太理解。那么服务器宕机是什么意思&#xff1f; 宕机属于计算机的术语&#xff0c;指电脑或者服务器不能正常工作。口语中我们简单的把停掉机器叫做down机&#xff0c;转换为汉字是…