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

Element 的Table表格实现列合并(记得先排序、element-plus、列合并、线上已投入使用)

系列文章目录

提示:当前的功能已经投入项目中使用了,不要担心回发生什么问题!!!代码有问题直接私信我就好👌


文章目录

  • 系列文章目录
  • 背景如下
  • 一、Element-Plus 中Table表格的列合并(初版)
    • 1.效果图如下
    • 2. DOM结构 如下
    • 3.TypeScript代码如下
  • 二、Element-Plus 中Table表格的列合并(进阶版)
    • 1.效果图如下
    • 2. DOM结构 如下
    • 3. TypeScript代码如下
  • 二、Element-Plus 中Table表格的列合并(最终优化版)
    • 1. TypeScript代码如下
  • 总结


背景如下

需求是
1、服务与不同的船公司,分别有进出口的分类
2、希望对相同业务,价格,进行列合并
3.、一句话:合并前几列相同的列,只要数据相同就可以合并


提示:以下是本篇文章正文内容,下面案例可供参考

一、Element-Plus 中Table表格的列合并(初版)

1.效果图如下

在这里插入图片描述

2. DOM结构 如下

 <div>
    <el-table
      :data="tableData"
      :span-method="objectSpanMethod"
      border
      style="width: 100%; margin-top: 20px"
    >
      <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>

3.TypeScript代码如下

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

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

const values =ref("")
const value1 =reactive({})
const objectSpanMethod = ({
  row,
  column,
  rowIndex,
  columnIndex,
}: SpanMethodProps) => {

     if(columnIndex == 0){
     
      let spanCount = 1;

        // 从当前行往下找
        for (let i = rowIndex + 1 ; i < tableData.length; i++) {
          if (tableData[i][column.property] === row[column.property]) {
            spanCount++;
            values.value =  row[column.property]
          } else {
            break;
          }
        }
          if(spanCount === 1 && !value1[`${values.value}`])   return [1,1]
          !value1[`${values.value}`] && (value1[`${values.value}`] = spanCount)
      
         if(spanCount>(value1[`${values.value}`]-1)){
              return [spanCount,1]
          }else if (rowIndex > 0 &&tableData[rowIndex - 1][column.property] === row[column.property]) {

          return [0, 0];
        }
       
        
    }
}

二、Element-Plus 中Table表格的列合并(进阶版)

1.效果图如下

在这里插入图片描述

2. DOM结构 如下


  <div>
    <el-table
      :data="tableData"
      :span-method="objectSpanMethod"
      border
      style="width: 100%; margin-top: 20px"
    >
      <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>

3. TypeScript代码如下


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

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

const values =ref("")
let str = ""
const value1 =reactive({})
const objectSpanMethod = ({
  row,
  column,
  rowIndex,
  columnIndex,
}: SpanMethodProps) => {

     if(columnIndex == 0 || columnIndex == 1){
     
      let spanCount = 1;

        // 从当前行往下找
        for (let i = rowIndex + 1 ; i < tableData.length; i++) {
          if (tableData[i][column.property] === row[column.property]) {
            spanCount++;
            str =  row[column.property]
          } else {
            break;
          }
        }
                console.log(rowIndex,9999,spanCount === 1 && !value1[`${str}`])
          if(spanCount === 1 && !value1[`${str}`])   return [1,1]
          !value1[`${str}`] && (value1[`${str}`] = spanCount)
      
         if(spanCount>(value1[`${str}`]-1)){
          console.log(rowIndex,`行 -${value1[`${str}`]}`,columnIndex,"列-相同值",spanCount,value1,"执行次数--值",str)
              return [spanCount,1]
}else if (rowIndex > 0 &&tableData[rowIndex - 1][column.property] === row[column.property]) {
  console.log("",tableData[rowIndex - 1][column.property],row[column.property])
          return [0, 0];
        }
       
        
    }
}

二、Element-Plus 中Table表格的列合并(最终优化版)

1. TypeScript代码如下

/* 下面的方法(脑力精髓-简洁-代码量极少)*/
interface TableKeyTypes {
    eximType: string
    dndFeeType: string
    period: string
    "20GP": string
    "40GP": string
    "40HQ": string
    currency: string
    [key: string]: string;
}

interface SpanMethodProps {
    row: TableKeyTypes
    column: Record<"property", keyof TableKeyTypes>
    rowIndex: number
    columnIndex: number
}
// prohibit modify to ref (超负载)
let str = ""
const stroageValue:Record<string, string|number> = reactive({})
// colspan all from the same value
const colSpanMethod = ({
    row,
    column,
    rowIndex,
    columnIndex
}: SpanMethodProps) => {

    if (columnIndex == 0 || columnIndex == 1) {
        let spanCount = 1
        // 从当前行往下找
        for (let i = rowIndex + 1; i < colSpanTableData.value.length; i++) {
            if (colSpanTableData.value[i][`${column.property}`] === row[`${column.property}`]) {
                spanCount++
                str = row[`${column.property}`]
            } else {
                break
            }
        }
        if (spanCount === 1 && !stroageValue[`${str}`]) return [1, 1]
        !stroageValue[`${str}`] && (stroageValue[`${str}`] = spanCount)
        if (spanCount > ((stroageValue[`${str}`] as number) - 1)) {
            return [spanCount, 1]
        } else if (rowIndex > 0 && colSpanTableData.value[rowIndex - 1][`${column.property}`] === row[`${column.property}`]) {
            return [0, 0]
        }
    }
}

总结

提示:直接拿去Element-Plus去测试代码。已经上线过的功能,

希望可以帮助到你们 💪💪💪,一起加油


http://www.kler.cn/news/365811.html

相关文章:

  • 工作使用篇:如何在centos系统中安装anaconda
  • 微信小程序启动相机功能
  • 软考中级嵌入式系统设计师笔记分享(二)
  • JS 中 reduce()方法及使用
  • 分布式光伏发电系统电气一次部分设计(开题报告3)
  • 混个1024勋章
  • 同标签实现监听LocalStorage
  • python的文件常识
  • CTF-RE 从0到N:开始之前-c函数手册
  • 什么样的JSON编辑器才好用
  • TDengine 签约新奥新智:写入速度提升10倍,成本降低90%
  • 软件设计师----UML
  • JavaWeb合集16-JWT令牌验证
  • Coppelia Sim (v-REP)仿真 机器人3D相机手眼标定与实时视觉追踪 (一)
  • 【Sublime Text】设置中文 最新最详细
  • 【Android】Convenient ADB Commands
  • jupyter notebook改变默认启动路径
  • C++:map和set类
  • SQLITE排序
  • Vision Transformer 神经网络在水果、动物、血细胞上的应用【深度学习、PyTorch、图像分类】
  • 【web安全】缓慢的HTTP拒绝服务攻击详解
  • 从零开始:Python与Jupyter Notebook中的数据可视化之旅
  • 从PDF文件中提取数据
  • 理解深度学习模型——高级音频特征表示的分层理解
  • 【Linux系统】如何证明进程的独立性
  • 追寻数组的轨迹,解开算法的情愫