当前位置: 首页 > article >正文

element-plus中的table为什么相同的数据并没有合并成一个

我想把所有的第一列的名字相同的内容合并。我发现只有相邻的数据合并了。实际上我想做到的是所有的后端给的数据,不管他的顺序怎样的,只有deviceTypeName 一样的都合并的。

在 element-plus 的 table 中,数据合并行通常是基于相邻行的数据进行合并的。这是因为表格渲染的逻辑是按照数据数组的顺序逐行渲染,并且合并行的实现通常是通过 span-method 方法来控制某些单元格的 rowspan 和 colspan 属性,以此来达到合并的效果。

常规的合并相邻的deviceTypeName 相同的数据的做法:

<el-table :data="tableData" :span-method="objectSpanMethod">
    <el-table-column prop="name" label="Name"></el-table-column>
    <el-table-column prop="address" label="Address"></el-table-column>
  </el-table>

 

const tableData = ref([
      { id: 1, deviceTypeName : 'John', address: 'Address 1' },
      { id: 1, deviceTypeName : 'John', address: 'Address 2' },
      { id: 2, deviceTypeName : 'Jane', address: 'Address 3' },
    ]);

 方法1:

const objectSpanMethod= ({ row, column, rowIndex, columnIndex })=> {
  if (columnIndex === 0) {
    const _row = flitterData(proTable.value?.tableData, 'deviceTypeName').one[rowIndex]
    const _col = _row > 0 ? 1 : 0
    return {
      rowspan: _row,
      colspan: _col,
    }
  }
}

//把arr数组中name相同的元素合并
const flitterData= (arr, name)=> {
  let spanOneArr = []
  let concatOne = 0
  arr.forEach((item, index) => {
    if (index === 0) {
      spanOneArr.push(1)
    } else {
      if (item[name] === arr[index - 1][name]) {
        spanOneArr[concatOne] += 1
        spanOneArr.push(0)
      } else {
        spanOneArr.push(1)
        concatOne = index
      }
    }
  })
  return {
    one: spanOneArr,
  }
}

或者方法2:

const objectSpanMethod = ({row,column, rowIndex, columnIndex }: SpanMethodProps) => {
  if (columnIndex === 0) {
    const prevRow = proTable.value?.tableData[rowIndex - 1];
    if (prevRow && row.deviceTypeName == prevRow.deviceTypeName) {
      return {
        rowspan: 0,
        colspan: 1,
      };
    } else {
      let rowspan = 1;
      for (let i = rowIndex + 1; i < proTable.value?.tableData.length; i++) {
        if (proTable.value?.tableData[i].deviceTypeName == row.deviceTypeName) {
          rowspan++;
        } else {
          break;
        }
      }
      return {
        rowspan,
        colspan: 1,
      };
    }
  }
};

把上面的deviceTypeName改成你想要合并的参数名就可以啦

如果是不相领的内容合并就需要我们重新排序。把name相同的值放在一起。 


http://www.kler.cn/a/514037.html

相关文章:

  • Asp.Net Core 8.0 使用 Serilog 按日志级别写入日志文件的两种方式
  • flutter跨端UI框架简介
  • 找不到mfc140u,具体原因分析
  • 【Golang/gRPC/Nacos】在golang中将gRPC和Nacos结合使用
  • Flowable 审核功能封装
  • JDBC实验测试
  • Ollama能本地部署Llama 3等大模型的原因解析(ollama核心架构、技术特性、实际应用)
  • html转义符+h5提供的新标签
  • HTML `<head>` 元素详解
  • PHP同城配送小程序
  • 《LT8712X》Type-c转HDMI2.0芯片
  • Spring Boot AOP实现动态数据脱敏
  • vue3 通过ref 进行数据响应
  • Vue 引入及简单示例
  • Java中的错误与异常详解
  • Excel 实现文本拼接方法
  • 【elasticsearch】elasticsearch基本知识
  • Vue3+Elementplus物流订单信息跟踪管理
  • 【环境搭建】conda及pip配置清华镜像源
  • delete the Node
  • Ubuntu 24.04 LTS 通过 docker 安装 nextcloud 搭建个人网盘
  • 3D 模型格式转换之 STP 转 STL 深度解析
  • Springboot应用开发配置类整理
  • 如何配置安全的香港邮件服务器?
  • Solana 套利机器人原理
  • VScode 开发 Springboot 程序