el-table——可合并单元格的表格

    <el-table
      v-loading="loading"
      :data="tableData"
      border
      :span-method="colSpanMethod"
    > </el-table>
   //需要的合并效果:data
          spanArrs: {
            amount1: [], // 合并单元格的参数
            amount2: []
          }
    const amount2 = this.getSpanArr(tableData, 'amount2')
    const spanArrs = {
      // amount1:amount1,
      amount2: amount2
    }
// 合并列函数:methods
    colSpanMethod ({ row, column, rowIndex, columnIndex }) {
      if (this.spanArrs[column.property] && columnIndex < 1) { // 2
        const _row = this.spanArrs[column.property][rowIndex]
        const _col = _row > 0 ? 1 : 0
        return {
          rowspan: _row,
          colspan: _col
        }
      } else {
        return {
          rowspan: 1,
          colspan: 1
        }
      }
    },
    // 计算合并个数:key代表需要合并的参数
    getSpanArr (data, key) {
      let spanArr = []
      let spanIndex = null
      if (data == null) {
        return []
      } else {
        for (let i = 0; i < data.length; i++) {
          if (i === 0) {
            spanArr.push(1)
            spanIndex = 0
          } else {
            if (data[i][key] === data[i - 1][key]) {
              spanArr[spanIndex] += 1
              spanArr.push(0)
            } else {
              spanArr.push(1)
              spanIndex = i
            }
          }
        }
        return spanArr
      }
    },
    // 排序:可以让后台返回排序后的内容,避免合并后内容不对应
    sortBy (attr, rev) {
      if (!rev) {
        rev = 1
      } else {
        rev = (rev) ? 1 : -1
      }
      return function (a, b) {
        a = a[attr].toLowerCase()
        b = b[attr].toLowerCase()
        if (a < b) {
          return rev * -1
        }
        if (a > b) {
          return rev * 1
        }
        return 0
      }
    },

 

转载于:https://www.cnblogs.com/wheatCatcher/p/11170073.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 `el-table-column` 的 `span-method` 属性来合并单元。这个属性可以接收一个函数,用于决定哪些单元需要合并。 你可以在 `el-table-column` 上添加 `span-method` 属性,并将其设置为一个函数。这个函数会接收三个参数:`{ row, column, rowIndex, columnIndex }`,分别表示当前行的数据,当前列的数据,当前行的索引和当前列的索引。你可以在函数中根据需要来判断是否需要合并单元。 下面是一个示例代码: ```html <template> <el-table :data="tableData"> <el-table-column prop="name" label="姓名" :span-method="handleSpanMethod"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18, address: '北京' }, { name: '李四', age: 20, address: '上海' }, { name: '王五', age: 22, address: '广州' }, { name: '赵六', age: 18, address: '北京' } ] } }, methods: { handleSpanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { if (rowIndex === 0 || row.name !== this.tableData[rowIndex - 1].name) { let rowspan = 1 for (let i = rowIndex + 1; i < this.tableData.length; i++) { if (row.name === this.tableData[i].name) { rowspan++ } else { break } } return { rowspan, colspan: 1 } } else { return { rowspan: 0, colspan: 0 } } } } } } </script> ``` 在上面的代码中,我们通过使用 `span-method` 属性和 `handleSpanMethod` 方法来实现合并单元。在 `handleSpanMethod` 方法中,我们判断当前列是否为第一列,并且判断当前行的姓名是否与上一行的姓名相同。如果满足条件,我们计算需要合并的行数(即 `rowspan`),并返回一个对象,其中包含合并的行数和列数。如果不满足条件,则返回 `{ rowspan: 0, colspan: 0 }` 来表示不需要合并。 这样就可以通过 `el-table-column` 的 `span-method` 属性来合并单元了。希望对你有帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值