Vue结合el-table实现合并单元格(以及高亮单元表头和指定行)

实现效果如下:

思路:
1.首先使用动态表头表格。
2.其次实现动态计算合并单元格。(计算规则 传递需要合并的字段)
3.然后封装公共的计算单元格方法 export导出供多个页面使用。
4.同时需要封装成公共的组件供多个页面使用。
5.组件内写指定表头行高亮颜色以及指定行高亮颜色方法。

封装公共计算单元格合并方法


/*** 合并相同数据,导出合并行所需的方法(只适合el-table)* @param {Array} dataArray el-table表数据源* @param {Array} mergeRowProp 合并行的列prop* @param {Array} sameRuleRowProp 相同合并规则行的列prop*/
export function getSpanMethod(dataArray, mergeRowProp, sameRuleRowProp) {/*** 要合并行的数据*/const rowspanNumObject = {}// 初始化 rowspanNumObjectmergeRowProp.map(item => {rowspanNumObject[item] = new Array(dataArray.length).fill(1, 0, 1).fill(0, 1)rowspanNumObject[`${item}-index`] = 0})// 计算相关的合并信息for (let i = 1; i < dataArray.length; i++) {mergeRowProp.map(key => {const index = rowspanNumObject[`${key}-index`]if (dataArray[i][key] === dataArray[i - 1][key]) {rowspanNumObject[key][index]++} else {rowspanNumObject[`${key}-index`] = irowspanNumObject[key][i] = 1}})}/*** 添加同规则合并行的数据*/if (sameRuleRowProp !== undefined) {const k = Object.keys(rowspanNumObject).filter(key => {if (!key.includes('index')) {return key}})[0]for (const prop of sameRuleRowProp) {rowspanNumObject[prop] = rowspanNumObject[k]rowspanNumObject[`${prop}-index`] = rowspanNumObject[`${k}-index`]mergeRowProp.push(prop)}}/*** 导出合并方法*/const spanMethod = function({ row, column, rowIndex, columnIndex }) {if (mergeRowProp.includes(column['property'])) {const rowspan = rowspanNumObject[column['property']][rowIndex]if (rowspan > 0) {return { rowspan: rowspan, colspan: 1 }}return { rowspan: 0, colspan: 0 }}return { rowspan: 1, colspan: 1 }}return spanMethod
}

简单使用代码案例


<template><div class="container"><el-card><el-buttontype="text">vue2合并单元格多列或指定列<iclass="el-icon-s-order"/></el-button><el-table :data="tableData" :span-method="spanMethod" border><el-table-column prop="title" label="测试合并单元格多列" align="center"><el-table-columnprop="name"label="姓名"width="100"align="center"/><el-table-columnprop="gradeName"label="成绩指标"width="100"align="center"/><el-table-columnprop="unit"label="单位"width="100"align="center"/><el-table-column prop="weight" label="权重" align="center" /><el-table-column prop="amount1" label="数值 1(元)" align="center" /><el-table-column prop="amount2" label="数值 2(元)" align="center" /></el-table-column></el-table></el-card></div>
</template><script>
import { getSpanMethod } from '@/utils/commonunit.js'
export default {name: 'Index',data() {return {tableData: []}},computed: {spanMethod() {return getSpanMethod(this.tableData,['name'],['gradeName', 'unit', 'weight'])}},created() {this.getPageList()},methods: {getPageList() {const getTableDatas = [{id: '1',name: '王小虎',gradeName: '指标库',unit: '单位',weight: '权重',amount1: '234',amount2: '165'},{id: '1',name: '王小虎',gradeName: '指标库',unit: '单位',weight: '权重',amount1: '234',amount2: '165'},{id: '1',name: '王小虎',gradeName: '指标库',unit: '单位',weight: '权重',amount1: '234',amount2: '165'},{id: '1',name: '王小虎',gradeName: '指标库',unit: '单位',weight: '权重',amount1: '234',amount2: '165'},{id: '1',name: '黎明',gradeName: '指标库',unit: '单位',weight: '权重',amount1: '234',amount2: '165'},{id: '1',name: '黎明',gradeName: '指标库',unit: '单位',weight: '权重',amount1: '234',amount2: '165'},{id: '1',name: '黎明',gradeName: '指标库',unit: '单位',weight: '权重',amount1: '234',amount2: '165'},{id: '1',name: '李红',gradeName: '指标库',unit: '单位',weight: '权重',amount1: '234',amount2: '165'},{id: '1',name: '李红',gradeName: '指标库',unit: '单位',weight: '权重',amount1: '234',amount2: '165'}]this.tableData = getTableDatas}}
}
</script><style scoped lang="scss">
.container {width: 100%;
}
</style>

高亮指定表头行数据样式 高亮表头行样式 方法

 tableRowClassName({ row, rowIndex }) { // 高亮指定数据行if (row.valueAttributes === 'Y') {console.log(rowIndex)return 'warning-row'}return ''},headerRowCell(e) {if (e.column && e.column.property === 'title') { // 指定表头行样式return this.customHeaderCellStyle} else {return {}}}

下面是封装组件代码,详细可以私信我哈,看到必回!!!

vue3同理哈,都可以使用

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

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

相关文章

资治通鉴读后感之【听不同的声音、CEO风险管理、现金储备、重视领导周边的人】

听不同的声音&#xff1a; 1、能听到不同意见 2、建立保障”说不同意见“的制度 你觉得别人过得特别好&#xff0c;肯定是你跟他不熟。 欲戴皇冠&#xff0c;必承其重。 CEO风险管理&#xff1a; 1、不碰、不参与极限运动&#xff1b; 2、尊守法律&#xff1b; …

电动车新国标迎来修订机会,用户的真实需求能被满足吗?

文&#xff5c;新熔财经 作者&#xff5c;宏一 自2019年4月《电动自行车安全技术规范》发布至今&#xff0c;电动车的新国标标准已经实施5年&#xff0c;市场上的争议也此起彼伏地持续了5年。 因为新国标对电动车的各项技术标准提出的明确要求&#xff0c;其中&#xff0c;最…

【御控物联】物联网平台简述

物联网平台是一种实现设备接入、设备监控、设备管理、数据存储、消息多源转发和数据分析等能力的一体化平台。物联网平台主要具备以下四种能力。 连接管理&#xff1a; 为大批量设备提供联网通信能力&#xff0c;助力设备数据快速上云&#xff0c;解决设备孤岛、数据不能共享问…

Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066

很奇怪的问题,在使用nifi的时候碰到的,这里是用NIFI,把数据从postgresql中同步到mysql中, 首先postgresql中的源表,中是没有create_time这个字段的,但是同步的过程中报错了. 报错的内容是说,目标表中有个create_time字段,这个字段是必填的,但是传过来的flowfile文件中,的数据没…

奇怪的捐赠 蓝桥杯 java

奇怪的捐赠 地产大亨Q先生临终的遗愿是&#xff1a;拿出100万元给X社区的居民抽奖&#xff0c;以稍慰藉心中愧疚。 麻烦的是&#xff0c;他有个很奇怪的要求&#xff1a; 100万元必须被正好分成若干份&#xff08;不能剩余&#xff09;。 每份必须是7的若干次方元。 比如&…

[RK3399 Linux] 使用ubuntu 20.04.5制作rootfs

一、ubuntu base ubuntu base是用于为特定需求创建自定义映像的最小rootfs,是ubuntu可以运行的最小环境。 1.1 下载源码 下载ubuntu-base的方式有很多,可以从官方的地址:ttp://cdimage.ubuntu.com/ubuntu-base/releases。 也可以其它镜像地址下载,如清华源:https://mi…

使用shell管理和配置网络服务_1

1、请使用nmcli命令配置仅主机模式网络环境&#xff0c;要求如下: 1) 创建一个新的网卡连接eth1&#xff0c;该连接映射到ens32网卡上; 首先&#xff0c;确保 ens32 网卡没有被其他网络配置文件使用。然后&#xff0c;使用 nmcli 创建一个新的连接&#xff0c;并将其绑定到 e…

在Linux中使用dpkg -i离线安装下载的deb软件包

“dpkg -i” 是 Debian 系统中用于安装 .deb 格式软件包的命令。它是 Debian Package Management System&#xff08;DPMS&#xff09;的一部分&#xff0c;允许用户通过命令行界面来管理软件包。 使用该命令时&#xff0c;需要提供要安装的软件包的路径作为参数。例如&#…

实战纪实 | 编辑器漏洞之Ueditor-任意文件上传漏洞 (老洞新谈)

UEditor 任意文件上传漏洞 前言 前段时间在做某政府单位的项目的时候发现存在该漏洞&#xff0c;虽然是一个老洞&#xff0c;但这也是容易被忽视&#xff0c;且能快速拿到shell的漏洞&#xff0c;在利用方式上有一些不一样的心得&#xff0c;希望能帮助到一些还不太了解的小伙…

一行代码实现Android反向shell(Reverse shell)

网上关于android得反向shell 多是需要安装apk的&#xff0c;操作麻烦。 本文通过一行代码即可实现Android反向shell&#xff08;Reverse shell&#xff09;。 ------------------------------ 在 PC 上执行以下操作 &#xff08;控制端&#xff09; nc -lvp 4444 ---------…

大模型日报|今日必读的9篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.Google DeepMind 提出 RecurrentGemma&#xff1a;超越 Transformer&#xff0c;迈向高效开放语言模型 Google DeepMind 团队提出了 RecurrentGemma&#xff0c;一个使用 Google 新颖的 Griffin 架构的开放语言模型…

jenkins部署项目报错:certificate has expired

1、问题出现&#xff1a; 部署前端项目时候显示报错信息为&#xff1a; npm ERR! request to https://registry.npm.taobao.org/ant-design%2ficons failed, reason: certificate has expired2、原因 其实就是下载地址证书过期了&#xff0c;需要更新一下npm镜像源地址 3、…

PHP01——php快速入门 之 使用phpstudy快速搭建PHP环境

PHP01——php快速入门 之 使用phpstudy快速搭建PHP环境 0. 前言1. 下载小皮面板1.1 下载phpstudy&#xff08;小皮面板&#xff09;1.2 启动、简单访问1.2.1 启动Apache1.2.2 访问1.2.3 访问自定义文件或页面 2. 创建网站2.1 创建网站2.2 可能遇到的问题2.2.1 hosts权限问题&am…

【新版HI3559AV100开发注意事项(四)】

新版HI3559AV100开发注意事项&#xff08;四&#xff09; 三十、HI3559A参数中对输入分辨率限制的原因是&#xff1f; 答&#xff1a;分辨率限制有两个来源&#xff1a; 一个是时钟频率最高为600M&#xff0c;开启一拍两像素之后相当于1200M。你这个数据量太大了&#xff0c;6…

蓝桥杯省赛最后一天冲刺!!

1、一维前缀和 例如&#xff1a;给你n个数组array&#xff0c; q次询问&#xff0c;让你求出 [L, R]的区间和。 题目&#xff1a; 给出数组 [1, 3, 7, 5, 2] &#xff0c;求出 [2, 4] 这个区间的区间和。 分析&#xff1a; 我们求出前 n个数 的和 sum&#xff0c;求区间和&…

[大模型]基于 ChatGLM3 和 LangChain 搭建知识库助手

基于 ChatGLM3 和 LangChain 搭建知识库助手 环境配置 在已完成 ChatGLM3 的部署基础上&#xff0c;还需要安装以下依赖包&#xff1a; pip install langchain0.0.292 pip install gradio4.4.0 pip install chromadb0.4.15 pip install sentence-transformers2.2.2 pip inst…

微服务项目实战-黑马头条(一):环境搭建 + APP登录功能【前端静态资源+nginx反向代理+网关+过滤器】

文章目录 一、搭建nacos二、初始工程的搭建2.1 环境准备2.2主体结构 三、APP登录3.1 需求分析3.2 表结构分析3.3 接口定义3.4 功能实现 四、接口工具postman、swagger、knife4j4.1 postman4.2 swagger4.3 knife4j 五、网关5.1 网关搭建5.2 全局过滤器实现jwt校验 六、前端集成6…

目前电视盒子哪个最好?测评工作室盘点超强电视盒子推荐

每年我们会进行数十次电视盒子测评&#xff0c;对各个品牌的产品都有深入的了解&#xff0c;最近我们收到了很多私信不知道目前电视盒子哪个最好&#xff0c;这次我们结合配置总结了五款性能超强的电视盒子推荐给各位&#xff0c;预算足够想买高配电视盒子的朋友们可不要错过啦…

高级Java开发工程师手把手教你用AI人工智能帮你写JAVA代码实际案例二(生成自定义springboot定时器组件)全网唯一

高级Java开发工程师手把手教你用AI人工智能帮你写JAVA代码实际案例二全网唯一 一、需求背景案例说明 笔者有个实际的生产项目&#xff0c;想自己自定义定时器到数据库表里面&#xff0c;不想配置到配置文件里面&#xff0c;很麻烦&#xff01;这次想用AI帮我写代码&#xff0…

蓝桥杯算法题:栈(Stack)

这道题考的是递推动态规划&#xff0c;可能不是很难&#xff0c;不过这是自己第一次靠自己想出状态转移方程&#xff0c;所以纪念一下&#xff1a; 要做这些题目&#xff0c;首先要把题目中会出现什么状态给找出来&#xff0c;然后想想他们的状态可以通过什么操作转移&#xf…