IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> element-ui el-table表格实现多列动态合并 -> 正文阅读

[JavaScript知识库]element-ui el-table表格实现多列动态合并

效果如图(根据前一列进行合并)

核心代码

1、在<el-table>标签中插入span-method合并方法

:span-method="objectSpanMethod"

2、定义需要存放合并项信息的对象rowMergeArrs、一个需要合并列的项目的集合needMergeArr

needMergeArr: ["accName", "cloudTypeName", "crashAmount","creditAmount"],?

rowMergeArrs: [],

3、在created中获取表格处理后的数据?

this.rowMergeArrs = this.rowMergeHandle(this.needMergeArr, this.tableData);?

4、定义rowMergeHandle方法来处理table数据

rowMergeHandle(arr, data) {
      if (!Array.isArray(arr) && !arr.length) return false;
      if (!Array.isArray(data) && !data.length) return false;
      let needMerge = {};
      arr.forEach((i, idx) => {
        needMerge[i] = {
          rowArr: [],
          rowMergeNum: 0,
        };
        if (idx == 0) {
          data.forEach((item, index) => {
            // 表格首个数据单独处理
            if (index === 0) {
              needMerge[i].rowArr.push(1);
              needMerge[i].rowMergeNum = 0;
            } else {
              if (item[i] === data[index - 1][i]) {
                needMerge[i].rowArr[needMerge[i].rowMergeNum] += 1;
                needMerge[i].rowArr.push(0);
              } else {
                needMerge[i].rowArr.push(1);
                needMerge[i].rowMergeNum = index;
              }
            }
          });
        } else {
          let firstRowArr = needMerge[arr[0]].rowArr;
          let firstRowArrDeal = [];
          firstRowArr.forEach((item, index) => {
            if (item > 0) {
              firstRowArrDeal.push(index);
            }
          });
          data.forEach((item, index) => {
            let sign = false;
            if (firstRowArrDeal.indexOf(index) > 0) {
              needMerge[i].rowMergeNum = index;
              sign = true;
            }
            // 表格首个数据单独处理
            if (index === 0) {
              needMerge[i].rowArr.push(1);
              needMerge[i].rowMergeNum = 0;
            } else {
              if (item[i] === data[index - 1][i]) {
                if (sign) {
                  needMerge[i].rowArr.push(1);
                } else {
                  needMerge[i].rowArr[needMerge[i].rowMergeNum] += 1;
                  needMerge[i].rowArr.push(0);
                }
              } else {
                needMerge[i].rowArr.push(1);
                needMerge[i].rowMergeNum = index;
              }
            }
          });
        }
      });
      return needMerge;
    },

4、 定义objectSpanMethod方法

objectSpanMethod({ row, column, rowIndex, columnIndex }) {
    for(let res in this.needMergeArr){
        if(this.needMergeArr[res] == column.property){
            return this.mergeAction(column.property, rowIndex, columnIndex);
        }
    }
},

5、定义mergeAction方法来获取需要合并的行数和列表

mergeAction(val, rowIndex) {
    let _row = this.rowMergeArrs[val].rowArr[rowIndex];
    let _col = _row > 0 ? 1 : 0;
    return [_row, _col];
},

6、tableData的模拟数据如下

tableData: [
        {
          id: 1,
          cloudTypeName: "阿里云",
          accName: "glodon_gm1",
          crashAmount: 0.1,
          creditAmount: 240000.0,
          availaleAmount: 83548.66,
        },
        {
          id: 2,
          cloudTypeName: "阿里云",
          accName: "glodon_gm1",
          crashAmount: 0.0,
          creditAmount: 150000.0,
          availaleAmount: 83548.66,
        },
        {
          id: 3,
          cloudTypeName: "阿里云",
          accName: "glodon_gm1",
          crashAmount: 0.0,
          creditAmount: 150000.0,
          availaleAmount: 53045.89,
        },
        {
          id: 4,
          cloudTypeName: "阿里云",
          accName: "glodon_gm4",
          crashAmount: 0.0,
          creditAmount: 1351000.0,
          availaleAmount: 1244354.9,
        },
        {
          id: 5,
          cloudTypeName: "阿里云",
          accName: "glodon_gm4",
          crashAmount: 0.0,
          creditAmount: 0.0,
          availaleAmount: -5033739.0,
        },
        {
          id: 5,
          cloudTypeName: "阿里云",
          accName: "glodon_gm5",
          crashAmount: 0.0,
          creditAmount: 0.0,
          availaleAmount: -5033739.0,
        },
        {
          id: 5,
          cloudTypeName: "阿里云",
          accName: "glodon_gm5",
          crashAmount: 0.0,
          creditAmount: 0.0,
          availaleAmount: -5033739.0,
        },
],

?

参考文章:element-ui table动态列合并--支持多个列 开箱即用 - smil、梵音 - 博客园?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 09:51:44  更:2022-05-14 09:51:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:55:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码