el-table 合并单元格

本文介绍了一种前端技术,用于处理后端返回的数据并实现在表格中动态显示及单元格合并的功能。具体包括如何通过计算列标题和使用`objectSpanMethod`函数来控制单元格的合并与隐藏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做需求的时候,我们总是能遇到各种各样奇葩的需求… o(╯□╰)o
但是呢,依然挡不住一颗探索的心呐!先上展示效果
在这里插入图片描述
在这里插入图片描述
需求是这样的:

  1. 在前端上传文件后由后端解析成数据再传回前端做展示,但是传到前端的数据呢,是一行一行的,但是有些单元格却是需要合并,因此,后端会返回两个数组,一个数组是数据,另一个数据是需要合并的单元格格式,如图
    在这里插入图片描述
    CellsdataTable 是后端返回的数据行
    Mergecell 是需要合并的单元格信息
  2. 由于是用户自己上传的文件,行和列都不确定,前端需要动态地展示列标题。

废话不多说了,上代码:

  • :span-method=“objectSpanMethod” // 是每个单元格的合并格式函数,会接收包含了四个参数的对象 { row, column, rowIndex, columnIndex },分别是 行数据,列数据,行标识,列标识。
  • 文中 fileTitle 是计算出来的列标题 ,在此循环
<el-table
   border
   ref="fileTable"
   :data="fileUploadData"
   class="table-reset"
   size="small"
   :span-method="objectSpanMethod" 
   >
   <el-table-column align='center' width="40" fixed="left" type="selection"></el-table-column>
   <!-- fileTitle 是计算出来的列标题 ,在此循环就可以啦 -->
   <el-table-column v-for="(title, index) in fileTitle" :key="index" :prop="title.name" :label="title.name"  align='center'></el-table-column>
   <el-table-column width="70" fixed="right" label='选为标题'>
     <template slot-scope="scope">
       <span class="cbtn cbtn-yellow" @click="onTitle($event, scope.row)"></span>
     </template>
   </el-table-column>
 </el-table>

由于我在前端加了分页,所以每行的数据需要处理一下

objectSpanMethod ({ row, column, rowIndex, columnIndex }) {
   // 当前行
   rowIndex = rowIndex + (this.currentPage - 1) * this.pageSize // 此处是根据当前页码和每页展示的数据,算出当前的实际行数,如果没有做分页的同学,可以忽略此步骤

	// 判断有无需要合并的单元格,mergecell 是后端返回的
   if (this.mergecell.length !== 0) {
   	// 在此过滤掉不符合条件的单元格格式
     let crow = this.mergecell.filter(val => {
       return rowIndex >= val.Row && rowIndex < val.Row + val.RowSpan && columnIndex >= val.Col + 1 && columnIndex < val.Col + val.ColSpan + 1
       // 此处意思是 判断当前的合并单元格信息,有无包含当前单元格
     })
     if (crow && crow.length !== 0) { // 判断是否有符合信息
       if (crow[0].Row === rowIndex && crow[0].Col + 1 === columnIndex) { // 由于 crow获取的是当前单元格信息包含的单元格,所以要判断一下是否是当前单元格
       // 如果是,则返回单元格格式
         return {
           rowspan: crow[0].RowSpan,
           colspan: crow[0].ColSpan
         }
       } else {
       	// 如果不是,则隐藏当前格子
         return {
           rowspan: 0,
           colspan: 0
         }
       }
     }
   }
 },
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值