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

最近接到一个任务,要实现一个数据报表,涉及到很多合并问题,一开始想着原生会简单点,实际上很麻烦,最后还是用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];
      }
    },

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

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

相关文章

Zabbix之部署代理服务器

一、部署代理服务器 分布式监控的作用 分担server的几种式压力解决多机房之间的网络延时问题 1、搭建proxy主机 1.1 关闭防火墙&#xff0c;修改主机名 systemctl disbale --now firewalld setenforce 0 hostnamectl set-hostname zbx-proxy su1.2 设置zabbix下载源 rpm …

FreeRTOS源码阅读笔记2--list.c

list.c中主要完成列表数据结构的操作&#xff0c;有列表和列表项的初始化、列表的插入和移除。 2.1列表初始化vListInitialise() 2.1.1函数原型 void vListInitialise( List_t * const pxList ) pxList&#xff1a;列表指针&#xff0c;指向要初始化的列表。 2.1.2函数框架…

执行mysql-community-libs-8.1.0-1.el8.x86_64.rpm报错依赖检测失败

目录 1.错误信息 2.解决方法 1.错误信息 我是在VMware虚拟机18上的Centos8上的&#xff0c;安装MySQL8.1.0&#xff0c;执行mysql-community-libs-8.1.0-1.el8.x86_64.rpm报错 [rootlocalhost mysql8.1.0]# rpm -ivh mysql-community-libs-8.1.0-1.el8.x86_64.rpm 警告&…

SpringBoot前后端分离整合cas(客户端)

SpringBoot前后端分离整合cas&#xff08;客户端&#xff09; cas认证详细流程&#xff1a; 前后端分离&#xff1a;项目前端使用nginx启动&#xff0c;后端是springBoot服务&#xff1b; nginx可以统一管理Cookie&#xff0c;避免出现跨域问题。 添加依赖 <dependency&g…

C语言常见面经详细总结

1、递归函数定义没有问题&#xff0c;递归深层次后易引发什么问题&#xff1f; &#xff08;1&#xff09;影响执行效率 &#xff08;2&#xff09;栈溢出。 因为每一次调用函数是&#xff0c;栈区都要给函数分配空间&#xff0c;而且上一次调用并没有结束&#xff0c;调用的…

挑战100天 AI In LeetCode Day07(热题+面试经典150题)

挑战100天 AI In LeetCode Day07&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-92.1 题目2.2 题解 三、面试经典 150 题-93.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&am…

2023年下半年架构案例真题及答案

案例的考点&#xff1a; 大数据架构 Lambda架构和Kappa架构 jwt特点 数据持久层&#xff0c;Redis数据丢失&#xff0c;数据库读写分离方案 Hibernat架构 SysML七个关系&#xff0c;填需求图 大数据的必选题&#xff1a; 某网作为某电视台在互联网上的大型门户入口&#…

Python高级语法----深入理解Python协程

文章目录 什么是协程?Python中的协程基本示例协程和事件循环总结Python协程是一种非常强大的并发编程概念,让你能够高效地处理多任务。协程在Python中的使用已经变得越来越流行,特别是在异步编程中。本文将用通俗易懂的语言来介绍协程的概念,并提供实际的代码示例和执行结果…

‘vite‘ is not recognized as an internal or external command

标题翻译后就是&#xff1a;‘vite‘ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文 运行一个由 Vite 构建的 Vue3 项目&#xff0c;之前还好好的能正常跑&#xff0c; 但拉取新代码之后再次执行 npm run dev 就提示 ‘vite’ 不是内部或外部命令&#xff0…

粤嵌实训医疗项目(小组开发)--day05

目录 一、医生功能模块 ------------前端实现------------ ------------后端接口------------ 功能一&#xff1a;分页查询医生基础信息&#xff08;介绍MybatisPlus如何使用分页&#xff09; 功能二&#xff1a;根据搜索栏名称查找对应医生&#xff08;讲解自定义查询集&…

UE5 新特性 Nanite 开启

啥也不说&#xff0c;只能说&#xff0c;真的牛&#xff0c;在自己的项目上&#xff0c;从10几20的帧数&#xff0c;直接彪到了70 适用场景&#xff1a; 大场景&#xff0c;三角面足够多 在Project Setting里面 将这几个勾未true 勾上这个&#xff0c;放入场景即可

2023年【A特种设备相关管理(锅炉压力容器压力管道)】考试内容及A特种设备相关管理(锅炉压力容器压力管道)考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;考试内容根据新A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将A特种设备相关管理…

arthas常用命令

arthas常用命令 IDEA插件 arthas idea退出arthasjad 反编译watch 方法执行数据观测tracemonitor https://arthas.aliyun.com/doc/ IDEA插件 arthas idea 退出arthas # quit或者exit命令,只是退出当前的连接, Attach到目标进程上的arthas还会继续运行&#xff0c;端口会保持开…

Win10专业版安装wsl-ubuntu子系统

文章目录 一、查看是否满足安装要求二、管理员权限启动 Windows PowerShell三、启用Windows10子系统功能四、启用虚拟机平台功能五、重启电脑六、下载 Linux 内核更新包&#xff08;适用于 x64 计算机的 WSL2 Linux 内核更新包&#xff09;七、将 WSL 2 设置为默认版本八、打开…

Linux--vim

文章目录 Vim的介绍Vim的几种模式命令模式下的基本操作批量化注释Vim的简单配置使用插件 Vim的介绍 Vim是一个强大的文本编辑器&#xff0c;是从vi编辑器发展而来的&#xff0c;在vi编辑器的基础上进行了改进和拓展&#xff0c;具有强大的特性和功能。 Vim是一个自由开源软件&…

C# OpenCvSharp 环形文字处理 直角坐标与极坐标转换

效果1 效果2 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Text; using System.Windows.Forms;namespace OpenCvSharp_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string fileFilter "*.*…

基于SSM的电脑公司财务管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

高防CDN与高防服务器:为什么高防服务器不能完全代替高防CDN

在当今的数字化时代&#xff0c;网络安全已经成为企业不容忽视的关键问题。面对不断增长的网络威胁和攻击&#xff0c;许多企业采取了高防措施以保护其网络和在线资产。然而&#xff0c;高防服务器和高防CDN是两种不同的安全解决方案&#xff0c;各自有其优势和局限性。在本文中…

概念解析 | 雷达协同认知成像:原理、研究现状与挑战

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:雷达协同认知成像。 概念解析 | 雷达协同认知成像:原理、研究现状与挑战 摘要: 雷达协同认知成像,作为一种先进的感知技术,在军事侦察、民用航空、无人驾驶等领域具有广…

绝缘监测及故障定位产品在IT系统中的应用

绝缘监测及故障定位产品在IT系统中的应用--安科瑞 崔丽洁 医疗2类场所应用场景 功能 1.将TN-S系统转接成IT配电系统&#xff0c;并通过IT系统向医疗2类场所供电&#xff1b; 2.实时IT系统对地绝缘电阻、隔离变压器负荷及其温度状态&#xff0c;并在故障时发出声光报警信号&…