elementUI table 合并表格

参考链接: link.


<template>
	<el-table
        :data="tableData"
        border
        @selection-change="handleSelectionChange"
        style="width: 100%"
        :span-method="arraySpanMethod"
      ></el-table>
</template>


getList() {
      listDocumentByTaskId(this.projectTaskId).then((res) => {
        if (res.code === 0) {
          res.data?.length > 0 ? (this.type = 1) : (this.type = 2);
          this.tableData = res.data;
          this.tableData = this.mergeTableRow({ // 合并通用函数
            data: this.tableData,
            mergeColNames: ["documentClass", "nature"], // 需要合并的列,默认合并列相同的数据
            firstMergeColNames: ["documentClass", "nature"], // 受影响的列,只合并以firstMerge为首的同类型数据
            firstMerge: "documentClass", // 以哪列为基础进行合并,一般为第一列
          });
        } else {
          this.$message.error(res.msg);
        }
      });
    },

// elementUI 中表格合并行的api方法
  arraySpanMethod({ row, column, rowIndex, columnIndex }) {
    const span = column["property"] + "-span";
    if (row[span]) {
      return row[span];
    }
  },

//合并通用函数
mergeTableRow(config) {
      let data = config.data;
      const { mergeColNames, firstMergeColNames, firstMerge } = config;
      if (!mergeColNames || mergeColNames.length === 0) {
        return data;
      }
      mergeColNames.forEach((m) => {
        const mList = {};
        data = data.map((v, index) => {
          const rowVal = v[m];
          if (mList[rowVal] && mList[rowVal].newIndex === index) {
            const flag =
              firstMergeColNames.filter((f) => {
                return f === m;
              }).length !== 0;
            const mcFlag =
              mergeColNames.filter((mc) => {
                return mc === firstMerge;
              }).length === 0;
            if (
              (mcFlag && flag) ||
              (flag &&
                data[index][firstMerge + "-span"] &&
                data[index][firstMerge + "-span"].rowspan === 1)
            ) {
              v[m + "-span"] = {
                rowspan: 1,
                colspan: 1,
              };
            } else {
              data[mList[rowVal]["index"]][m + "-span"].rowspan++;
              v[m + "-span"] = {
                rowspan: 0,
                colspan: 0,
              };
              mList[rowVal]["num"]++;
              mList[rowVal]["newIndex"]++;
            }
          } else {
            mList[rowVal] = { num: 1, index: index, newIndex: index + 1 };
            v[m + "-span"] = {
              rowspan: 1,
              colspan: 1,
            };
          }
          return v;
        });
      });
      return data;
    },
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值