js实现自定义合并单元格,el-table开箱即用

这篇具有很好参考价值的文章主要介绍了js实现自定义合并单元格,el-table开箱即用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

效果图

js实现自定义合并单元格,el-table开箱即用

安装 @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 演示

原始表格

js实现自定义合并单元格,el-table开箱即用

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
  } = params
  const { property } = column
  return tableCellMerger1.getCellMergeInfo(row, property)
}
省市性别列合并实际效果

js实现自定义合并单元格,el-table开箱即用

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
  } = params
  const { property } = column
  return tableCellMerger2.getCellMergeInfo(row, property)
}
省市列合并,相同市下面的性别列合并

js实现自定义合并单元格,el-table开箱即用

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

/* 自定义合并,相同性别下的市才可以进行合并 */
const options = {
  mergeColumns: ['province', 'city', 'gender'],
  mergeColumnsRelations: { gender: '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)
  }
}
自定义合并,相同性别下的市才可以进行合并

js实现自定义合并单元格,el-table开箱即用

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)
  }
}
横向合并省市

js实现自定义合并单元格,el-table开箱即用

配置项

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

源代码地址传送门
demo地址传送门文章来源地址https://www.toymoban.com/news/detail-405738.html

到了这里,关于js实现自定义合并单元格,el-table开箱即用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • el-table合并单元格

    el-tabel数据结构 此处为this.rolePermitItemList 合并后的样式: el-table-column 需要添加property字段,属性值同props,用来判断需要合并的字段

    2024年02月14日
    浏览(31)
  • el-table单元格合并思路

    el-table单元格合并的关键是el-table的 span-method 属性,本文将讲解一下我在单元格合并的思路,本人前端小白,可能有理解错误仅供参考,本文重点介绍思路,毕竟每个人需求不一样 注意:有时候不需要单元格合并,可以使用插槽 前提 单元格的合并必须得有数据,所以应该先

    2024年02月12日
    浏览(30)
  • el-table 怎么合并相同单元格

    问题背景 项目需求table表格中,相同的类型合并成一个单元格展示。 问题描述 el-table 并没有相关的语法直接合并,需要我们自己传入一个方法返回一个数组格式,来确定要合并行列。 解决问题 首先需要在 el-table 标签上绑定 :span-method=\\\"objectSpanMethod\\\" 再去 methods 中定义 object

    2024年02月16日
    浏览(39)
  • vue3 - element-plus表格组件el-table实现鼠标拖曳排序功能,vue3 Table表格拖拽排序,表格每行使用鼠标拖动进行排序功能,表格拖拽排序实现(详细示例代码,一键复制开箱即用

    在vue3+elementPlus网站开发中,详细完成el-table表格的鼠标拖拽/拖曳/拖动排序,vue3使用element plus表格组件进行表格每行的拖动换位置排序功能(支持一键开启和关闭鼠标是否可拖动排序,代码易改造灵活),稍加改造可支持【树形复杂表格的排序】! 详细示例源代码,复制运行

    2024年04月09日
    浏览(47)
  • Element ui el-table 合并单元格

      el-table v-loading=\\\"loading\\\" :data=\\\"tableData\\\" style=\\\"width: 100%\\\" highlight-current-row :span-method=\\\"arraySpanMethod\\\"         el-table-column type=\\\"index\\\" label=\\\"序号\\\" /         el-table-column v-for=\\\"item in formThead\\\" :key=\\\"item.label\\\" :label=\\\"item.label\\\" :prop=\\\"item.prop\\\" :formatter=\\\"item.formatter\\\" :width=\\\"item.width || \\\'auto\\\'\\\" /        

    2024年02月02日
    浏览(31)
  • element-ui中的el-table合并单元格

    在写项目的时候有时候会经常遇到把行和列合并起来的情况,因为有些数据是重复渲染的,不合并行列会使表格看起来非常的混乱,如下:  而我们想要的数据是下面这种情况,将重复的行进行合并,使表格看起来简单明了,如下:   1:html部分 所谓的合并行就是将多行相同

    2024年02月10日
    浏览(31)
  • 前端 vue el-table 增加合计行及合并单元格

    自己总结的,不好别喷,谢谢~~~  表格触发调用方法  合计行代码 在 合计行方法中 直接去修改了表格样式  

    2024年02月07日
    浏览(38)
  • Element Plus el-table 自定义合并行和列

    原文链接:Element Plus el-table 自定义合并行和列 目标效果是将表格行数据中某个属性值相同的项合并到一起,效果如下: sortArray() 此方法根据目标属性值( StoAlias )排序了。 点击 传送门 查看更多关于【el-table 合并行或列】的信息。

    2024年02月12日
    浏览(29)
  • 前端vue+elementui导出复杂(单元格合并,多级表头)表格el-table转为excel导出

    需求 :前端对el-table表格导出 插件 : npm install xlsx -S npm install file-saver --save 原理 :直接导出el-table的表格里面的数据,这样就会存在缺点,只会导出当前页面的数据,如果需要导出全部数据,可以自己重新渲染一个全部数据不可见的el-table表格,来导出就可以了 扩展 :经过

    2024年02月04日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包