element ui表格合并-vue2

 实际效果图如下

下面是表格的具体内容

<template>
<el-table
  :data="tableData"
  :span-method="objectSpanMethod"
  border
  height="700px"
  style="width: 100%;height:50vh; margin-top: 20px">
  <el-table-column type="index"></el-table-column>
  <el-table-column
    prop="id"
    label="ID"
    width="180">
  </el-table-column>
  <el-table-column
    prop="name"
    label="姓名"
    height='200'>
    <template v-slot="{row}">
      <span class="accent_color">{{row.name}}</span>
    </template>
  </el-table-column>
  <el-table-column
    prop="amount1"
    label="数值 1(元)" height='200'>
  </el-table-column>
  <el-table-column
    prop="amount2"
    label="数值 2(元)">
  </el-table-column>
  <el-table-column
    prop="amount3"
    label="数值 3(元)">
  </el-table-column>
  <el-table-column
    width="100px"
    prop="sss"
    label="操作">
    <template v-slot="{row}"><el-button icon="el-icon-delete"></el-button></template>
  </el-table-column>
</el-table>
</template>

 下面是表格的具体数据

data(){
    return{
    tableData: [
     {
      id: '129871222222',
      name: 'Tom2',
      amount1: '234',
      amount2: '3.2',
      amount3: 10,
      sss: 1,
     },

    {
      id: '129871222',
      name: 'Tom',
      amount1: '234',
      amount2: '3.2',
      amount3: 10,
      sss: 1,
    },
    {
      id: '129871222',
      name: 'Tom2',
      amount1: '234',
      amount2: '3.2',
      amount3: 10,
      sss: 1,
  },
  {
    id: '12987122',
    name: 'Tom',
    amount1: '234',
    amount2: '3.2',
    amount3: 10,
    sss: 1,
  },
  {
    id: '12987122',
    name: 'Tom',
    amount1: '234',
    amount2: '3.2',
    amount3: 10,
    sss: 1,
  },
  {
    id: '12987122',
    name: 'Tom',
    amount1: '234',
    amount2: '3.2',
    amount3: 10,
    sss: 1,
  },
  {
    id: '129871222',
    name: 'Tom',
    amount1: '234',
    amount2: '3.2',
    amount3: 10,
    sss: 1,
  },
],    
    }
},

关键的代码是处理数据,通过for循环遍历处理,对需要合并的列的值进行比较,达到合并效果,最后必须将值进行倒序处理否则无效  this.tableData.reverse()

mounted() {
//由于没有调接口,测试数据处理在mounted()钩子里
    this.tableData.reverse()//倒序处理数据,此处可以不写
    //增加属性
    this.tableData.map(item => {
       item.rowspan = 1
     })
//遍历数组,并比较id进行合并
for (let i = 0; i < this.tableData.length; i++) {
  if (i + 1 < this.tableData.length && this.tableData[i].id === this.tableData[i + 1].id) {
    this.tableData[i + 1].rowspan = this.tableData[i].rowspan + 1
    this.tableData[i].rowspan = 0
  }
}
console.log(this.tableData)
this.tableData.reverse()//必须加倒序否则合并表格无效
},

最后是 合并表格的主要方法是  :span-method="objectSpanMethod",写在methods方法里面

methods:{
    objectSpanMethod({row, column, rowIndex, columnIndex}) {
   //columnIndex 默认是从0开始,由于加了序号那列,'id'那列的columnIndex 就是1
  if (columnIndex === 1) {
    return {
      rowspan: row.rowspan,
      colspan: 1
    }
  }
//此处合并的是'name'那列
  if (columnIndex === 2) {
    return {
      rowspan: row.rowspan,
      colspan: 1
    }
  }
//此处合并的是操作那栏 'sss'
  if (columnIndex === 6) {
    return {
      rowspan: row.rowspan,
      colspan: 1
    }
  }
},
}

最后说明一下,方法是我的一个朋友刘总(小刘)帮助下,进一步修改完成的。希望对大家有帮助。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Element UI表格组件中,可以使用 `span-method` 属性来实现单元格合并。具体步骤如下: 1. 在表格组件中添加 `span-method` 属性,值为一个函数名,例如 `spanMethod`。 ```html <el-table :data="tableData" :span-method="spanMethod"> <!-- 表格列定义 --> </el-table> ``` 2. 在 Vue 实例中定义 `spanMethod` 函数,该函数接收两个参数:`{ row, column, rowIndex, columnIndex }`。其中,`row` 和 `column` 分别为当前单元格所在的行和列对象,`rowIndex` 和 `columnIndex` 分别为当前单元格所在的行和列索引。 3. 在 `spanMethod` 函数中,根据需要合并的条件,返回一个对象,指定当前单元格横向和纵向需要合并的单元格数。例如,如果需要合并相邻的两个单元格,则在第一个单元格返回 `{ rowspan: 1, colspan: 2 }`,在第二个单元格返回 `{ rowspan: 0, colspan: 0 }`,表示该单元格不需要渲染。 以下是一个示例的 `spanMethod` 函数,该函数实现了相同行数据合并的功能: ```javascript methods: { spanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { // 如果是第一列,则默认不合并 return { rowspan: 1, colspan: 1 } } else { // 判断当前单元格的值是否与上一单元格相同 const prevRow = this.tableData[rowIndex - 1] const prevVal = prevRow[column.property] if (row[column.property] === prevVal) { // 如果相同,纵向合并,横向不合并 return { rowspan: 0, colspan: 1 } } else { // 如果不同,不合并 return { rowspan: 1, colspan: 1 } } } } } ``` 在上述示例中,如果当前单元格所在列为第一列,则默认不合并;否则,判断当前单元格的值是否与上一单元格相同,如果相同,则纵向合并,横向不合并;如果不同,则不合并。 需要注意的是,由于合并单元格会影响表格的布局,因此建议在表格中只合并相邻的单元格,不要跨行或跨列合并单元格,以免影响表格的美观和可读性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值