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

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"borderstyle="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: stringname: stringamount1: stringamount2: stringamount3: number
}interface SpanMethodProps {row: Usercolumn: TableColumnCtx<User>rowIndex: numbercolumnIndex: 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"borderstyle="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: stringname: stringamount1: stringamount2: stringamount3: number
}interface SpanMethodProps {row: Usercolumn: TableColumnCtx<User>rowIndex: numbercolumnIndex: 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: stringdndFeeType: stringperiod: string"20GP": string"40GP": string"40HQ": stringcurrency: string[key: string]: string;
}interface SpanMethodProps {row: TableKeyTypescolumn: Record<"property", keyof TableKeyTypes>rowIndex: numbercolumnIndex: 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.mrgr.cn/news/58912.html

相关文章:

  • 零基础Java第十期:类和对象(一)
  • 高并发场景下解决并发数据不一致
  • 纯血鸿蒙的未来前景
  • 加密算法入门:DES S盒输出计算方法
  • 未来汽车驾驶还会有趣吗?车辆动力学系统简史
  • frida脚本,自动化寻址JNI方法
  • 信息安全工程师(72)网络安全风险评估概述
  • Java Web 开发:构建动态与交互式Web应用的基石
  • R语言机器学习算法实战系列(十四): CatBoost分类算法+SHAP值 (categorical data gradient boosting)
  • vscode配色主题与图标库推荐
  • 本地缓存库分析(一):golang-lru
  • 厨艺交流平台:Spring Boot技术实践案例
  • 最佳B站视频下载工具 完全免费+支持8k画质!
  • Hadoop:yarn的Rust API接口
  • Nodejs使用pkg打包为可执行文件
  • 检索增强型生成模型RichRAG:为多面查询提供丰富回应
  • 【Nginx系列】关于一次请求超时的思考
  • Java CompletableFuture
  • 计算机网络——开放系统互连参考模型
  • Spring Boot框架下的厨艺社区开发
  • 解决微信OAuth2.0网页授权回调域名只能设置一个的问题
  • Docker部署项目
  • LeetCode 每日一题 2024/10/21-2024/10/27
  • day02|计算机网络重难点之HTTP请求报文和响应报文、HTTP的请求方式(方法字段)、GET请求和POST请求的区别
  • 统一异常处理和拦截器
  • 了解Oracle表结构查询:获取列信息与注释