element-ui中el-table数据合并行和列,应该怎么解决

news2024/11/25 22:35:57

最近接到一个任务,要实现一个数据报表,涉及到很多合并问题,一开始想着原生会简单点,实际上很麻烦,最后还是用elemen-ui中table自带的合并方法.

最终的效果是要做成这种:1.数据处理,后端返回来的数据是,一个大对象,包含三个数组,既然合并,肯定是要处理成一个数组,并且要把相同的追加一个属性,后面根据这个属性进行合并处理.

2.页面结构代码

 <div class="p-title-header">
      <span>日期:{{ currentDate }}</span>
      <span>门诊业务信息日报表</span>
      <span>单位: 元</span>
    </div>
    <el-table
      :data="tableData1"
      ref="recordTable"
      :span-method="arraySpanMethod1"
      border
      :cell-style="{ textAlign: 'center' }"
      :header-cell-style="{ textAlign: 'center' }"
      :row-style="{ height: '0' }"
    >
      <el-table-column prop="name" label="类型" width="100"> </el-table-column>
      <el-table-column prop="docName" label="疫苗种类"> </el-table-column>
      <el-table-column prop="serviceCount" label="日业务量"> </el-table-column>
      <el-table-column prop="totalFee" label="单价"> </el-table-column>
      <el-table-column label="当日确认收入">
        <el-table-column prop="vaccineIncome" label="疫苗收入">
        </el-table-column>
        <el-table-column prop="vaccinateIncome" label="接种收入">
        </el-table-column>
      </el-table-column>
    </el-table>

2.请求回来的数据,进行数据处理

// 获取数据
    getDataList() {
      let params = {};
      this.filter.forEach((item) => {
        if (item.value && item.type != "daterange") {
          params[item.key] = item.value;
        }
        if (item.value && item.type == "daterange") {
          params.visitDateStart = item.value[0];
          params.visitDateEnd = item.value[1];
        }
      });
      // if (
      //   !this.filter.some((item) => item.type === "daterange" && item.value)
      // ) {
      //   this.$message.error('请选择要查询的日期范围')
      //   return;
      // }
      this.$http({
        method: "post",
        url: "/report/forms/reportQuery",
        mode: "main",
        data: params,
      })
        .then((res) => {
          console.log(res, "666-res");
        })
        .catch((err) => {
          console.log(err, "555-err");
          let arr = [];
          let arr1 = err.data.listCheck;
          let arr2 = err.data.listVaccine;
          let arr3 = err.data.listSpecial;
          arr1.map((val) => {
            return { ...(val.name = "疫苗接种") };
          });
          arr1.push({
            name: "疫苗接种",
            docName: "疫苗接种收入合计",
            vaccineIncome: err.data.listVaccine[0].vaccineIncomeAmount,
          });
          arr2.map((val) => {
            return { ...(val.name = "个人检测") };
          });
          arr2.push({
            name: "个人检测",
            docName: "个人检测收入合计",
            vaccineIncome: err.data.listCheck[0].vaccineIncomeAmount,
          });
          arr3.map((val) => {
            return { ...(val.name = "特色健康门诊") };
          });
          arr3.push({
            name: "特色健康门诊",
            docName: "特色健康门诊收入合计",
            vaccineIncome: err.data.listSpecial[0].vaccineIncomeAmount,
          });
          let arr4 = [
            {
              name: "当日确认收入合计",
              vaccinateIncome: err.data.listVaccine[0].vaccinateAllAmount,
            },
          ];
          console.log(err.data.listCheck, 22222);
          // this.tableData1 = arr
          //   .concat(arr1)
          //   .concat(arr2)
          //   .concat(arr3)
          //   .concat(arr4);
          this.tableData1 = [...arr, ...arr1, ...arr2, ...arr3, ...arr4];
          console.log(this.tableData1, "099090909090");
        });
    },

4.合并公共方法

 // 合并公共方法
    flitterData(arr) {
      let spanOneArr = [],
        spanTwoArr = [],
        concatOne = 0;
      arr.forEach((item, index) => {
        if (index === 0) {
          spanOneArr.push(1);
          spanTwoArr.push(1);
        } else {
          // 只需要将 span_name 修改为自己需要合并的字段名即可
          if (item.name === arr[index - 1].name) {
            // 第一列需合并相同内容的判断条件
            spanOneArr[concatOne] += 1;
            spanOneArr.push(0);
          } else {
            spanOneArr.push(1);
            concatOne = index;
          }
        }
      });
      return {
        one: spanOneArr,
      };
    },

5.合并方法,这里是要根据自己的业务请求进行调整处理的

// 合并方法
    arraySpanMethod1({ row, column, rowIndex, columnIndex }) {
      // console.log(rowIndex, columnIndex)
      if (columnIndex == 0) {
        const _row = this.flitterData(this.tableData1).one[rowIndex];
        if (row.name == "当日确认收入合计") {
          return [1, 1];
        } else {
          return {
            rowspan: _row,
            colspan: 1,
          };
        }
      }
      if (
        row.docName == "个人检测收入合计" ||
        row.docName == "特色健康门诊收入合计" ||
        row.docName == "疫苗接种收入合计"
      ) {
        if (columnIndex == 1) return [1, 3];
        else if (columnIndex == 4) return [1, 2];
        else return [0, 0];
      }
    },

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

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

相关文章

AI创作系统ChatGPT网站源码+AI绘画网站源码+支持GPT4.0+支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

带头+双向+循环链表

前言&#xff1a; 前面我们已经学习了单链表的结构及其功能特点&#xff0c;也了解了单链表在实现一些功能时出现的一些缺点&#xff0c;比如在删除某个节点前面一个节点时就需要再开一个变量来存放前面一个节点的信息&#xff0c;这样就显得不灵活&#xff0c;为了使链表实现功…

Kubernetes 问题排查全景图

伴随着混沌的微服务架构&#xff0c;多语言和多网络协议混杂。以及下沉的基础设施能力屏蔽实现细节&#xff0c;问题定界越发困难。 企业急需一种支持多语言&#xff0c;多通信协议的技术&#xff0c;并在产品层面尽可能覆盖软件栈端到端的可观测性需求。 「Kubernetes 问题排查…

小时候画在手腕上的表,我用全志R128让他真正动了起来

小时候&#xff0c;我们总是充满想象力和创造力。 在那个年龄&#xff0c;我们没有真正的手表&#xff0c;但我们总是喜欢在纸上画出自己的手表&#xff0c;仿佛它真的能告诉我们时间。 为了弥补童年的遗憾&#xff0c;作者找到了一个智能手表的开源项目——NWatch&#xff0c…

计算机中丢失vcomp140.dll解决办法,可以使用这个4个方法解决问题

一、vcomp140.dll文件丢失的原因 未正确安装Visual C Redistributable&#xff1a;vcomp140.dll是Visual C Redistributable for Visual Studio 2015的一部分&#xff0c;当我们安装某些软件或游戏时&#xff0c;可能需要这个库。如果未正确安装这个库&#xff0c;可能导致vco…

c#装饰器模式详解

基础介绍&#xff1a; 动态地给一个对象添加一些额外的职责。适用于需要扩展一个类的功能&#xff0c;或给一个类添加多个变化的情况。 装饰器&#xff0c;顾名思义就是在原有基础上添加一些功能。 大家都只知道如果想单纯的给原有类增加一些功能&#xff0c;可以直接继续该类生…

数据结构: unordered_map与unordered_set

目录 1.框架 2.结构 unordered_map unordered_set 3.对HashTable的修改 更改模板参数 4.增加迭代器 a.结构 b.运算符重载 c.HashTable封装迭代器 d.unordered_map与unordered_set的迭代器 1.框架 1.复用HashTable ~~> 增加模板参数KeyOfT 来获取 Key值 unorder…

基于springboot实现致远汽车租赁平台管理系统项目【项目源码+论文说明】

基于springboot实现致远汽车租赁平台系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要…

怎么批量获取文件名,并保存到excel?

怎么批量获取文件名&#xff1f;什么叫批量获取文件名&#xff0c;其实也非常好理解&#xff0c;就是面对大量文件是可以一次性的获取所有文件名称&#xff0c;这项技术的应用也是非常常见的&#xff0c;为什么这么说呢&#xff1f;现在很多的文档管理人员或者公司的文员&#…

【AICFD案例教程】汽车外气动-AI加速

AICFD是由天洑软件自主研发的通用智能热流体仿真软件&#xff0c;用于高效解决能源动力、船舶海洋、电子设备和车辆运载等领域复杂的流动和传热问题。软件涵盖了从建模、仿真到结果处理完整仿真分析流程&#xff0c;帮助工业企业建立设计、仿真和优化相结合的一体化流程&#x…

进入网络安全行业有哪些大公司推荐

随着互联网的普及和数字化进程的加速&#xff0c;网络安全问题日益凸显。从个人信息的泄露到国家基础设施的被攻击&#xff0c;网络安全已经不再只是一个技术问题&#xff0c;而是关乎到每个人、每个企业和国家的核心利益。在这场没有硝烟的战争中&#xff0c;一些大公司凭借其…

linux基础指令【上篇】

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 引用 01. ls 指令2. pwd命…

IntelliJ Idea 撤回git已经push的操作

最初的样子 现在的样子 解决方案 第一步&#xff0c;commit到本地撤回&#xff1a; 打开提交历史记录&#xff0c;选中回退的版本右键&#xff0c;点击“Reset Current Branch to Here…”,然后选中“Mixed”&#xff0c;点击Reset后&#xff0c;之前commit的代码会在本地显…

定位咨询的价值:企业在市场中如何立足并打造竞争优势?

在激烈的市场竞争中&#xff0c;定位咨询服务显得尤为关键&#xff0c;它既能帮助企业发掘内在优势&#xff0c;又能塑造独特的市场地位&#xff0c;并指导如何持续巩固这一市场地位。 何为定位咨询? 定位咨询&#xff0c;即市场定位咨询&#xff0c;是指咨询公司帮助客户在…

彻底解决Win11锁屏界面黑屏或者图片不变化

问题描述 今天不知道干了啥&#xff0c;一顿操作后&#xff0c;win11的锁屏界面的图片就变成固定的了&#xff0c;原来是有windows聚焦的图片在自动变化的效果&#xff0c;现在没有了。然后就各种搜索求助&#xff0c;第二顿操作之后&#xff0c;锁屏界面彻底变成了黑色&#…

Python从入门到进阶

Python基础入门----Python简介 Python基础入门----安装Python环境&#xff08;Windows、MacOS、CentOS、Ubuntu&#xff09; Python基础入门----Python基础语法&#xff1a;解释器、标识符、关键字、缩进 Python基础入门----Python基本数据类型&#xff1a;数字、字符串、列…

IDEA 编译项目时报错:java: java.lang.OutOfMemoryError:GC overhead limit exceeded解决方法

1.问题简述 在Intellij IDEA下编译Java项目&#xff0c;报错&#xff1a;java.lang.OutOfMemoryError: …(此处忽略) GC overhead limit exceeded 2.问题分析 错误是发生在编译阶段&#xff0c;而不是运行阶段。通过查询相关资料发现&#xff0c; 1.idea编译Java项目使用的虚…

ChromeDriver谷歌浏览器驱动下载安装与使用最新版118/119/120

ChromeDriver谷歌浏览器驱动下载安装与使用最新版118/119/120 1. 确定Chrome版本 我们首先确定自己的Chrome版本 Chrome设置->关于Chrome 可以看到&#xff0c;当前chrome是最新版本&#xff1a;119.0.6045.124&#xff08;正式版本&#xff09; &#xff08;64 位&#…

SOLIDWORKS参数化设计之干涉检查

SOLIDWORKS参数化设计的思路和技巧我们讲过很多了&#xff0c;今天来讲一讲如何在模型完成之后自动执行干涉检查。 SOLIDWORKS软件本身就有干涉检查的功能&#xff0c;在评估选项卡里可以找到该功能&#xff0c;我们这里说的干涉检查指的是静态干涉检查&#xff0c;即模型在静…

WebDAV之π-Disk派盘 + PassStore

大家常用的qq,手机微信,新浪微博等。假如各个网址都设成同样的帐号和登陆密码,一旦某一帐户泄漏了,别的平台上的账户密码都有被撞库攻击的风险。在不一样的站点设定不一样的高韧性登陆密码才算是最安全可靠的确保,殊不知这般繁多的帐户密码是难以记得的。因而,有着一款安…