Element table 常用合并单元格<封装>

el-table 表格内容合并

<el-table
    v-loading="isTableLoading"
    :data="tableData"
    border
    :span-method="
      (method) => arraySpanMethod(method, tableData, 'templetTypeId', [1, 3, 4])
    "
>...</el-table>

传入指定参数,,完成单元格简单合并,将常用合并表格方便封装,以便日后使用

methods: {
    /**
     * @description 合并列表数据
     * @param {Object} { rowIndex, columnIndex } 当前行 index 当前列 xinde 
     * @param {Array<any>} list 表格数据
     * @param {String} key 用来合并的相同字段
     * @param {Array<number>} columnIndexs 想要合并的列
     */
    arraySpanMethod({ rowIndex, columnIndex }, list, key, columnIndexs = []) {
      if (!Array.isArray(columnIndexs)) {
        throw new TypeError(columnIndexs + '不是数组');
      }
      const spanArr = this.getSpan(list, key);
      if (columnIndexs.includes(columnIndex)) {
        return {
          rowspan: spanArr[rowIndex],
          colspan: spanArr[rowIndex] > 0 ? 1 : 0,
        };
      } else {
        return {
          rowspan: 1,
          colspan: 1,
        };
      }
    },
    /**
     * @description 根据合并字段分类
     * @param {Array<any>} list 表格数据
     * @param {String} key 需要用来合并的字段
     */
    getSpan(list, key) {
      const spanArr = [];
      let count = 0;
      list.forEach((item, index) => {
        if (index === 0) {
          spanArr.push(1);
        } else {
          if (item[key] === list[index - 1][key]) {
            spanArr[count] += 1;
            spanArr.push(0);
          } else {
            spanArr.push(1);
            count = index;
          }
        }
      });
      return spanArr;
    },
}

表格数据如下

image.png

合并效果如下

image.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一种实现方式。 首先,我们需要封装一个 table 组件,可以使用 Vue 的组件封装方式进行实现。在组件中,我们需要定义 table 的列和数据,同时还需要定义事件方法来处理单元格绑定的事件。 接下来,我们可以使用 slot-scope 来动态渲染表格的单元格,并将对应的数据和事件传递给单元格。这样,在单元格中就可以轻松绑定事件了。 下面是一个示例代码: ```vue <template> <el-table :data="tableData"> <el-table-column v-for="column in tableColumns" :key="column.prop" :label="column.label"> <template slot-scope="scope"> <span @click="handleCellClick(column.prop, scope.row)">{{ scope.row[column.prop] }}</span> </template> </el-table-column> </el-table> </template> <script> export default { props: { tableColumns: { type: Array, required: true }, tableData: { type: Array, required: true } }, methods: { handleCellClick(prop, row) { // 处理单元格点击事件 console.log(`prop: ${prop}, value: ${row[prop]}`); } } }; </script> ``` 在这个示例中,我们接收两个 props,分别为 tableColumns 和 tableData,分别表示表格的列和数据。在表格的渲染中,我们使用了 slot-scope 来动态渲染表格的单元格,并将对应的数据和事件传递给单元格。在单元格中,我们使用 @click 来绑定点击事件,并调用 handleCellClick 方法来处理事件。 当然,这只是一种实现方式,您可以根据具体的需求来进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值