Vue + Element-ui 实现table表格 数据相同项合并

13 篇文章 0 订阅

Vue + Element-ui 实现table表格 数据相同项合并

通过给table传入span-method方法可以实现合并行或列,方法的参数是一个对象

  data() {
    return {
      tableArr: [],  //定义空数组,作为临时存储每一行已处理的数据
      pos:0, //
      }
    }
 :span-method="SpanMethod" //Element-ui  table表格的属性 ,例: <el-table :span-method="SpanMethod" ></el-table>
//获取数据,并对数据进行处理
 for (var i = 0; i < data.length; i++) {
        if (i === 0) {
          this.tableArr.push(1);
          this.pos = 0;
        } else {
          // 判断当前元素与上一个元素是否相同
          if (data[i].DEPT_NAME === data[i - 1].DEPT_NAME) {
          
            this.tableArr[this.pos] += 1;
            //判断当前行与上一行内容相同时 返回0 ,0 意味消除 , 即不显示	
            this.tableArr.push(0);
          } else {
            this.tableArr.push(1);
            this.pos = i;
          }
        }
      }

实现合并相同项,

   objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) { //第一列
        const _row = this.tableArr[rowIndex];
        const _col = _row > 0 ? 1 : 0;
        // console.log(`rowspan:${_row} colspan:${_col}`);
        return {
          // [0,0] 表示这一行不显示, [2,1]表示行的合并数
          rowspan: _row,
          colspan: _col,
        };
      }
    },

当需要合并的列数不止第一列时

我这里只能分开写,写在一起的想法也尝试过

  data() {
    return {
    //用了两个临时数组
      tableArr: [],  //定义空数组,作为临时存储每一行已处理的数据
      spanArr:[],
      pos:0, //
      }
    }
 MergerTable(data) {
      for (var i = 0; i < data.length; i++) {
        if (i === 0) {
          this.spanArr.push(1); 
          this.pos = 0;
        } else {
          // 判断当前元素与上一个元素是否相同
          if (data[i].BU_NAME === data[i - 1].BU_NAME) {  
            this.spanArr[this.pos] += 1;
            this.spanArr.push(0);
          } else {
            this.spanArr.push(1);
            this.pos = i;
          }
        }
      }
      for (var i = 0; i < data.length; i++) {
        if (i === 0) {
          this.spanArr.push(1);
          this.pos = 0;
        } else {
          // 判断当前元素与上一个元素是否相同
          if (data[i].DEPT_NAME === data[i - 1].DEPT_NAME) {  
            this.spanArr[this.pos] += 1;
            this.spanArr.push(0);
          } else {
            this.spanArr.push(1);
            this.pos = i;
          }
        }
      }
    },

columnIndex 为你需要合并的那一列, 而我只需一,二列,按需使用

   objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) { //第一列
        const _row = this.tableArr[rowIndex];
        const _col = _row > 0 ? 1 : 0;
        // console.log(`rowspan:${_row} colspan:${_col}`);
        return {
          // [0,0] 表示这一行不显示, [2,1]表示行的合并数
          rowspan: _row,
          colspan: _col,
        };
      }
        if (columnIndex === 1) { //第二列
        const _row = this.spanArr[rowIndex];
        const _col = _row > 0 ? 1 : 0;
        // console.log(`rowspan:${_row} colspan:${_col}`);
        return {
          // [0,0] 表示这一行不显示, [2,1]表示行的合并数
          rowspan: _row,
          colspan: _col,
        };
      }
    },

代码有点冗余,但我还没有更好的解决办法
如有更好,也可让我也学习学习呀。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值