el-table合并列实例

想要实现效果:

目前接口返回数据

data:[{companyCode: "NXKYS",companyName:'1123',costContractId:'1123',costContractName:'1123',createBy:'1123',details:[{brand:'1123',contractItemName:'1123',modelSpec:'1123',projectItemId:'1123',requestQty:'1123',transactionZone:'1123'},{brand:'1123',contractItemName:'1123',modelSpec:'1123',projectItemId:'1123',requestQty:'1123',transactionZone:'1123'},]},{companyCode: "NXKYS",companyName:'1123',costContractId:'1123',costContractName:'1123',createBy:'1123',details:[{brand:'1123',contractItemName:'1123',modelSpec:'1123',projectItemId:'1123',requestQty:'1123',transactionZone:'1123'},{brand:'1123',contractItemName:'1123',modelSpec:'1123',projectItemId:'1123',requestQty:'1123',transactionZone:'1123'},]}];

其中要根据details这个字段去进行展示图中标记的列。并将其他列进行合并。

首先要重新修改数据格式,方便进行合并以及列表渲染的展示。

接口返回的数据在tableData.value中

计算需要处理子表的数据

const flattenedData = computed(() => {const result = [];const data = tableData.value;if (!data || !Array.isArray(data)) {return result;}data.forEach((mainItem, mainIndex) => {if (mainItem?.details && Array.isArray(mainItem.details) && mainItem.details.length > 0) {mainItem.details.forEach((detail, detailIndex) => {result.push({...mainItem,...detail,_mainIndex: mainIndex,_detailIndex: detailIndex});});} else {result.push({...mainItem,_mainIndex: mainIndex, _detailIndex: 0 // 这是 details 为空时的唯一一行});}});return result;});

el-table中添加span-method方法

<el-table

          ref="tableRef"

          v-loading="tableLoading"

          :data="flattenedData"

          :height="tableHeight"

          :header-cell-style="{ backgroundColor: '#F6F8FC' }"

          highlight-current-row

          :border="props.border"

          v-bind="$attrs"

          @current-change="handleSelectionChange"

          @header-dragend="headerDragend"

          :scrollbar-always-on="true"

          :span-method="objectSpanMethod"

        >

const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => {const mergeColumns = ['documentCode','costContractId','costContractName','supplierName','handlerDepartmentDesc','projectId','projectName','whName','whCategoryDesc','workflowStateDesc','xz','xh','cz',];const prop = column.property;if (!row) {console.warn('Row is undefined in objectSpanMethod');return { rowspan: 1, colspan: 1 };}if (row._mainIndex === undefined || row._mainIndex === null) {console.warn(`_mainIndex is ${row._mainIndex} for row at index ${rowIndex}`);return { rowspan: 1, colspan: 1 };}if (mergeColumns.includes(prop)) {const mainItemIndex = row._mainIndex;if (!tableData.value || mainItemIndex < 0 ||mainItemIndex >= tableData.value.length ) {console.error('Invalid mainItemIndex or tableData');return { rowspan: 1, colspan: 1 };}const mainItem = tableData.value[mainItemIndex]; if (!mainItem) {console.error(`mainItem is missing for index ${mainItemIndex}`);return { rowspan: 1, colspan: 1 };}const details = mainItem.details || [];const detailCount = details.length;const effectiveRowspan = detailCount > 0 ? detailCount : 1;if (row._detailIndex === 0) {return {rowspan: effectiveRowspan,colspan: 1,};} else {return {rowspan: 0,colspan: 0,};}}return {rowspan: 1,colspan: 1,};
};

mergeColumns定义的是需要进行合并的列的props;

列表渲染就正常展示就可以

如:

 <el-table-column

        prop="transactionZone"

        label="入库分区"

        :show-overflow-tooltip="true"

        width="150"

      >

      </el-table-column>

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

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

相关文章

虚假 TradingView Facebook 广告在全球传播 Android 间谍软件

一项快速发展的恶意广告活动最初通过 Meta 的广告网络针对 Windows 用户&#xff0c;现已将其范围扩展到 Android 设备&#xff0c;推广伪装成合法交易应用程序的 Brokewell 恶意软件的高级版本。 Bitdefender Labs 警告称&#xff0c;此次移动攻击活动目前已在全球范围内展开…

Android系统框架知识系列(十九):Android安全架构深度剖析 - 从内核到应用的全栈防护

​关键词​&#xff1a;安全启动链、应用沙箱、SELinux、硬件安全模块、权限控制、零信任架构一、Android安全架构的基本概念与背景1. 移动安全环境的特殊性Android作为全球最大的移动操作系统&#xff0c;面临着独特的安全挑战&#xff1a;​移动设备的安全威胁维度​&#xf…

智能消防栓闷盖终端:让城市消防管理更智慧高效

然而您是否知道&#xff0c;这些传统的消防栓常常面临非法开启、人为破坏、水压不足等管理难题&#xff1f;当火灾真正发生时&#xff0c;它们能否可靠地提供"救命水"&#xff1f;如今&#xff0c;随着智能消防栓闷盖终端的出现&#xff0c;这一切正在悄然改变。 智…

【系统架构设计(一)】系统工程与信息系统基础上:系统工程基础概念

文章目录一、系统工程的基本概念二、系统工程方法论1、霍尔三维结构&#xff1a;硬科学2、切克兰德方法&#xff1a;软科学思维3、其他三、系统工程生命周期管理1、生命周期阶段划分2、生命周期方法论系统工程与信息系统基础为复杂系统设计提供从思维方法到具体技术的全方位指导…

[p2p-Magnet] 队列与处理器 | DHT路由表

第6章&#xff1a;队列与处理器 在第5章&#xff1a;分类器中&#xff0c;我们了解了系统如何分析原始种子数据。但当系统突然发现数百万新种子时&#xff0c;如何高效处理这些海量任务&#xff1f;这就是队列与处理器系统的职责所在。 核心概念 任务队列 功能定位&#xf…

Spring JDBC 源码初探:异常处理体系

一、Spring JDBC 异常体系简介 当我们使用 Spring JDBC 进行数据访问时&#xff0c;大多数人关注的是 JdbcTemplate 如何简化数据库操作&#xff0c;却很少有人去深入理解异常体系。事实上&#xff0c;异常不仅仅是错误提示&#xff0c;它是系统健壮性、可维护性的重要一环。JD…

如何提高微型导轨的生产效率?

在精密机械制造领域&#xff0c;每一个细微的元件都可能成为决定产品性能和品质的关键因素。而微型导轨正是体型小、高精度优势&#xff0c;在精密制造领域得到广泛应用&#xff0c;它高效支撑着现代工业的生产方式和效率。那么&#xff0c;如何提高微型导轨的生产效率呢&#…

轻量xlsx读取库xlsx_drone的编译与测试

这个库是在看其他网页时&#xff0c;作为和功能丰富的xlsxio库的对比来的&#xff0c;按照xlsx_drone github页面介绍&#xff0c; 特征 不使用任何外部应用程序来解析它们。注重速度而不是功能。简单的接口。UTF-8 支持。 安装 直接将 src 和 ext 文件夹复制并粘贴到项目根文…

Linux/UNIX系统编程手册笔记:文件I/O、进程和内存分配

文件 I/O 深度解析&#xff1a;掌握通用 I/O 模型的核心逻辑 在 Linux 系统编程中&#xff0c;文件 I/O 是程序与外部设备&#xff08;文件、设备等 &#xff09;交互的基础。从打开文件到读写数据&#xff0c;再到关闭资源&#xff0c;一系列系统调用构成了通用 I/O 模型的核心…

C++转置正方形矩阵

C转置正方形矩阵&#xff0c;就是正方形矩阵的a[i][j]a[j][i]。输入31 2 34 5 6 7 8 9输出1 4 72 5 83 6 9#include<bits/stdc.h> using namespace std; int main(){int n;cin>>n;int arr[n5][n5];for(int i0;i<n;i){for(int j0;j<n;j){cin>>arr[i][j]…

Ztero文献管理工具插件设置——亲测有效

一、Zotero简介与安装 Zotero是一款开源文献管理软件&#xff0c;能够帮助我们方便地收集、整理、引用和导出文献。它作为一个"在你的网页浏览器中工作的个人研究助手"&#xff0c;可以捕获网页内容并自动添加引用信息。 安装步骤&#xff1a; 访问Zotero官网&…

【gflags】安装与使用

gflags1. 介绍2. 安装3. 使用3.1 头文件3.2 定义参数3.3 访问参数3.4 不同文件访问参数3.5 初始化所有参数3.6 运行参数设置3.7 配置文件的使用3.8 特殊参数标识1. 介绍 gflags 是 Google 开发的一个开源库&#xff0c;用于 C 应用程序中命令行参数的声明、定义和解析。gflags…

基于MATLAB的三维TDOA定位算法仿真实现

一、算法原理与仿真框架 三维TDOA&#xff08;Time Difference of Arrival&#xff09;定位通过测量信号到达多个基站的时间差&#xff0c;结合几何关系反演目标位置。其核心步骤包括&#xff1a;几何建模&#xff1a;建立目标与基站间的距离差方程&#xff0c;形如下式&#x…

Linux-搭建DNS服务器

Linux-搭建DNS服务器1. 安装软件bind2.修改配置文件3. 在其他机器上测试DNS服务器4. 配置本地域名解析5. 优化后的zone1. 安装软件bind bind是历史非常悠久&#xff0c;而且性能非常好的dns域名系统的软件 [rootdns-server ~]# yum install bind bind-utils -y 启动named服务 …

从全栈开发视角看Java与前端技术融合实践

从全栈开发视角看Java与前端技术融合实践 面试场景记录&#xff1a;一次真实的面试对话 面试官&#xff1a;你好&#xff0c;很高兴见到你。我是这次面试的负责人&#xff0c;可以简单介绍一下你自己吗&#xff1f; 应聘者&#xff1a;您好&#xff0c;我叫李明&#xff0c;今年…

第二阶段WinForm-11:自定义控件

1_继承链 &#xff08;1&#xff09;Form1的继承链&#xff1a;Form1>Form>ContainerControl>ScrollableControl>Control &#xff08;2&#xff09;Button的继承链&#xff1a;Button>ButtonBase>Control>Component 2_自定义控件 &#xff08;1&…

【2025 完美解决】Failed connect to github.com:443; Connection timed out

文章目录前言1. 生成并上传 SSH Key2. 写 SSH 配置&#xff0c;强制走 ssh.github.com:4433. 连通性自检&#xff08;看是否能握手成功&#xff09;4. 克隆5. 验证前言 今天和往常一样&#xff0c;写完代码&#xff0c;准备 push 到 github 仓库中&#xff0c;结果发现一直卡在…

C++基础(③反转字符串(字符串 + 双指针))

题目描述&#xff1a;编写一个函数&#xff0c;将输入的字符串反转过来&#xff08;要求原地修改字符串&#xff0c;不使用额外空间&#xff09;。 示例&#xff1a;输入 s ["h","e","l","l","o"] → 输出 ["o",…

vue的动态组件keep-alive实现组件缓存和状态保留

在 Vue.js 中&#xff0c;动态组件结合 keep-alive 是实现组件缓存和状态保留的重要技术方案。以下是详细解析&#xff1a;一、动态组件基础 通过 <component :is> 实现组件动态切换&#xff1a; <component :is"currentComponent"></component>cu…

安装Docker Desktop报错WSL needs updating

&#xff08;1&#xff09;首先观察下面是否勾选&#xff08;2&#xff09;说明已经启动了&#xff0c;但是需要更新&#xff0c;cmd运行下面代码&#xff0c;记得需要开一下代理&#xff0c;可能会有点慢上面就算好了&#xff08;3&#xff09;点击restart这样就代表成功了