element ui 表格多项合并

<template>
  <div>
    <el-table
      :data="tableData"
      :span-method="objectSpanMethod"
      border
      style="width: 100%; margin-top: 20px"
    >
      <el-table-column type="index" width="50"> </el-table-column>
      <el-table-column prop="a1" label="a1"> </el-table-column>
      <el-table-column prop="a2" label="a2"> </el-table-column>
      <el-table-column prop="a3" label="a3"> </el-table-column>
      <el-table-column prop="a4" label="a4"> </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 合并数据
      row: [],
      // 传入纵向合并
      column: ["a1", "a2", "a3", "a4"],
      tableData: [
        {
          a1: "日期",
          a2: "地址",
          a3: "姓名",
          a4: "性别",
        },
        {
          a1: "日期1",
          a2: "地址",
          a3: "姓名",
          a4: "性别2",
        },
        {
          a1: "日期1",
          a2: "地址",
          a3: "姓名2",
          a4: "性别",
        },
        {
          a1: "日期",
          a2: "地址",
          a3: "姓名",
          a4: "性别3",
        },
        {
          a1: "日期",
          a2: "地址",
          a3: "姓名",
          a4: "性别3",
        },
      ],
    };
  },
  created() {
    this.row = this.rowMergeHandle(this.column, this.tableData);
  },
  methods: {
    mergeAction(val, rowIndex) {
      let _row = this.row[val].arr[rowIndex];
      let _col = _row > 0 ? 1 : 0;
      return [_row, _col];
    },
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      for (let res in this.column) {
        if (this.column[res] == column.property) {
          return this.mergeAction(column.property, rowIndex, columnIndex);
        }
      }
    },
    rowMergeHandle(arr, data) {
      if (!Array.isArray(arr) && !arr.length) return false;
      if (!Array.isArray(data) && !data.length) return false;
      let obj = {};
      arr.forEach((i, idx) => {
        obj[i] = {
          arr: [],
          num: 0,
        };
        if (idx == 0) {
          data.forEach((item, index) => {
            // 表格首个数据单独处理
            if (index === 0) {
              obj[i].arr.push(1);
              obj[i].num = 0;
            } else {
              if (item[i] === data[index - 1][i]) {
                obj[i].arr[obj[i].num] += 1;
                obj[i].arr.push(0);
              } else {
                obj[i].arr.push(1);
                obj[i].num = index;
              }
            }
          });
        } else {
          let firstarr = obj[arr[0]].arr;
          let firstarrDeal = [];
          firstarr.forEach((item, index) => {
            if (item > 0) {
              firstarrDeal.push(index);
            }
          });
          data.forEach((item, index) => {
            let sign = false;
            if (firstarrDeal.indexOf(index) > 0) {
              obj[i].num = index;
              sign = true;
            }
            // 表格首个数据单独处理
            if (index === 0) {
              obj[i].arr.push(1);
              obj[i].num = 0;
            } else {
              if (item[i] === data[index - 1][i]) {
                if (sign) {
                  obj[i].arr.push(1);
                } else {
                  obj[i].arr[obj[i].num] += 1;
                  obj[i].arr.push(0);
                }
              } else {
                obj[i].arr.push(1);
                obj[i].num = index;
              }
            }
          });
        }
      });
      return obj;
    },
  },
};
</script>

<style lang="scss" scoped>
</style>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值