vue table合并行 动态列名

2023-11-18

需求:

1.合并行,相同数据合并

2,根据后端返回数据动态显示列名,

我这个业务需求是,每年增加一列,也就是列名不是固定的,后端返回数据每年会多一条数据,根据返回数据显示列名

 实现:

html

<el-table v-loading="loading" :data="dataList" :span-method="objectSpanMethod">
      <el-table-column label="序号" align="center" type="index" :index="indexMethod" />
      <el-table-column label="一级" align="center" prop="type1name"  :show-overflow-tooltip="true" width="130px"/>
      <el-table-column label="二级" align="center" prop="type2name" :show-overflow-tooltip="true"  width="130px"/>
      <el-table-column label="三级" align="center" prop="type3name" :show-overflow-tooltip="true"  width="250px"/>
      <el-table-column label="合计" align="center" prop="sums" :show-overflow-tooltip="true"/>
      <el-table-column label="年份" align="center" prop="" :show-overflow-tooltip="true">
         <el-table-column v-for="(item,index) in titleList" :key="index" :label="item.title" :prop="item.value" align="center" width="60px"/>
      </el-table-column>
</el-table>

js

<script>
import { listAnnualReporte } from "@/api/system/annualReport";

export default {
  name: "annualReport",
  data() {
    return {
      // 遮罩层
      loading: true,    
      // 总条数
      total: 0,
      // 表格数据
      dataList: [],
      titleList: [],

      spanArr: [], //用于存放每一行记录的合并数
      pos: null,
      spanArr1: [],
      pos1: null
    };
  },
  created() {
    this.getList();
  },
  methods: {
    /** 查询列表 */
    getList() {
      this.loading = true;
      listAnnualReporte(this.queryParams).then(response => {
        let list = response.rows;
        console.log("年度报告");
        console.log(list);
        let tlist = [];
        for (let i = 0; i < list.length; i++) {
          let title = "20";
          let obj = list[i];
          //后端返回年份数据是c23,c24,c25,要拼成2023,2024,2025这样的列名
          Object.keys(obj).forEach(key => {
            let titleObj = {};
            let t = key.slice(0, 1);
            let tn = key.slice(1, 3);
            if (t == "c") {
              titleObj.title = title + tn;
              titleObj.value = key;
              tlist.push(titleObj);
            }
            return;
          });
          break;
        }
        //给table赋值
        this.dataList = list;
        //给动态列名赋值
        this.titleList = tlist;
        //合并列数据
        this.getSpanArr(list);
        
        this.loading = false;
      });
    },
    /** 自定义编号 */
    indexMethod(index) {
      let pageNum = this.queryParams.pageNum - 1;
      if (pageNum !== -1 && pageNum !== 0) {
        return index + 1 + pageNum * this.queryParams.pageSize;
      } else {
        return index + 1;
      }
    },
    getSpanArr(data) {
      this.pos = 0;
      this.pos1 = 0;
      for (let i = 0; i < data.length; i++) {
        if (i === 0) {
          // 如果是第一条记录(即索引是0的时候),向数组中加入1
          this.spanArr.push(1);
          this.pos = 0;
          this.spanArr1.push(1);
          this.pos1 = 0;
        } else {
          
          if (data[i].type1 === data[i - 1].type1) {
            // 如果name相等就累加,并且push 0 (这里的判断视自己的判定依据改变)
            this.spanArr[this.pos] += 1;
            this.spanArr.push(0);
          } else {
            // 不相等push 1
            this.spanArr.push(1);
            this.pos = i;
          }
                
          if (data[i].type2 === data[i - 1].type2) {
            // 如果name相等就累加,并且push 0 (这里的判断视自己的判定依据改变)
            this.spanArr1[this.pos1] += 1;
            this.spanArr1.push(0);
          } else {
            // 不相等push 1
            this.spanArr1.push(1);
            this.pos1 = i;
          }
        }
      }
    },
    /** 合并行 */
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      // 用于设置要合并的列 0 表示第一列
      // 名称 跨行显示
      if ([1].includes(columnIndex)) {
        const cRow = this.spanArr[rowIndex];
        const cCol = cRow > 0 ? 1 : 0;
        return {
          rowspan: cRow, // 合并的行数
          colspan: cCol // 合并的列数,为0表示不显示
        };
      }
      if ([2].includes(columnIndex)) {
        const cRow = this.spanArr1[rowIndex];
        const cCol = cRow > 0 ? 1 : 0;
        return {
          rowspan: cRow, // 合并的行数
          colspan: cCol // 合并的列数,为0表示不显示
        };
      }
    },

  }
};
</script>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue table合并行 动态列名 的相关文章

随机推荐

  • VC++ FTP文件下传(断点续传)

    include
  • Android OpenCV环境搭建与Demo展示

    title Android OpenCV环境搭建与Demo展示 tags Opencv date 2020 2 02 00 53 00 最终效果 视频展示 https www bilibili com video av86393649 An
  • (一)树莓派Pico用micropython实现LED闪烁

    方法一 这段代码使用MicroPython来控制Pico开发板上的板载led 引脚为25 GPIO 25 来控制LED的闪烁 如果需要控制外接led模块 请确保将LED正确连接到Pico开发板的引脚 并根据需要进行相应的调整 首先 通过 i
  • Docker : docker: Error response from daemon: user specified IP address is supported on user defined

    1 美图 2 背景 想运行docker容器的时候 指定ip 但是发现出问题 base lcc lcc docker run d name es2 ip 172 16 12 12 p 9200 9200
  • 如何将你的iOS应用成功上架App Store(图文详解)

    上架基本需求资料 1 苹果开发者账号 如还没账号先申请 苹果开发者账号申请教程 2 开发好的APP 通过本篇教程 可以学习到ios证书申请和打包ipa上传到appstoreconnect apple com进行TestFlight测试然后提
  • “北漂”小夫妻新婚后的理财计划

    北漂 小夫妻新婚后的理财计划 提要 经过多年的努力打拼 1976 年出生的姜帆终于在京城站稳脚跟 做上了一家大公司的业务主管 今年 十一 国庆节还 和谈了多年马拉松恋爱的女友举行了婚礼 面对婚后新形势下几个令他烦恼的家庭理财目标 他该如何应
  • VNC VIEWER 连接闪退不断重新连接的解决办法

    1 vnc viewer官网下载standalone 2 vnc链接 3 连接后不断闪退 又不断重连 根本无法进行任何操作或操作困难 解决办法 1 2 点击properties 3 点击options general 调低画质
  • C语言好题解析(一)

    目录 选择题1 选择题2 选择题3 选择题4 编程题一 选择题1 执行下面程序 正确的输出是 int x 5 y 7 void swap int z z x x y y z int main int x 3 y 8 swap printf
  • 在Linux上面进行远程git的数据拉取与上传

    1 安装git sudo apt get update sudo apt get install git 2 查看本地git信息 git version 3 在当前路径下创建一个本地git仓库 sudo git init 4 上传当前的文件
  • TIM输出比较

    以下内容均来自 bilibili江协科技 OC输出比较 输出比较可以通过CNT与CCR寄存器值的关系 来对输出电平进行置1 置0或翻转的操作 用于输出一定频率和占空比的PWM波形 每个高级定时器和通用定时器都拥有4个输出比较通道 高级定时器
  • 正负号 substr java_实战LeetCode 系列(一) (题目+解析)

    1 反转字符串 编写一个函数 其作用是将输入的字符串反转过来 示例 1 输入 hello 输出 olleh 示例 2 输入 A man a plan a canal Panama 输出 amanaP lanac a nalp a nam A
  • 8.性能测试流程及策略

    8 性能测试流程及策略 一 准备工作 1 系统基础功能验证 性能测试在什么阶段适合实施 切入点很重要 一般而言 只有在系统基础功能测试验证完成 系统区域稳定的情况下 才会进行性能测试 否则性能测试是无意义的 2 测试团队组建 根据项目的具体
  • 高防cdn有什么优势?

    CDN即内容分发网络 通过在网络上各处放置节点服务器 来协助网站进行缓存 当用户访问网站时 就近分配节点为用户提供服务 从而加快访问速度 提升用户体验 但是普通的cdn并没有防御能力 那么这时就需要用到高防cdn来应对网络上的攻击 下面为大
  • Matlab:从文本文件中读取数值数据到矩阵

    Matlab 从文本文件中读取数值数据到矩阵 在Matlab中 我们常常需要将保存在文本文件中的数值数据读取到程序中 以便进行数据处理和分析 本文将介绍如何使用Matlab将文本文件中的数值数据导入到矩阵中 首先 我们需要创建一个文本文件
  • pandas-新手使用教程

    Pandas 是 Python 语言的一个扩展程序库 用于数据分析 下面将针对该模块进行讲解 一 导入模块 导入pandas模块 import pandas as pd 二 导入数据 常见用法 创建数据框 pd DataFrame 从CSV
  • C# --- Case Study

    C Case Study C Mongo数据库事务的应用 C 如何解析Json文件并注入MongoDB C MongoDB如何安全的替换Collection C netcore MVC项目框架结构 with MongoDB
  • 积分获取方式的两点优化建议

    积分获取是积分体系运营中的一个重要环节 也是针对用户运营的一个开端 如果积分获取做的不到位 那么商家就没法对用户的行为进行引导 也就没法实现商家的预期目标 整个积分体系就相当于白忙活了 这一点商家要特别的注意 在积分体系运营中 商家对于积分
  • 网课-cnn

    图像识别中遇到的问题可能有图片特征的纬度过高 1000 1000像素的图片 特征维度是1000 1000 3 如果你要输入3百万的数据量就意味着特征向量的维度高达三百万 也许有1000个隐藏单元 而所有的权值组成的矩阵W 1 如果使用标准的
  • git第一次配置ssh key,clone代码出错解决方法

    错误 The authenticity of host can t be established ED25519 key fingerprint is SHA256 k4ViHJBFryacGI BqHphyjDBaRLwt5eSGRMJG
  • vue table合并行 动态列名

    需求 1 合并行 相同数据合并 2 根据后端返回数据动态显示列名 我这个业务需求是 每年增加一列 也就是列名不是固定的 后端返回数据每年会多一条数据 根据返回数据显示列名 实现 html