el-table合并单元格之后,再进行隔行换色的实现

news2024/10/7 8:24:45

el-table 中有现成的隔行换色功能,只要增加 stripe 属性即可。但是如果有单元格合并的话,这个属性就不可用了。这时候我们就需要动点小心思了。

基于相同字段进行合并

如果是基于表头中的某一列,具有相同值进行合并的话,那么只需计算一下相同字段出现的次数并记录下来,通过自定义一个属性 isShow 来实现隔行换色功能。

实现效果如图:

在这里插入图片描述
具体代码:

<template>
  <div class="version-contrast__content">
    <el-table :data="tableData" :stripe="false" :span-method="spanMethod" :row-class-name="rowClass">
        <el-table-column prop="num" width="60" label="序号"></el-table-column>
        <el-table-column prop="indexType" label="指标类别"></el-table-column>
        <el-table-column prop="indexName" label="指标名称"></el-table-column>
        <el-table-column prop="unit" label="单位"></el-table-column>
        <el-table-column prop="panoramicMeeting" label="全景会"></el-table-column>
        <el-table-column prop="lastMonthDynamic" label="上月动态"></el-table-column>
        <el-table-column prop="thisMonthDynamic" label="本月动态"></el-table-column>
        <el-table-column width="170" prop="difference" label="差异(本月动态版-全景会)"></el-table-column>
        <el-table-column prop="differenceRate" label="差异率">
            <template slot-scope="scope">
                <span>{{scope.row.differenceRate}}%</span>
            </template>
        </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
        return {
            tableData: [
                {
                    "indexName": "总货值",
                    "num": "1.00",
                    "indexType": "货值指标",
                    "unit": "万元",
                    "panoramicMeeting": "202930",
                    "lastMonthDynamic": "52695",
                    "thisMonthDynamic": "23125",
                    "difference": "25362",
                    "differenceRate": "-88.6"
                },
                {
                    "indexName": "项目开发成本投入",
                    "num": "2.00",
                    "indexType": "成本指标",
                    "unit": "万元",
                    "panoramicMeeting": "202960",
                    "lastMonthDynamic": "51569",
                    "thisMonthDynamic": "23569",
                    "difference": "222",
                    "differenceRate": "-88.4"
                },
                {
                    "indexName": "项目总成本单方",
                    "num": "3.00",
                    "indexType": "成本指标",
                    "unit": "万元",
                    "panoramicMeeting": "3500",
                    "lastMonthDynamic": "632",
                    "thisMonthDynamic": "6326",
                    "difference": "3333",
                    "differenceRate": "80.7"
                },
                {
                    "indexName": "项目建安成本单方",
                    "num": "4.00",
                    "indexType": "成本指标",
                    "unit": "万元",
                    "panoramicMeeting": "3000",
                    "lastMonthDynamic": "326",
                    "thisMonthDynamic": "3526",
                    "difference": "4444",
                    "differenceRate": "17.5"
                },
                {
                    "indexName": "三费投入",
                    "num": "5.00",
                    "indexType": "成本指标",
                    "unit": "万元",
                    "panoramicMeeting": "4000",
                    "lastMonthDynamic": "256326",
                    "thisMonthDynamic": "23569",
                    "difference": "12366",
                    "differenceRate": "489.2"
                },
                {
                    "indexName": "销售物业毛利额",
                    "num": "7.00",
                    "indexType": "项目利润指标",
                    "unit": "万元",
                    "panoramicMeeting": "202930",
                    "lastMonthDynamic": "256326",
                    "thisMonthDynamic": "23569",
                    "difference": "12366",
                    "differenceRate": "-88.4"
                },
                {
                    "indexName": "销售物业毛利率",
                    "num": "8.00",
                    "indexType": "项目利润指标",
                    "unit": "%",
                    "panoramicMeeting": "256544",
                    "lastMonthDynamic": "256326",
                    "thisMonthDynamic": "23569",
                    "difference": "12366",
                    "differenceRate": "-90.8"
                },
                {
                    "indexName": "项目利润率",
                    "num": "15.00",
                    "indexType": "项目利润指标",
                    "unit": "%",
                    "panoramicMeeting": "0",
                    "lastMonthDynamic": "0",
                    "thisMonthDynamic": "0",
                    "difference": "12366",
                    "differenceRate": "-15.0"
                },
                {
                    "indexName": "项目净利率",
                    "num": "16.00",
                    "indexType": "项目利润指标",
                    "unit": "%",
                    "panoramicMeeting": "0",
                    "lastMonthDynamic": "0",
                    "thisMonthDynamic": "0",
                    "difference": "12366",
                    "differenceRate": "2.7"
                },
                {
                    "indexName": "股东净利润",
                    "num": "17.00",
                    "indexType": "项目利润指标",
                    "unit": "万元",
                    "panoramicMeeting": "0",
                    "lastMonthDynamic": "0",
                    "thisMonthDynamic": "0",
                    "difference": "12366",
                    "differenceRate": "12.1"
                },
                {
                    "indexName": "股东净利率",
                    "num": "18.00",
                    "indexType": "项目利润指标",
                    "unit": "%",
                    "panoramicMeeting": "0",
                    "lastMonthDynamic": "0",
                    "thisMonthDynamic": "0",
                    "difference": "12366",
                    "differenceRate": "4.8"
                },
                {
                    "indexName": "项目IRR",
                    "num": "19.00",
                    "indexType": "现金流指标",
                    "unit": "",
                    "panoramicMeeting": "0",
                    "lastMonthDynamic": "0",
                    "thisMonthDynamic": "0",
                    "difference": "256326",
                    "differenceRate": "193.7"
                },
                {
                    "indexName": "经营性现金流首次回正时间",
                    "num": "20.00",
                    "indexType": "现金流指标",
                    "unit": "月",
                    "panoramicMeeting": "20210112",
                    "lastMonthDynamic": "20200302",
                    "thisMonthDynamic": "20200402",
                    "difference": "20200504",
                    "differenceRate": "0.0"
                },
                {
                    "indexName": "经营性现金流首次回正周期",
                    "num": "21.00",
                    "indexType": "现金流指标",
                    "unit": "月",
                    "panoramicMeeting": "20220102",
                    "lastMonthDynamic": "20220102",
                    "thisMonthDynamic": "20210104",
                    "difference": "20200102",
                    "differenceRate": "0.0"
                }
            ],
            spanMethodOption: {}
        }
    },
    methods: {
        rowClass({row, rowIndex}) {
            var arr = []
            Object.keys(this.spanMethodOption).forEach((item, index)=>{
              // console.log('itemtt', item, index)
                if(row.indexType == item) {
                    if(index %2 === 0) {
                        arr.push('even-row')
                        //return 'even-row'//注意:这里return不回起到效果
                    }else{
                        arr.push('odd-row')
                        //return 'odd-row' //注意:这里return不回起到效果
                    }
                }
            })
            return arr
        },
        spanMethod ({ row, column, rowIndex, columnIndex }) {
            if(columnIndex === 1) {
                if (row.isShow) {
                    return [this.spanMethodOption[row.indexType], 1]
                }else{
                    return [0, 0]
                }
            }
            // console.log('this.spanMethodOption', this.spanMethodOption)
        },
    },
    created() {
        this.tableData = this.tableData.map(item => {
            if (this.spanMethodOption[item.indexType]) {
                this.spanMethodOption[item.indexType] += 1
                item.isShow = false;
            } else {
                this.spanMethodOption[item.indexType] = 1
                item.isShow = true;
            }
            return item;
        })
    }
}
</script>

<style lang="scss">
::v-deep .el-table {
    .version-table th {
        background-color:#797979;
        .cell {
            color:#fff;
        }
    }
    .even-row {
        background-color: #fff;
    }
    .odd-row {
        background-color: rgba(76, 75, 75, 0.04);
    }
    .red {
        color:#ed5327;
    }
}
</style>

没有相同字段时的合并单元格

如果不是基于某一个字段去合并单元格的话,就有些麻烦了,但同样还是这个思路,想办法记录下需要隔行换色的行,再手动变换该行的颜色。

我这里的需求是嵌套数组,二级数组是需要合并的数据。

数据格式如下:
在这里插入图片描述
所以我是在请求的时候改变了数组格式,将二维数组变成了一维数组,在每一组数据中增加了 isShow 属性。
由于保密问题,以下截取部分重要代码:

/** rowStyle 用来设置隔行换色**/
 <el-table v-tabelMove :data="tableData" :span-method="objectSpanMethods" border :row-style="rowStyle" style="width: 100%">
 	<el-table-column>.....</el-table-column>
 <el-table>
// 根据一级数组数据标记需要换色的行
res.data.list.forEach((item,index) => {
	this.spanMethodOption[index] = item.list.length + 1;
	  if(index % 2 === 0){
	    item.isShow = false;
	  } else {
	    item.isShow = true;
	  }
})
// 这里是合并单元格的方法:具体实现的需求就是前三列根据子级数组的数量去合并;每一组数据最上端增加了一个空行用来放按钮
objectSpanMethods({ row, column, rowIndex, columnIndex }){
      if (columnIndex < 3) {
        if(row.childLen > 0){
          return { rowspan: row.childLen + 1, colspan: 1 };
        } else if(row.childLen == 0){
          return { rowspan: 1, colspan: 1 };
        } else {
          return { rowspan: 0, colspan: 0 };
        }
      } else if(columnIndex > 2 && columnIndex < 18){
        if(typeof(row.childLen) === 'number'){
          if(columnIndex === 3){
            return { rowspan: 1, colspan: 15 };
          } else {
            return { rowspan: 0, colspan: 0 };
          }
        }
      }
    },
// 表格样式设置,这个就很简单了
  rowStyle({row, rowIndex}){
    if(row.isShow){
      return { 'background':'#fafafa'}
    } else {
      return { 'background':'#fff'}
    }
  }

最终实现完就是这个样子了:
在这里插入图片描述

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

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

相关文章

【Unity】RPG2D龙城纷争(三)角色、角色数据集

更新日期&#xff1a;2024年6月18日。 项目源码&#xff1a;后续章节发布 索引 简介角色数据集&#xff08;RoleDataSet&#xff09;一、定义角色数据集类二、角色基础数据&#xff08;公共数据&#xff09; 角色&#xff08;Role&#xff09;一、定义角色类二、角色其他数据&a…

Python构造TCP三次握手、传输数据、四次挥手pcap数据包并打乱顺序

Python构造数据包&#xff0c;包含&#xff1a; TCP三次握手、 传输数据、 四次挥手 实现 随机乱序TCP数据包 from scapy.all import * from scapy.all import Ether, IP, TCP, UDP, wrpcap from abc import ABC, abstractmethod import random import dpkt from scapy.all…

全氟己酮自动灭火材料表现亮眼!手把手教你自动灭火毯的使用方法

灭火毯的使用方法是什么&#xff1f;很多朋友在购买灭火毯之前&#xff0c;都比较关心这个问题。在这里&#xff0c;我们可以把灭火毯分为两种。一种是传统灭火毯&#xff0c;还有一种是近年来兴起的高科技产品—全氟己酮自动灭火毯。这两种灭火毯的使用方法大有不同&#xff0…

图解ZGC

ZGC&#xff08;Z Garbage Collector&#xff09; 是一款性能比 G1 更加优秀的垃圾收集器。ZGC 第一次出现是在 JDK 11 中以实验性的特性引入&#xff0c;这也是 JDK 11 中最大的亮点。在 JDK 15 中 ZGC 不再是实验功能&#xff0c;可以正式投入生产使用了&#xff0c;使用 –X…

智能网站管理系统

智能网站管理系统&#xff0c;即智能化的网站管理工具&#xff0c;是为了提高网站管理效率和简化操作流程而开发的一种软件系统。它集合了各种先进的技术和功能&#xff0c;为网站管理员提供了一套强大而可靠的解决方案。 智能网站管理系统的核心功能是网站内容管理。传统的网站…

tqdm 进度可视化

下载安装包 pip install tqdmor conda install tqdm代码案例 from tqdm import tqdm # 直接传入参数 for i in tqdm([1s,2s,3s,4s]):print(i)# 结合range for i in tqdm(range(100)):print(i)应用 可视效果

idea intellij 2023打开微服务项目部分module未在左侧项目目录展示(如何重新自动加载所有maven项目model)

项目场景&#xff1a; springcloud微服务项目,部分模块暂时不需要用到&#xff0c;就在pom.xml文件中注释掉相应的模块&#xff0c;突然有一天打开项目&#xff0c;部分项目module 在idea intellij工具左侧文件夹找不到了&#xff0c;重新file->open本地项目也还是部分模块…

最短路径和最小生成树

一眼看&#xff0c;求最小生成树的 prim 算法和求单源最短路径的 dijkstra 算法非常像&#xff0c;事实上它们也确实是一回事&#xff0c;贪心策略&#xff0c;不同的是&#xff0c;dijkstra 算法每次加入一个到达源 S 最短的点&#xff0c;而 prim 则加入到达已生成 tree 最短…

【C语言】初阶指针

目录 Ⅰ、指针是什么&#xff1f; 总结&#xff1a; Ⅱ、指针和指针类型 1 .指针-整数 2.指针的解引用 Ⅲ、野指针 1 .野指针成因 2 如何规避野指针 Ⅳ、指针运算 1 .指针 - 整数 2. 指针 - 指针 3. 指针的关系运算 Ⅴ、指针和数组 Ⅵ、二级指针 Ⅶ、指针数组 指针 1. 指针是…

mysql下载安装教程(图文详细版)

如果一次没成功的话&#xff0c;就删掉重安&#xff08;前提是清理干净&#xff09;&#xff08;up就下了好几次&#xff0c;在错误中找到答案&#xff09; navicat(可视化工具)在其他文章里 一、mysql下载 进入官网地址https://www.mysql.com/downloads/ 然后就开始下载了&…

Git的3个主要区域

一般来说&#xff0c;日常使用只要记住下图6个命令&#xff0c;就可以了。但是熟练使用&#xff0c;恐怕要记住60&#xff5e;100个命令。 下面是我整理的常用 Git 命令清单。几个专用名词的译名如下。 Workspace&#xff1a;工作区 Index / Stage&#xff1a;暂存区 Reposito…

Nginx 搭建 lnmp

一.编译安装Nginx 1.新建用户前期准备 官网下载nginx安装包 https://nginx.org/en/download.html yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel #安装依赖包 useradd -M -s /sbin/nologin nginx #新建nginx用户便于管理 2.切换到/opt…

idea插件开发之一起来开发个map转对象的插件吧!

写在前面 源码 。 在实际工作中&#xff0c;经常有这样的场景&#xff0c;从map中获取值来赋值到某个对象上&#xff0c;这无疑是一个重复的劳动&#xff0c;本文来尝试通过编写一个这样的插件&#xff0c;让插件来帮我们写代码&#xff0c;不管是有1个属性&#xff0c;还是有…

创维超充车辆交付仪式暨参观座谈会圆满举行

6月14日&#xff0c;创维超充车辆交付仪式暨参观座谈会在南京成功举行。苏舜集团副总经理程璟一行以及近多出行东部大区总经理张显春一行齐聚一堂。创维汽车总裁、联合创始人吴龙八等领导亲临现场&#xff0c;对各位尊贵嘉宾的到来表示热烈欢迎&#xff0c;并与众人共同见证了这…

RAM和ROM

1&#xff0c;RAM和ROM区别 RAM和ROM都是由来存储的&#xff0c;比如CPU缓存&#xff0c;电脑和手机内存等属于RAM,而固态硬盘&#xff0c;U盘&#xff0c;手机的128G,256G存储空间等都属于ROM。他们的最主要区别是RAM在断电后存储数据就没有了&#xff0c;而ROM在断电后存储数…

Java基础面试题自测

文章目录 一、Java 中有哪 8 种基本数据类型&#xff1f;说说这 8 种基本数据类型对应的包装类型&#xff1f;二、包装类型的常量池技术了解么&#xff1f;三、为什么要有包装类型&#xff1f;四、什么是自动拆装箱&#xff1f;原理&#xff1f;四、遇到过自动拆箱引发的 NPE 问…

Ps:脚本与动作

有三种脚本语言可用于编写 Photoshop 脚本&#xff1a;AppleScript&#xff08;macOS&#xff09;、JavaScript 和 VBScript&#xff08;Windows&#xff09;。 Photoshop 脚本文件默认文件夹 Win&#xff1a;C:\Program Files\Adobe\Adobe Photoshop 2024\Presets\Scripts Mac…

无线麦克风推荐哪些品牌?一文读懂家用无线麦克风哪个牌子好!

​在这个充满创意与表达的时代&#xff0c;无线领夹麦克风以其独特的魅力&#xff0c;成为了声音创作者们的得力助手。它小巧便携&#xff0c;功能强大&#xff0c;无论是日常拍摄、直播互动还是专业演出&#xff0c;都能轻松应对&#xff0c;让你的声音随时随地清晰传递。那么…

PIL保存后的图像莫名的失真,部分不失真部分很失真

原图片是这样的&#xff1a; PIL会自行**“自救”被正则化的图片&#xff0c;导致自救过曝&#xff0c;部分颜色非常失真&#xff0c;但是部分又保存的还行。现象如下&#xff1a; 这里你检查一下你保存的是不是被正则化的图片**&#xff0c;如果是&#xff0c;改改。 查看一…

长难句打卡6.17

At a time when Thomas Piketty and other economists are warning of rising inequality and the increasing power of inherited wealth, it is bizarre that wealthy aristocratic families should still be the symbolic heart of modern democratic states. 在托马斯皮凯…