elementUI组件中合并单元格

<!--
 * @Description: elment table表单合并单元格
 * @Version: 
 * @Autor: Muchen
 * @Date: 2021-08-12 09:38:08
 * @LastEditors: Muchen
 * @LastEditTime: 2021-08-12 10:40:13
-->
<template>
  <div class="app-container home">
    <el-card class="box-card">
       <el-table :data="tableData" :span-method="objectSpanMethod" border>
          <el-table-column prop="id" label="ID" width="180" align="center"></el-table-column>
          <el-table-column prop="name" label="姓名" align="center"></el-table-column>
          <el-table-column prop="amount"  label="数值" align="center"></el-table-column>
          <el-table-column label="操作" fixed="right" width="180" align="center">
               <template>
                  <el-button  type="text"  size="small" >修改</el-button>
                  <el-button  type="text"  size="small" >删除</el-button>
              </template>
          </el-table-column>
        </el-table>
    </el-card>
  </div>
</template>

<script>
export default {
  name: "tableRow",
  data() {
    return {
      rowspan: [],
      tableData: [
        {
          id: 1,
          name: "name-111",
          data: [{ amount: 100 }, { amount: 200 }, { amount: 300 }]
        },
        { id: 2, name: "name-222", data: [{ amount: 1002 }, { amount: 2002 }] },
        {
          id: 3,
          name: "name-333",
          data: [
            { amount: 1003 },
            { amount: 2003 },
            { amount: 3003 },
            { amount: 3004 }
          ]
        }
      ]
    };
  },
  created() {
    this.initData();
  },
  methods: {
    initData() {
      let data = this.tableData;
      let arr = []; //存放格式后的数据
      let rowspan = []; //存放数组每行的 合并row 数据
      data.forEach(item => {
        //debugger
        for (let i = 0; i < item.data.length; i++) {
          let params = {...item, ...item.data[i]}; //合并数据item与item.data[i]的数据,构成新的行数据
          params.combineNum = item.data.length;    //获取合并的 行数(row -> 取item的子数组长度)
          delete params.data; //删除 rdata中的data属性; item属性中存在data,我们又获取了 item.data[i] 数据,所以此属性没用了删掉 
          console.log("delete params->", params); //通过循环获取到所有数据列表
          arr.push(params); //存储格式好的数据
          // 生成合并信息的数组 [3, 0, 0, 2, 0, 4, 0, 0, 0] 其中的0代表隐藏
          if (i == 0) {
            rowspan.push(item.data.length);
          } else {
            rowspan.push(0);
          }
        }
      });
      this.tableData = arr; //处理好格式的 arr 进行赋值
      console.log("tableData->", this.tableData);
      console.log("rowspan->", rowspan);
      this.rowspan = rowspan;
    },
    
    //单元格合并
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      //行,列,行下标,列下标( 控制要合并的列 )
      if ([0, 1,3].includes(columnIndex)) {
        const _row = this.rowspan[rowIndex];
        const _col = _row > 0 ? 1 : 0; // 如果这一行隐藏了,这列也隐藏
        return {
          rowspan: _row, //合并的行数
          colspan: _col //合并的列数,设为0则直接不显示
        };
      }
    },
  }
};
</script>




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值