Element-Plus 中Table 表格合并列数据,当列数据相同时进行合并span-method

合并列,使用element中table自带属性 span-method

  当前行row、当前列column、当前行号rowIndex、当前列号columnIndex"

如图:合并序号为1和序号为5的

代码如下: 可直接复制使用

  <el-table

        v-loading="loading"

        :data="tableData"

        border

        ref="multipleTable"

        style="width: 100%"

        :header-cell-style="{

          backgroundImage: 'linear-gradient(176deg,#accbee ,#e7f0fd 100%)',

          color: '#000',

        }"

        :span-method="objSpanMethod"

      >

        <el-table-column type="index" width="60" label="序号" align="center" />


 将表格中bookCodes一样的数据-来进行合并列


     //合并列
    flitterData(arr) {
      let spanOneArr = [];
      let concatOne = 0;
      arr.forEach((item, index) => {
        if (index === 0) {
          spanOneArr.push(1);
        } else {
            // 将bookCodes一样的数据-进行合并列
          if (item.bookCodes === arr[index - 1].bookCodes) {
            spanOneArr[concatOne] += 1;
            spanOneArr.push(0);
          } else {
            spanOneArr.push(1);
            concatOne = index;
          }
        }
      });
      return {
        one: spanOneArr,
      };
    },


 element Plus中 span-method绑定的方法-objSpanMethod


    //合并 预约编号相同的合并    this.tableData为表格数据
    objSpanMethod({ row, column, rowIndex, columnIndex }) {
      console.log("当前行row、当前列column、当前行号rowIndex、当前列号columnIndex")

      //合并表格列为1的数据,表格从0开始,也就是合并第1列数据

      if (columnIndex === 1) {
        const _row = this.flitterData(this.tableData).one[rowIndex];
        const _col = _row > 0 ? 1 : 0;
        return {
          rowspan: _row,
          colspan: _col,
        };
      }

   //合并表格列为5的数据,表格从0开始,也就是合并第5列数据
      if (columnIndex === 5) {
        const _row = this.flitterData(this.tableData).one[rowIndex];
        const _col = _row > 0 ? 1 : 0;
        return {
          rowspan: _row,
          colspan: _col,
        };
      }
    
      }
    },

二、注意: 

 如果遇到:比如(我是bookCodes ),bookCodes 是一样的但是没有合并,是因为跨行了,如上代码只是将下一行数据和上一行数据相邻的数据进行比较,对于上一行之前的跨行数据是没有比较的,所以在进行比较之前,可以将数据按照bookCodes 进行排序,可以使用sort数组方法来对表格数据进行排序。

如下:用sort将bookCodes相同的放一起,在进行合并。

    // 将bookCodes相同的放一起

          this.tableAllData.sort((a, b) => {

            if (a.bookCodes < b.bookCodes) return 1; // a 在前

            if (a.bookCodes > b.bookCodes) return -1; // b 在前

            return 0; // 保持不变

          });

          console.log('排序后的数据:', this.tableAllData);

sort排序后在把所有相同的bookCodes 进行合并,不会出现相同不合并断层的影响。

Element Plus(Eleme UI)的表格组件(el-table)中,`:span-method` 属性是一个自定义的方法,用于根据特定的业务规则动态调整表格的行合并。当你需要对数据进行复杂的跨行显示时,可以在这个方法里编写代码来控制单元格的合并。下面是一个基本的例子: ```html <template> <el-table :data="tableData" :span-method="customMergeMethod"> <!-- 表头 --> <el-table-column type="index"></el-table-column> <!-- 其他列... --> <!-- 如果你想合并某一列,添加 :span-method="customMergeMethod" 到该列 --> <el-table-column :span-method="customMergeMethod" property="mergedColumn" label="合并列标题"></el-table-column> </el-table> </template> <script> export default { methods: { customMergeMethod({ row, column, rowIndex, columnIndex }) { // 根据row中某个字段(如:mergedColumn)的值来决定是否合并行 if (row.mergedColumn && // 判断条件 // 检查当前行和上一行的 mergedColumn 是否同,如果不同则表示应该结束合并 (columnIndex === 0 && this.tableData[rowIndex - 1].mergedColumn !== row.mergedColumn)) { return true; // 合并行 } else { return false; // 不合并 } }, }, data() { return { tableData: [ // 数据样例 { id: 1, mergedColumn: false }, // 不合并 { id: 2, mergedColumn: true }, // 合并到第二行 { id: 3, mergedColumn: false }, // 不合并 ... ] }; }, }; </script> ``` 在这个例子中,`customMergeMethod`方法接收四个参数:当前行 (`row`)、当前列 (`column`)、行索引 (`rowIndex`) 和列索引 (`columnIndex`)。你可以根据这些参数来检查是否应该合并行,并返回布尔值(`true` 表示合并,`false` 表示不合并)。在这里,我们假设 `mergedColumn` 字段决定了行是否需要合并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值