记录贴:vxe-table单元格合并规则的简单封装及应用

这篇具有很好参考价值的文章主要介绍了记录贴:vxe-table单元格合并规则的简单封装及应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文仅做为个人记录。

虚拟渲染与单元格合并,可以通过设置参数 merge-cells 或调用函数 setMergeCells、setMergeCells 来控制单元格的临时合并状态
(注:合并是以牺牲渲染性能为代价,如果需要用合并建议关闭虚拟滚动)

场景一 : 多层级解构数据,提取规则

针对多层级的数组对象处理,以对象某个属性为准(此处案例合并字段c)格式化数据并设置合并规则。
此处案例实现针对属性c内的数据进行解构处理,以c内数组对象信息为合并项进行规则提取及合并。。

// template	
<vxe-table :data="dataList"  :mergeCells="mergeCells"></vxe-table>
// data => 此处为接口返回的数据结构示例
const data = [
	{
		a:'1',
		b:'2',
		c:[
			{c1:'1',c2:'2'},
			{c1:'1',c2:'2'},
		],
		d:'3'
	}
]
// methods => 通过接口获取数据后进行转换
api().then(res => {
        this.loading = false;
        const {records} = res.data;
        // 待合并列的下标
        const colArr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 18, 22];
        const {result, mergeCells} = parseMergeCell(records, 'c', colArr);
        this.mergeCells = mergeCells;
        this.dataList = result;
})

封装的方法如下:↓↓↓↓↓↓↓↓

/**
 * 二维数组合并单元格(子选项仍为数组对象)
 * @param data 接口返回的数组对象
 * @param children 指定子选项为数组对象的某个属性值
 * @param colArr 需要合并列的下标
 * @returns {{result: *[], mergeCells: *[]}} result合并后的数据;mergeCells单元格合并规则
 */
export function parseMergeCell(data, children, colArr) {
  let result = [], mergeCells = [], rowIndex = 0;
  for (let i = 0; i < data.length; i++) {
    // 结构数组对象
    let {[children]: childrenList, ...params} = data[i];
    // 避免数组对象的属性值错误
    if (!childrenList) return {mergeCells, result};
    // 提取合并规则
    let rowspan = childrenList.length ? childrenList.length : 1;
    for (let j = 0; j < colArr.length; j++) {
      const cells = {row: rowIndex, col: colArr[j], rowspan: rowspan, colspan: 1};
      mergeCells.push(cells);
    }
    rowIndex += rowspan;
    // 提取合并内容
    for (let j = 0; j < childrenList.length; j++) {
      const row = Object.assign({...params}, childrenList[j]);
      result.push(row);
    }
  }
  return {mergeCells, result};
}

场景二 : 单层级提取规则

针对单层级的数组对象处理,以对象某个属性为准格式化数据并设置合并规则。
此处案例实现针对字段a数据发生重复时,以a为合并项进行合并规则提取及合并。

// template	
<vxe-table :data="dataList"  :mergeCells="mergeCells"></vxe-table>
// data => 此处为接口返回的数据结构示例
const data = [
		{a:'1',b:'2',c:'3',d:'4'},
		{a:'1',b:'2',c:'33',d:'44'},
		{a:'2',b:'2',c:'33',d:'444'},
		{a:'3',b:'2',c:'33',d:'444'},
]
// methods => 通过接口获取数据后进行转换
api().then(res => {
        this.loading = false;
        const {records} = res.data;
        this.dataList= records;
        // 待合并列的下标
        const colArr = [0, 1, 2, 3];
        this.mergeCells = parseMergeCell(records, 'a', colArr);
})

封装的方法如下:↓↓↓↓↓↓↓↓文章来源地址https://www.toymoban.com/news/detail-434355.html

/**
 * 二维数组合并单元格(仅针对数组对象本身)
 * @param data 接口返回的数组对象
 * @param field 指定合并选项为数组对象的某个属性值
 * @param colArr 需要合并列的下标
 * @returns mergeCells单元格合并规则
 */
export function parseMergeCell(data, field, colArr) {
  let mergeCells = [], repeatVal = '', rowspan = 1;
  for (let i = 0; i < data.length; i++) {
    let {[field]: fieldVal} = data[i];
    if (repeatVal === fieldVal) {
      rowspan++
    } else {
      repeatVal = fieldVal;
      rowspan = 1;
    }
    if (rowspan > 1) {
      const row = i - rowspan + 1;
      for (let j = 0; j < colArr.length; j++) {
        mergeCells.push({row, col: colArr[j], rowspan, colspan: 1})
      }
    }
  }
  return mergeCells
}

到了这里,关于记录贴:vxe-table单元格合并规则的简单封装及应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 关于vxe-table全局引入的问题

    主要讲解一下vxe-table全局引入然后使用碰到的问题 0:vxe-table的官网地址 1:基本环境 (1):vue版本为3.x以上(我的是3.2.13) (2): 依赖库:xe-utils 注意:这篇博客的是vue3的脚手架搭建的,如果需要看低版本,请点击这里 2:使用npm安装 3:package.json文件里面就会有以下内

    2024年02月11日
    浏览(40)
  • vxe-table实现表格行拖拽

    1.插件文档 vex-table:https://vxetable.cn/v3/#/table/base/basic sortablejs: http://www.sortablejs.com/ 2.引入插件 vxe-table: sortablejs: 3.核心拖拽函数 渲染问题解决方法链接:sortablejs拖拽列表渲染问题 4.全代码 全代码

    2024年02月16日
    浏览(48)
  • vxe-table 表格多选框回显

    1.弹框表格结构   a-modal               v-if=\\\"visibleQuality\\\"               title=\\\"请选择需要提高的能力素质要求\\\"               :maskClosable=\\\"false\\\"               :visible=\\\"visibleQuality switchStatus\\\"               @ok=\\\"handleOkQuality\\\"               @cancel=\\\"handleCancelQuality\\\"            

    2024年02月06日
    浏览(42)
  • vue最强table vxe-table 虚拟滚动列表 前端导出

    最近遇到个问题。后台一次性返回2万条列表数据。 并且需求要求所有数据必须全部展示,不能做假分页(不能优化了)。 这些数据的直接来源就是CS客户端。 他们做CS客户端就是一次性加载几万条数据不分页(说这是客户的要求)。 我体验了一把CS客户端,数万条数据放在

    2024年02月12日
    浏览(40)
  • vue表格插件vxe-table导出 excel

    vxe-table 默认支持导出 CSV、HTML、XML、TXT格式的文件,不支持 xlsx 文件 要想导出 xlsx 文件,需要使用 vxe-table-plugin-export-xlsx 依赖  参考:https://cnpmjs.org/package/vxe-table-plugin-export-xlsx/v/2.1.0-beta 1.安装  例子: 如果用最新版的,依赖,这样使用就会报错 Uncaught (in promise) 亲测2.2.2版

    2024年01月22日
    浏览(48)
  • Vue3 vxe-table 手写鼠标区域选中

    参考原文地址:vxe-table 鼠标滑动选择多行,鼠标区域选中批量操作[2]-CSDN博客 准备vxe-talbe@4.5.7,Vue@3.3.4,在原作者的基础上进行了修改,修改后和官网几乎无差别,允许左右侧固定列选中,允许任意范围选中,但是键盘监听功能没添加//感觉没啥软用.... 先看效果: 正常鼠标从左上往右下

    2024年02月05日
    浏览(55)
  • 前端基础(Element、vxe-table组件库的使用)

    前言:在前端项目中,实际上,会用到组件库里的很多组件,本博客主要介绍Element、vxe-table这两个组件如何使用。 目录 Element 引入element 使用组件的步骤 使用对话框的示例代码 效果展示  vxe-table 引入vxe-table 成果展示 总结 官网地址 Button 按钮 | Element Plus (element-plus.org) 在m

    2024年02月10日
    浏览(41)
  • vxe-table 鼠标滑动选择多行,鼠标区域选中批量操作

    该功能存在bug哦,移步我的新博客:vxe-table 鼠标滑动选择多行,鼠标区域选中批量操作[2]_wanghanlu_的博客-CSDN博客 在看vxe-table 文档时,发现一个功能,鼠标区域选中,觉得这个功能很好。  但是仔细发现,这个功能不是免费的。我就想想,为啥不能自己实现呢。 下面给你看看我的最终

    2024年02月15日
    浏览(43)
  • vxe-table 小众但功能齐全的vue表格组件

    一个基于 vue 的 PC 端表格组件,除了一般表格支持的增删改查、排序、筛选、对比、树形结构、数据分页等,它还支持虚拟滚动、懒加载、打印导出、虚拟列表、虚拟滚动、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等,特别是能支持类似excel表格操作方式

    2024年02月08日
    浏览(48)
  • vxe-table 鼠标滑动选择多行,鼠标区域选中批量操作[2]

    前几天写了一个关于 vxe-table 鼠标滑动选择多行 的博客,在项目上线的过程中,发现这个功能还是有点bug,在经过我对vxe-table pro版本 的演示后vxe-table PRO,认真调试后,终于解决了bug,并且这个功能和pro版本可以说是几乎一模一样。注意:我是说这个滑动选择的功能,不是说是

    2024年02月05日
    浏览(157)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包