【antd + vue】表格行合并,同时使用插槽

一、需求说明

表格中,如果一个学校有多个考试科目,则分行展示,其余列,则合并为一行展示,如图所示

 

二、需求分析

1、表格行合并

相当于有4行,其中1、2行是同一个学校包含不同考试科目及对应人次的数据,所以除“考试科目、科目人次”列外,其余列数据相同,需要合并成一行;其中3、4行,同理;

ps:即上图所示,分行展示的同一个学校中,“考试科目、科目人次”列如果有多个科目,则分行展示。

2、单元格内容自定义

“序号”列:根据合并行后的序号计算;

“完善性检查”列:需要根据返回结果来判断,单元格的内容及样式;

“操作”列:需要自定义单元格内容;

 三、解决办法

1、html 代码

<a-table:rowKey="(record, index) => index":columns="dataList.columns":dataSource="dataList.dataSource":loading="dataList.loading":pagination="false"bordered
><!-- “序号”列 --><template v-slot:num="slotProps">{{(queryParm.pageIndex - 1) * queryParm.pageSize +dataList.mergeList.slice(0, slotProps.index).filter(res => {return res !== 0;}).length +1}}</template><!-- “完备性检测”列 --><template #state="{ record }"><span v-if="record.state === '2'" class="safe-level-1">考生照异常</span><span v-else-if="record.state === '1'" class="safe-level-2">正常</span><span v-else class="safe-level-1">考生照片不全</span></template><!-- “操作”列 --><template #action="{ record }"><div class="inline look" @click.stop="getDetails(record)"><svg-icon icon-class="details" class="icon look"></svg-icon><span class="note">详情</span></div></template>
</a-table>

 

2、数据 格式


const queryParm= reactive({pageIndex: 1,pageSize: 10
});const dataList= reactive({dataSource: [],columns: [{title: "序号",dataIndex: "num",key: "num",align: "center",width: 100,slots: { customRender: "num" },customCell: (record, rowIndex) => {return {style: {display: dataList.mergeList[rowIndex] === 0 ? "none" : undefined},rowSpan: dataList.mergeList[rowIndex]};}},{title: "学校名称",dataIndex: "schoolName",key: "schoolName",ellipsis: true,customCell: (record, rowIndex) => {return {style: {display: dataList.mergeList[rowIndex] === 0 ? "none" : undefined},rowSpan: dataList.mergeList[rowIndex]};}},{title: "所属区县",dataIndex: "cityName",key: "cityName",ellipsis: true,customCell: (record, rowIndex) => {return {style: {display: dataList.mergeList[rowIndex] === 0 ? "none" : undefined},rowSpan: dataList.mergeList[rowIndex]};}},{title: "报名人数",dataIndex: "stuNum",key: "stuNum",ellipsis: true,customCell: (record, rowIndex) => {return {style: {display: dataList.mergeList[rowIndex] === 0 ? "none" : undefined},rowSpan: dataList.mergeList[rowIndex]};}},{title: "涉及考点",dataIndex: "siteName",key: "siteName",ellipsis: true,customCell: (record, rowIndex) => {return {style: {display: dataList.mergeList[rowIndex] === 0 ? "none" : undefined},rowSpan: dataList.mergeList[rowIndex]};}},{title: "考试科目",dataIndex: "subjectName",key: "subjectName",ellipsis: true},{title: "科目人次",dataIndex: "numberOfSubject",key: "numberOfSubject",ellipsis: true},{title: "上传时间",dataIndex: "createTime",key: "createTime",ellipsis: true,customCell: (record, rowIndex) => {return {style: {display: dataList.mergeList[rowIndex] === 0 ? "none" : undefined},rowSpan: dataList.mergeList[rowIndex]};}},{title: "完备性检测",dataIndex: "state",key: "state",ellipsis: true,slots: { customRender: "state" },customCell: (record, rowIndex) => {return {style: {display: dataList.mergeList[rowIndex] === 0 ? "none" : undefined},rowSpan: dataList.mergeList[rowIndex]};}},{title: "操作",dataIndex: "action",key: "action",width: 100,slots: { customRender: "action" },customCell: (record, rowIndex) => {return {style: {display: dataList.mergeList[rowIndex] === 0 ? "none" : undefined},rowSpan: dataList.mergeList[rowIndex]};}}],total: 0,loading: false,mergeList: []}
});

 

 注意事项


 PS:

1、使用 customCell 属性合并行,则不会影响插槽及 customRender 属性的使用;

2、customCell 单元格合并后,需要对被合并行进行样式上的隐藏处理(如果没有在样式上隐藏被合并行,则被合并行会被挤到该行列尾);

3、rowSpan 属性 支持行合并:

        值为 0 时,该单元格不会渲染(即,被合并);

        值为 1 时,该单元格正常显示(即,1行);

        值为 2 时,该单元格与下一行一起合并展示(即,原2行,现1行展示);

        值为 3 时,该单元格与下两个行一起合并展示(即,原3行,现1行展示);

        以此类推

 

 3、合并行计算

数据处理代码如下:

/*** @description 获取合并单元格rowSpan集合* @param {Array} dataScroce 数据源* @param {String} filed 需要合并的字段* @returns {Array} 该字段下单元格rowSpan集合*/
const getRowspan = (dataScroce, filed) => {let spanArr = [];let position = 0;dataScroce.forEach((item, index) => {if (index === 0) {spanArr.push(1);position = 0;} else {//需要合并的地方判断if (dataScroce[index][filed] === dataScroce[index - 1][filed]) {spanArr[position] += 1;spanArr.push(0);} else {spanArr.push(1);position = index;}}});return spanArr;
};

得到每行是否需要合并的结果:

dataList.mergeList = getRowspan(dataList.dataSource, "schoolName");

 

四、参考链接

antd的a-table表格中合并且使用插槽(使用customRender合并出现问题解决方案)_a-table customrender-CSDN博客文章浏览阅读1.5w次,点赞30次,收藏44次。antd的a-table表格中合并且使用插槽1. customRender合并单元格在antd官方文档中,是由使用customRender方式将单元格合并的方法data() { const columns = [ { title: 'Name', dataIndex: 'name', customRender: (text, row, index) => { if (index < 4) { _a-table customrenderhttps://blog.csdn.net/chenyuhang_henry/article/details/118187249?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-118187249-blog-124870111.235^v43^pc_blog_bottom_relevance_base9&spm=1001.2101.3001.4242.3&utm_relevant_index=7

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

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

相关文章

判断磁盘是SSD或HDD盘

1. 判断磁盘是SSD或HDD盘 1、没有使用raid方案 lsblk -d -o name,rota命令&#xff0c;0表示SSD&#xff0c;1表示HDD # lsblk -d -o name,rota NAME ROTA sda 0 sdb 1 sdc 12、使用raid方案 下载工具 wget https://raw.githubusercontent.com/eLvErDe/hwraid…

Java_多线程:实现多线程

Java中实现多线程的常用方式&#xff1a; 继承Thread类实现Runnable接口实现Callable接口(JDK>1.5)线程池方式创建 实现Runnable接口与Callable接口的区别 Callable规定&#xff08;重写&#xff09;的方法是call()&#xff0c;Runnable规定&#xff08;重写&#xff09;的…

Java的全局异常处理代码

第一步&#xff1a;先写一个异常管理类: package com.example.firefighting.exceptions;import com.example.firefighting.utils.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerA…

手机数据恢复篇:如何在恢复出厂设置后的 iPhone 恢复短信

您可能会认为&#xff0c;在恢复出厂设置iPhone后恢复短信时&#xff0c;一切都会丢失&#xff0c;但是仍然有一些方法可以检索您的重要对话。截至 2024 年&#xff0c;数据恢复技术的进步使得从备份甚至直接从设备内存中抢救消息变得更加容易。无论是通过 iCloud、iTunes 还是…

LeetCode Hard|124.二叉树中的最大路径和

力扣题目链接 题目解读&#xff1a; 二叉树路径的定义即从1.任意节点出发&#xff0c;到达任意节点&#xff1b;2.该路径至少包含一个节点&#xff0c;且不一定经过跟节点&#xff1b;3.求所有可能路径和的最大值。 也就是说路径途径一个节点只能选择来去两个方向 考虑一个二叉…

mongoose的个性化提取(字段筛选,数据据排序,数据截断)

1.字段筛选 let BookModel mongoose.model(books,BookSchema);BookModel.find().select({name:1,author:1}).then((err,data) > {//回调返回数据if(err){console.log(err);return;}console.log(data);})//值为1表示显示数据&#xff0c;为0表示不显示数据 数据排序 BookMod…

2025年U.S.News世界大学排名前200榜单

近日&#xff0c;U.S. News公布了2025全球最佳院校排名&#xff0c;作为公认的四大世界高校排行榜&#xff0c;该排名主要围绕着学术声誉、学术成果等&#xff0c;因此备受访问学者、联合培养博士生及博士后申请者们青睐&#xff0c;知识人网小编特作介绍并发布排名前200的榜单…

使用Go语言实现高效的数据挖掘

随着数据量的不断增加以及各种数据类型的不断涌现&#xff0c;数据挖掘技术变得越来越重要。在现代数据科学领域中&#xff0c;使用大量数据进行机器学习和其他挖掘任务已经成为常态。然而&#xff0c;在完成这些任务时&#xff0c;使用的编程语言对效率和结果都有着重要的影响…

我与C++的爱恋:list的使用

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 一、list介绍 1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代 2.list的底层是双向链表结构&#xff0c;双向链表中…

华为OCR 腾讯OCR 百度OCR 三家各分秋色 第一当属华为

当提及华为OCR的应用场景时&#xff0c;这些是常见的使用案例&#xff1a; 金融行业&#xff1a;在银行和金融机构中&#xff0c;华为OCR技术广泛用于身份证件识别、银行卡识别和票据识别。这些功能可以用于客户身份验证、快速开户以及自动化的支付处理。 政府服务&#xff1a…

浅析Estimator、model_fn与EstimatorSpec

参考阅读&#xff1a;https://zhuanlan.zhihu.com/p/74857888 文章目录 综合对比Estimatormodel_fnEstimatorSpec关系总结 Estimator主要功能构造函数参数示例用法小结 model_fnEstimatorSpec字段解释解释代码用途 综合对比 Estimator、model_fn 和 EstimatorSpec 是 TensorF…

西电811考研、140分专业课及811/821经验

被拟录取了&#xff0c;说一说自己考研经验&#xff0c;本人跟的研梦考研全程班&#xff0c;胖覃学长很负责任&#xff0c;貌似已经直博西电了&#xff0c;但也很负责。 1、通信工程学院分为学硕与专硕&#xff0c;学硕包含信息与通信工程、交通运输工程、军队指挥学&#xff…

Perl语言中的排序艺术:深入探讨内置排序函数

Perl是一种功能强大的脚本语言&#xff0c;以其灵活的文本处理能力而闻名。在Perl中&#xff0c;排序是一项常见的任务&#xff0c;无论是对数组元素进行排序&#xff0c;还是对复杂数据结构进行排序&#xff0c;Perl都提供了多种内置的排序函数&#xff0c;以满足不同的需求。…

深入掌握Symfony与Composer:PHP依赖管理的艺术

引言 Composer是PHP的依赖管理工具&#xff0c;广泛用于Symfony等现代PHP应用程序中。它允许开发者声明依赖项&#xff0c;自动处理依赖的安装和更新&#xff0c;确保应用程序的依赖项得到有效管理。本文将详细介绍Composer的使用方法&#xff0c;包括基本命令、依赖管理、自动…

Linux环境安装配置nginx服务流程

Linux环境的Centos、麒麟、统信操作系统安装配置nginx服务流程操作&#xff1a; 1、官网下载 下载地址 或者通过命令下载 wget http://nginx.org/download/nginx-1.20.2.tar.gz 2、上传到指定的服务器并解压 tar -zxvf nginx-1.20.1.tar.gzcd nginx-1.20.1 3、编译并安装到…

条件过滤检索

背景介绍 在大多数业务场景中&#xff0c;单纯使用向量进行相似性检索并无法满足业务需求&#xff0c;通常需要在满足特定过滤条件、或者特定的“标签”的前提下&#xff0c;再进行相似性检索。 向量检索服务DashVector支持条件过滤和向量相似性检索相结合&#xff0c;在精确满…

数字化供应链:背景特点

​背景 1、外部环境 近年来&#xff0c;供应链脆弱性凸显&#xff0c;企业供应链压力难以缓解。 美国媒体针对美国零售联合会、美国服装和鞋类协会、美国供应链管理专业委员会等主体进行的一项供应链调查显示&#xff1a; 61%的供应链经理预计&#xff0c;供应链紊乱问题至少…

C++(第一天-----命名空间和引用)

一、C/C的区别 1、与C相比   c语言面向过程&#xff0c;c面向对象。   c能够对函数进行重载&#xff0c;可使同名的函数功能变得更加强大。   c引入了名字空间&#xff0c;可以使定义的变量名更多。   c可以使用引用传参&#xff0c;引用传参比起指针传参更加快&#…

企业化运维(5)_mysql数据库

###1.源码编译mysql### 对压缩包进行解压&#xff0c;并对mysql进行源码编译&#xff0c;其中需要下载依赖才能编译成功。 官网&#xff1a; www.mysql.com解压并进入目录 [rootserver1 ~]# tar xf mysql-boost-5.7.40.tar.gz [rootserver1 ~]# cd mysql-5.7.40/安装依赖性…

初识Java(复习版)

一. 什么是Java Java是一种面向对象的编程语言&#xff0c;和C语言有所不同&#xff0c;C语言是一门面向过程的语言。偏底层实现&#xff0c;比较注重底层的逻辑实现。不能一味的说某一种语言特别好&#xff0c;每一种语言都是在特定的情况下有自己的优势。 二.Java语言发展史…