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

分享一个计算表格内单元格合并的工具,支持行合并、列合并等常见场景

分享一个计算表格内单元格合并的工具,支持行合并、列合并等常见场景

效果图

在这里插入图片描述

安装 @cj-toolkit-x/table-cell-merger 插件

npm i @cj-toolkit-x/table-cell-merger

使用方法

import {TableCellMerger} from "@cj-toolkit-x/table-cell-merger"
// 创建一个单元格合并器
const tableCellMerger = new TableCellMerger()
// 定义options 配置项
const options:TableCellMergeOptions = {
}const data = []
// 绑定配置项
tableCellMerger.setOptions(options)
// 执行计算合并
tableCellMerger.mergeCell(data)
// 获取合并信息
const rowData = {};// 需要获取合并属性的行
const prop = '';// 需要获取合并数据的属性
const cellMergeInfo = tableCellMerger.getCellMergeInfo(rowData,prop)

备注:以下场景均以vue3 element-plus 演示

原始表格

在这里插入图片描述

1.省市性别行合并:

/* 省市性别行合并 */
// 构建一个表格合并计算器
const tableCellMerger1 = new TableCellMerger()
const options ={mergeColumns: ['province', 'city', 'gender']
}
// 设置参数
tableCellMerger1.setOptions(options)
// 绑定数据
tableCellMerger1.mergeCell(data)
const spanMethod1 = function (params: { row: Record<string, any>, column: { property: string } }) {const {row,column} = paramsconst { property } = columnreturn tableCellMerger1.getCellMergeInfo(row, property)
}

省市性别列合并实际效果

在这里插入图片描述

2.省市合并,相同市下面的性别合并:

/* 省市合并,相同市下面的性别合并 */
// 构建一个表格合并计算器
const tableCellMerger2 = new TableCellMerger()
// 设置参数
const options = {mergeColumns: ['province', 'city', 'gender'],mergeColumnsRelations: { gender: 'city' }
}
// 绑定数据
tableCellMerger2.mergeCell(data)
const spanMethod2 = function (params: { row: Record<string, any>, column: { property: string } }) {const {row,column} = paramsconst { property } = columnreturn tableCellMerger2.getCellMergeInfo(row, property)
}

省市列合并,相同市下面的性别列合并

在这里插入图片描述

3.自定义合并,相同性别下的市才可以进行合并:

/* 自定义合并,相同性别下的市才可以进行合并 */
const options = {mergeColumns: ['province', 'city', 'gender'],mergeColumnsRelations: { gender: 'city' },judgeValueEquals (cur: CellValueWrapper, // 当前值next: CellValueWrapper, // 下一个值tableCellMerger: TableCellMerger, // 单元格合并管理器vertical: boolean): boolean {const { prop } = curif (prop === 'city') {// 如果当前比较的市城市 那么先检查市if (next.rowData.gender !== cur.rowData.gender) {return false}}return !!tableCellMerger.defaultTableMergeOptions.judgeValueEquals?.(cur, next, tableCellMerger, vertical)}
}

自定义合并,相同性别下的市才可以进行合并

在这里插入图片描述

4.横向省市合并:

//横向省市合并
const options = {mergeColumns: ['province', 'city', 'gender'],mergeColumnsRelations: { gender: 'city' },horizontalColumns: ['province', 'city'], // 横向合并省市judgeValueEquals (cur: CellValueWrapper, // 当前值next: CellValueWrapper, // 下一个值tableCellMerger: TableCellMerger, // 单元格合并管理器vertical: boolean): boolean {const { prop } = cur// 纵向合并if (prop === 'city') {// 如果当前比较的市城市 那么先检查市if (next.rowData.gender !== cur.rowData.gender) {return false}}return !!tableCellMerger.defaultTableMergeOptions.judgeValueEquals?.(cur, next, tableCellMerger, vertical)}
}

横向合并省市

在这里插入图片描述

配置项

属性名说明类型默认值
mergeColumns纵向合并的列属性名Array[]
mergeColumnsRelations纵向合并的列关系Record<string,string>[]
horizontalColumns横向合并的列属性名Array/Array<Array>[]
disabled是否禁止内部计算,vue计算属性内可以通过此属性控制是否进行重新计算boolean/functionfalse
splitter分隔符,用于将行标识和列属性拼接为单元格idstring‘$$’
getRowKey获取当前行标识function取当前行上的id字段作为行标识
mergeEmpty是否合并空字符串 和 undefined,设置自定义值比较规则后此属性失效booleanfalse
judgeValueEquals自定义比较单元格的值,用于实现复杂业务逻辑,返回true 则合并function直接判断值是否相等

源代码地址传送门
demo地址传送门

http://www.lryc.cn/news/45035.html

相关文章:

  • CUDA编程(三):Hello world
  • 二十九、String的不可变性
  • TCP服务器如何使用select处理多客户连接
  • python字符编码
  • 面向对象练习题(8)
  • 重构类关系-Extract Interface提炼接口八
  • vivo手机各系列简介和拆解
  • Redis:redis通用命令;redis常见数据结构;redis客户端;redis的序列化
  • Java新特性
  • Java_Spring:8. Spring 中 AOP 的细节
  • uni-app--》uni-app的生命周期讲解
  • fastp软件介绍
  • C++继承相关总结
  • 【从零开始学习 UVM】8.2、Reporting Infrastructure —— uvm_printer 详解
  • Mybatis、TKMybatis对比
  • 37了解高可用技术方案,如冗余、容灾
  • jdb调试问题集锦
  • 要和文心一言来一把你画我猜吗?
  • delete[] p->elems和free(p->elems)有什么区别?
  • CAS问题
  • 网络编程socket(下)
  • 华为OD机试题【打折买水果】用 C++ 编码,速通
  • JSON 数据类型
  • Python函数简介
  • 一文读懂 mysql 为什么要两阶段提交以及两阶段提交原理
  • 启动Hadoop报错【Error: JAVA_HOME is not set and could not be found.】
  • 《MySQL系列-InnoDB引擎35》索引与算法-B+树索引的使用
  • 【EHub_tx1_tx2_E100】不止科技NVISTAR ROC 300激光雷达Ubuntu18.04+ROS1ROS2 评测
  • C语言函数大全--d开头的函数
  • 基于springboot实现福聚苑社区团购演示【项目源码】