【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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生成式AI赋能金融信贷:减少信用评分偏差

信用评分在确定谁获得信贷以及以何种条件获得信贷方面发挥着关键作用。然而&#xff0c;尽管这一点很重要&#xff0c;但传统的信用评分系统长期以来一直受到一系列关键问题的困扰——从偏见和歧视&#xff0c;到有限的数据考虑和可扩展性挑战。例如&#xff0c;一项针对美国贷…

1:25万基础电子地图(西藏版)

我们为你分享过四川版、云南版、江西版、贵州版、重庆版和青海版的1比25万基础电子地图&#xff0c;现在再为你分享西藏版的电子地图。 如果你需要西藏版的1比25万基础电子地图&#xff0c;你可以在文末查看该数据的领取方法。 基础电子地图西藏版 西藏版1:25万基础电子地图…

Xilinx FPGA:vivado利用单端RAM/串口传输数据实现自定义私有协议

一、项目要求 实现自定义私有协议&#xff0c;如&#xff1a;pc端产生数据&#xff1a;02 56 38 &#xff0c;“02”代表要发送数据的个数&#xff0c;“56”“38”需要写进RAM中。当按键信号到来时&#xff0c;将“56”“38”读出返回给PC端。 二、信号流向图 三、状态…

FVCOM水环境、污染物迁移、水交换、水质、潮流、温盐、波浪及泥沙数值模拟

原文链接&#xff1a;FVCOM水环境、污染物迁移、水交换、水质、潮流、温盐、波浪及泥沙数值模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247607618&idx2&sn5132fb8bfcbd02c2be308f6c6304c6d2&chksmfa8264a5cdf5edb3226d1b0597bb6c39f867601b961b…

[开源软件] 支持链接汇总

“Common rules: 1- If the repo is on github, the support/bug link is also on the github with issues”" label; 2- Could ask questions by email list;" 3rd party software support link Note gcc https://gcc.gnu.org openssh https://bugzilla.mindrot.o…

Web3 ETF 的软件开发框架

Web3 ETF 的软件开发框架主要包含以下几个方面&#xff0c;需要说明的是&#xff0c;Web3 ETF 仍处于早期发展阶段&#xff0c;相关技术和标准尚未成熟。在开发 Web3 ETF 时&#xff0c;需要谨慎评估风险&#xff0c;并做好安全防范措施。北京木奇移动技术有限公司&#xff0c;…

解决卡顿发热,超帧技术焕发中重载游戏动力

近几年&#xff0c;中国手游市场规模不断扩大&#xff0c;开发者通过在画面、玩法等方面的持续创新和打磨&#xff0c;推出更加精品化的产品。然而愈发精美的画质和复杂的玩法&#xff0c;也给硬件带来超高的负载&#xff0c;导致玩家在游戏过程中&#xff0c;频繁出现掉帧卡顿…

C++基础知识-编译相关

记录C语言相关的基础知识 1 C源码到可执行文件的四个阶段 预处理(.i)、编译(.s)、汇编(.obj)、链接。 1.1 预处理 预处理阶段&#xff0c;主要完成宏替换、文件展开、注释删除、条件编译展开、添加行号和文件名标识&#xff0c;输出.i/.ii预处理文件。 宏替换&#xff0c;…

【AIGC评测体系】大模型评测指标集

大模型评测指标集 &#xff08;☆&#xff09;SuperCLUE&#xff08;1&#xff09;SuperCLUE-V&#xff08;中文原生多模态理解测评基准&#xff09;&#xff08;2&#xff09;SuperCLUE-Auto&#xff08;汽车大模型测评基准&#xff09;&#xff08;3&#xff09;AIGVBench-T2…

python_zabbix

zabbix官网地址&#xff1a;19. API19. APIhttps://www.zabbix.com/documentation/4.2/zh/manual/api 每个版本可以有些差异&#xff0c;选择目前的版本在查看对于的api接口#token接口代码 import requests apiurl "http://zabbix地址/api_jsonrpc.php" data {&quo…

顺序串算法库构建

学习贺利坚老师顺序串算法库 数据结构之自建算法库——顺序串_创建顺序串s1,创建顺序串s2-CSDN博客 本人详细解析博客 串的概念及操作_串的基本操作-CSDN博客 版本更新日志 V1.0: 在贺利坚老师算法库指导下, 结合本人详细解析博客思路基础上,进行测试, 加入异常弹出信息 v1.0补…

从零开始:如何设计一个现代化聊天系统

写在前面: 此博客内容已经同步到我的博客网站,如需要获得更优的阅读体验请前往https://mainjaylai.github.io/Blog/blog/system/chat-system 在当今数字化时代,聊天系统已成为我们日常生活和工作中不可或缺的一部分。从个人交流到团队协作,从客户服务到社交网络,聊天应用…

内网渗透第四天!!!冲冲冲!!怎么绕过uac以及你会all劫持???不安全的服务路径以及服务权限,你会吗???

在第三天我们简单的说了一下绕过uac&#xff0c;但是我们使用的msf模块ask要对方管理员跟我们一起来进行操作&#xff0c;才可以进行提权的操作&#xff0c;这点就限制住了我们。我们今天来讲一下不用钓鱼的绕过的操作。 绕过uac&#xff1a; 使用uacme项目和msf联动来进行绕过…

AD9026芯片开发实录6-example code

官方发布的软件包中&#xff0c;带了一份example code&#xff0c;用于向客户展示API的调用方法以及基于官方的验证版ADRV902X最简单的bring up的流程。 该 example 位于软件包的路径下&#xff1a;“\Adi.Adrv9025.Api\src\c_src\app\example\”。 代码组成&#xff1a; initd…

.NET周刊【6月第5期 2024-06-30】

国内文章 呼吁改正《上海市卫生健康信息技术应用创新白皮书》 C# 被认定为A 组件 的 错误认知 https://www.cnblogs.com/shanyou/p/18264292 近日&#xff0c;《上海市卫生健康“信息技术应用创新”白皮书》发布&#xff0c;提到医疗信创核心应用适配方法及公立医院信息系统…

2024 年江西省研究生数学建模竞赛题目 A题交通信号灯管理---完整文章分享(仅供学习)

问题&#xff1a; 交通信号灯是指挥车辆通行的重要标志&#xff0c;由红灯、绿灯、黄灯组成。红灯停、绿灯行&#xff0c;而黄灯则起到警示作用。交通信号灯分为机动车信号灯、非机动车信号灯、人行横道信号 灯、方向指示灯等。一般情况下&#xff0c;十字路口有东西向和南北向…

二刷 动态规划

什么是动态规划 Dynamic Programming DP 如果某一问题有很多重叠子问题&#xff0c;使用动态规划时最有效的 动态规划中每一个状态是由上一个状态推导出来的。 动规五部曲 1.确定dp数组以及下标的含义 2.确定递归公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数…

分班查询系统,老师们应该如何制作?

新学期的开始&#xff0c;作为教师&#xff0c;我们面临的一项关键任务就是组织分班。传统分班方法往往需要处理大量的数据&#xff0c;这个过程不仅耗时&#xff0c;而且容易出错。为了简化这一流程&#xff0c;提高效率&#xff0c;我们可以利用现代技术&#xff0c;创建一个…

VSCode打开其它IDE项目注释显示乱码的解决方法

问题描述&#xff1a;VSCode打开Visual Studio&#xff08;或其它IDE&#xff09;工程&#xff0c;注释乱码&#xff0c;如下图所示&#xff1a; 解决方法&#xff1a;点击VSCode右下角的UTF-8&#xff0c;根据提示点击“通过编码重新打开”&#xff0c;再选择GB2312&#xff0…

【触想智能】工业平板电脑在新能源领域上的应用分析

工业平板电脑是一种具有高性能和稳定性的计算机设备&#xff0c;适用于在恶劣环境下进行数据采集、运营管理和现场操作。 随着新能源技术的快速发展&#xff0c;工业平板电脑不断地得到应用&#xff0c;并且已成为新能源领域中的重要工具之一。本文将从四个方面探讨工业平板电脑…