vxe-table合并行数据;element-plus的el-table动态合并行

news2024/11/25 15:01:24

文章目录

  • 一、vxe-table合并行数据
    • 1.代码
  • 二、使用element-plus的el-table动态合并行
    • 2.代码


注意:const fields = 是要合并的字段

一、vxe-table合并行数据

在这里插入图片描述

1.代码

      <vxe-table
        border
        resizable
        height="500"
        :scroll-y="{enabled: false}"
        :span-method="mergeRowMethod"
        :data="tableData3"
      >
        <vxe-column type="seq" width="60" />
        <vxe-column field="key" title="设备名称" />
        <vxe-column field="num" title="Num" />
        <vxe-column field="content" title="Translate" />
        <vxe-column field="language" title="Language">
          <template v-slot="{ row }">
            <div @click="getRow(row)">{{ row.language }}</div>
          </template>
        </vxe-column>
        <vxe-column field="key" title="操作">
          <template v-slot="{ row }">
            <div @click="getRow(row)">获取数据</div>
          </template>
        </vxe-column>
      </vxe-table>







    tableData3: []







    getDataList2() {
      this.tableData3 = [
        { id: 10001, key: 'app.label.name', num: 1, content: '名称', language: '1' },
        { id: 10002, key: 'app.label.name', num: 1, content: 'Name', language: '2' },
        { id: 10003, key: 'app.label.name', num: 1, content: '性别', language: '3' },
        { id: 10004, key: 'app.label.name', num: 1, content: 'Sex', language: '4' },
        { id: 10005, key: 'app.label.age', num: 3, content: '年龄', language: '5' },
        { id: 10006, key: 'app.label.age', num: 3, content: 'Age', language: '6' },
        { id: 10007, key: 'app.label.role', num: 4, content: '角色', language: '7' },
        { id: 10008, key: 'app.label.role', num: 4, content: 'Role', language: '8' },
        { id: 10009, key: 'app.label.address', num: 5, content: '地址', language: '9' },
        { id: 10010, key: 'app.label.address', num: 5, content: 'Address', language: '10' },
        { id: 10011, key: 'app.label.nickname', num: 6, content: '昵称', language: '11' },
        { id: 10012, key: 'app.label.nickname', num: 6, content: 'Nickname', language: '12' }
      ]
    },
    // 通用行合并函数(将相同多列数据合并为一行)
    mergeRowMethod({ row, _rowIndex, column, visibleData }) {
      console.log(row, _rowIndex, column, visibleData)
      const fields = ['key', 'num']
      const cellValue = row[column.field]
      if (cellValue && fields.includes(column.field)) {
        const prevRow = visibleData[_rowIndex - 1]
        let nextRow = visibleData[_rowIndex + 1]
        if (prevRow && prevRow[column.field] === cellValue) {
          return { rowspan: 0, colspan: 0 }
        } else {
          let countRowspan = 1
          while (nextRow && nextRow[column.field] === cellValue) {
            nextRow = visibleData[++countRowspan + _rowIndex]
          }
          if (countRowspan > 1) {
            return { rowspan: countRowspan, colspan: 1 }
          }
        }
      }
    },
    getRow(row) {
      console.log(row)
    },






二、使用element-plus的el-table动态合并行

在这里插入图片描述

参考了vxe-table的处理返参方式得到的

2.代码

<template>
  <div>
    <pre>{{ tableData }}</pre>
    <div>手动合并</div>
    <el-table :data="tableData" :span-method="arraySpanMethod" border style="width: 100%">
      <el-table-column prop="id" label="ID" width="180" />
      <el-table-column prop="name" label="Name" />
      <el-table-column prop="amount1" sortable label="Amount 1" />
      <el-table-column prop="amount2" sortable label="Amount 2" />
      <el-table-column prop="amount3" sortable label="Amount 3" />
    </el-table>

    <div style="margin-top: 100px;">通过计算 动态合并相同行</div>
    <el-table :data="tableData" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 0px">
      <el-table-column prop="id" label="ID" width="180" />
      <el-table-column prop="name" label="Name" />
      <el-table-column prop="amount1" label="Amount 1" />
      <el-table-column prop="amount2" label="Amount 2" />
      <el-table-column prop="amount3" label="Amount 3" />
    </el-table>
  </div>
</template>

<script lang="ts" setup>
import type { TableColumnCtx } from 'element-plus'

interface User {
  id: string
  name: string
  amount1: string
  amount2: string
  amount3: number
}

interface SpanMethodProps {
  row: User
  column: TableColumnCtx<User>
  rowIndex: number
  columnIndex: number
}

const arraySpanMethod = ({
  row,
  column,
  rowIndex,
  columnIndex,
}: SpanMethodProps) => {
  if (rowIndex % 2 === 0) {
    if (columnIndex === 0) {
      return [1, 2]
    } else if (columnIndex === 1) {
      return [0, 0]
    }
  }
}

const objectSpanMethod = ({
  row,
  column,
  rowIndex,
  columnIndex,
}: SpanMethodProps) => {
  console.log(row,
    column,
    rowIndex,
    columnIndex,);

  // if (columnIndex === 0) {
  //   if (rowIndex % 2 === 0) {
  //     return {
  //       rowspan: 2,
  //       colspan: 1,
  //     }
  //   } else {
  //     return {
  //       rowspan: 0,
  //       colspan: 0,
  //     }
  //   }
  // }

  const fields = ['id', 'name']
  const cellValue = row[column.property]
  if (cellValue && fields.includes(column.property)) {
    const prevRow = tableData[rowIndex - 1]
    let nextRow = tableData[rowIndex + 1]
    if (prevRow && prevRow[column.property] === cellValue) {
      return { rowspan: 0, colspan: 0 }
    } else {
      let countRowspan = 1
      while (nextRow && nextRow[column.property] === cellValue) {
        nextRow = tableData[++countRowspan + rowIndex]
      }
      if (countRowspan > 1) {
        return { rowspan: countRowspan, colspan: 1 }
      }
    }
  }

}

const tableData: User[] = [
  {
    id: '11111',
    name: 'Tom',
    amount1: '234',
    amount2: '3.2',
    amount3: 10,
  },
  {
    id: '11111',
    name: 'Tom',
    amount1: '165',
    amount2: '4.43',
    amount3: 12,
  },
  {
    id: '12987124',
    name: 'Tom',
    amount1: '324',
    amount2: '1.9',
    amount3: 9,
  },
  {
    id: '12987125',
    name: 'Jack',
    amount1: '621',
    amount2: '2.2',
    amount3: 17,
  },
  {
    id: '12987126',
    name: 'Jack',
    amount1: '539',
    amount2: '4.1',
    amount3: 15,
  },
]
</script>

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

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

相关文章

实验三 图像增强—灰度变换

一、实验目的&#xff1a; 1、了解图像增强的目的及意义&#xff0c;加深对图像增强的感性认识&#xff0c;巩固所学理论知识。 2、学会对图像直方图的分析。 3、掌握直接灰度变换的图像增强方法。 二、实验原理及知识点 术语‘空间域’指的是图像平面本身&#xff0c;在空…

使用Session实现单点登录(SSO)

仅仅是一种思路&#xff0c;细节不做具体说明。

servlet学校会场预约系统-计算机毕业设计源码72972

摘要 学校会场预约是学校管理中的重要环节&#xff0c;但传统的手工预约方式存在效率低下和信息不准确等问题。为了提高预约效率和减少管理成本&#xff0c;许多学校开始采用基于Servlet技术的会场预约系统。本论文旨在设计和实现一种高效的Servlet学校会场预约系统&#xff0c…

已经安装deveco-studio-4.1.3.500的基础上安装deveco-studio-3.1.0.501

目录标题 1、执行exe文件后安装即可2、双击devecostudio64_3.1.0.501.exe2.1、安装Note (注意和4.1的Note放不同目录)2.2、安装ohpm (注意和4.1版本的ohpm放不同目录)2.3、安装SDK (注意和4.1版本的SDK放不同目录) 1、执行exe文件后安装即可 2、双击devecostudio64_3.1.0.501.e…

pycharm如何使用jupyter

目录 配置jupyter新建jupyter文件别人写的方法&#xff08;在pycharm种安装&#xff0c;在网页中使用&#xff09; pycharm专业版 配置jupyter 在pycharm终端启动一个conda虚拟环境&#xff0c;输入 conda install jupyter会有很多前置包需要安装&#xff1a; 新建jupyter…

Docker:二、常用命令

&#x1f341;docker常用命令 官方帮助文档&#xff1a;https://docs.docker.com/reference/ &#x1f332;帮助命令&#xff08;版本信息&#xff09; docker -v # 显示docker版本 docker version # 显示docker版本信息 docker info # 显示docker系统信息 docker 命…

Excel多表格合并

我这里一共有25张表格: 所有表的表头和格式都一样,但是内容不一样: 现在我要做的是把所有表格的内容合并到一起,研究了一下发现WPS的这项功能要开会员的,本来想用代码撸出来的,但是后来想想还是找其他办法,后来找到"易用宝"这个插件,这个插件可以从如下地址下载:ht…

Python中frozenset,秒变不可变集合,再也不用担心多线程了!

目录 1、Frozenset基础介绍 🌐 1.1 Frozenset定义与创建 1.2 不可变集合特性 1.3 与Set的区别对比 2、Frozenset操作实践 🧩 2.1 初始化与添加元素尝试 2.2 成员测试: in & not in 2.3 集合运算: 并集、交集、差集 2.4 使用场景示例: 字典键、函数参数默认值 …

DisFormer:提高视觉动态预测的准确性和泛化能力

最新的研究进展已经显示出目标中心的表示方法在视觉动态预测任务中可以显著提升预测精度&#xff0c;并且增加模型的可解释性。这种表示方法通过将视觉场景分解为独立的对象&#xff0c;有助于模型更好地理解和预测场景中的变化。 尽管在静态图像的解耦表示学习方面已经取得了一…

聊天交友系统开发专业语聊交友app开发搭建同城交友开发婚恋交友系统相亲app开发

1、上麦相亲互动:直播间内除了红娘外&#xff0c;还有男女用户两个视频麦位&#xff0c;直播间符合要求的用户可以申请上麦 2、公屏聊天:为上麦用户可以通过在公屏发言的方式参与直播间内的话题互动。 3、私信,异性用户之间可以发送私信消息&#xff0c;通过付费或开通会员可解…

Spring 6.1.10版本源码编译

每篇一句 我们对时间的感知其实非常主观&#xff0c;我们越习惯于我们的生活方式&#xff0c;生活里面的新鲜感就越少&#xff0c;我们对时间 的感知就越快&#xff0c;生命就越短。 1.源码下载 进入Spring官网 https://spring.io/ 按照上图步骤进入如下Spring Framework链…

通过RpmBuild构建redis-5.0.9版本的RPM类型包

系列文章目录 rpmbuild基础知识 文章目录 系列文章目录前言一、rpmbuild相关操作1、安装rpmbuild命令2、安装spec文件检查工具3、查看rpmbuild版本4、编译工具安装5、修改rpm制作包的默认路径 二、资源准备1、创建rpmbuild工作目录2、目录作用解释3、下载redis源码包4、上传re…

LLM - 神经网络的组成

1. 一个神经元的结构&#xff1a;即接受多个输入X向量&#xff0c;在一个权重向量W和一个偏执标量b的作用下&#xff0c;经过激活函数后&#xff0c;产生一个输出。 2. 一层神经网络的结构&#xff1a;该层网络里的每个神经元并行计算&#xff0c;得到各自的输出;计算方式是输入…

Go源码--channel源码解读

简介 channel顾名思义就是channel的意思&#xff0c;主要用来在协程之间传递数据&#xff0c;所以是并发安全的。其实现原理&#xff0c;其实就是一个共享内存再加上锁&#xff0c;底层阻塞机制使用的是GMP模型。可见 GMP模型就是那个道&#xff0c;道生一,一生二,二生三,三生…

【Spring Boot】统一数据返回

目录 统一数据返回一. 概念二.实现统一数据返回2.1 重写responseAdvice方法2.2 重写beforeBodyWriter方法 三. 特殊类型-String的处理四. 全部代码 统一数据返回 一. 概念 其实统一数据返回是运用了AOP&#xff08;对某一类事情的集中处理&#xff09;的思维&#xff0c;简单…

UML2.0-系统架构师(二十四)

1、&#xff08;重点&#xff09;系统&#xff08;&#xff09;在规定时间内和规定条件下能有效实现规定功能的能力。它不仅取决于规定的使用条件等因素&#xff0c;还与设计技术有关。 A可靠性 B可用性 C可测试性 D可理解性 解析&#xff1a; 可靠性&#xff1a;规定时间…

在Linux操作系统中关于逻辑卷的案例

1.如何去创建一个逻辑卷 1.1先去创建物理卷 如上图所示&#xff0c;physical volume 物理卷 被成功创建。 如上图所示&#xff0c;可以使用pvscan来去查看当前Linux操作系统的物理卷/ 1.2使用创建好的物理卷去创建一个卷组。 如上图所示&#xff0c;可以使用第一步创建的两个…

点亮led灯——Arduino uno R3 学习之旅

​ 常识: 一般智能手机的额定工作电流大约为200mA Arduino Uno板上I/0(输入/输出)引脚最大输出电流为40 mA Uno板控制器总的输出电流为200 mA 发光二极管介绍 发光二极管(Light Emitting Diode&#xff0c;简称LED)是一种能够将电能转化为光能的固态的半导体器件。 LED的极…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥导入介绍及算法规格】

密钥导入介绍及算法规格 如果业务在HUKS外部生成密钥&#xff08;比如应用间协商生成、服务器端生成&#xff09;&#xff0c;业务可以将密钥导入到HUKS中由HUKS进行管理。密钥一旦导入到HUKS中&#xff0c;在密钥的生命周期内&#xff0c;其明文仅在安全环境中进行访问操作&a…

输入框输入值之后,检索表格中是否存在输入框中的值,存在就让当前文字为红色

this.searchValue为输入框的值 createKeywordHtml_content(data) { if (data undefined) { return data; } if (typeof data ! string) { data String(data) } let value data.replace(this.searchValue, <span style"color:#FF5555">$&</span>…