ElementUI Table组件使用 span-method 合并相同单元格

相关背景 

Element-UI 官网的 span-method 属性案例演示中没有给出局部相同数据的合并使用场景

使用属性

Table Attributes
参数说明类型
span-method合并行或列的计算方法Function({row, column,rowIndex,columnIndex})

span-method: 方法的参数是一个对象,包含row 行、 column 列、rowIndex 当前行、columnIndex 当前列号;该函数返回值可以说一个包含两个元素的数组(第一个元素代表 rowspan,第二个元素代表 colspan),也可以是一个键名为 rowspan 和 colspan 的对象。

使用细节

1. 后台返回的表格数据格式如下:

data() {
    return {
        tableData: [
            {id: '001',name: '李白'}, 
            {id: '001',name: '李白'}, 
            {id: '777',name: '杜甫'}, 
            {id: '777',name: '杜甫'},
            {id: '777',name: '杜甫'}
        ]
    }
}

2. 计算属性中将表格数据按将要合并的字段进行分类(例如: id)

computed: {
	tableDataColumn() {
      const dataObject = {}
      this.tableData.forEach((item, index) => {
        const id = item.id
        if (dataObject[id]) {
          dataObject[id].push(index)
        } else {
          dataObject[id] = []
          dataObject[id].push(index)
        }
      })
      return dataObject
    }
}

3. methods中操作:

arraySpanMethod({ row, column, rowIndex, columnIndex }) {
    if (columnIndex === 0) { // 第一列相同数据合并
        if (rowIndex > 0 && row.id === this.tableData[rowIndex - 1].id) {
          return {
            rowspan: 0,
            colspan: 0
          }
        } else {
          const id = row.id
          const rows = this.tableDataColumn[id]
          const length = rows.length
          return {
            rowspan: length,
            colspan: 1
        }
      }
   }
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Table 组件使用 `span-method` 合并列后变高的原因可能是由于合并列导致的单元格高度不一致。当某些单元格跨越多行或多列时,它们的高度可能会被自动调整以适应合并的内容,从而导致整个表格的行高增加。 为了解决这个问题,你可以手动设置合并单元格的行高,使其与其他单元格保持一致。你可以使用 `row-class-name` 属性来为合并的行添加自定义类名,并在 CSS 中设置相应的行高。 下面是一个示例代码: ```vue <template> <el-table :data="tableData" :row-class-name="rowClassName"> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> <el-table-column prop="address" label="Address"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: 'John', age: 20, address: 'Address 1' }, { name: 'Jane', age: 25, address: 'Address 2' }, { name: 'Tom', age: 30, address: 'Address 3' }, ], }; }, methods: { rowClassName({ row, rowIndex }) { if (rowIndex === 1) { return 'merged-row'; // 添加自定义类名 } return ''; }, }, }; </script> <style> .merged-row { height: 40px; // 设置合并行的固定高度 } </style> ``` 在上述示例中,我们通过 `row-class-name` 属性为第二行添加了一个自定义类名 `merged-row`,然后在 CSS 中设置了该类名的行高为 40px。这样就能确保合并的行高与其他行保持一致。 你可以根据实际情况调整行高和添加自定义类名的逻辑。希望这能帮助到你解决问题!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值