效果图如下:

template 代码:

 <el-table ref="fundBalanceDailyReportTable" :span-method="objectSpanMethod" border :data="value.dataList" class="materialInfoTable clear-input-v" :height="500">
<el-table-column label="序号" width="60px" fixed prop="sortNo" align="center">
</el-table-column>
<el-table-column align="center" label="资金类项目" width="250" >
<template slot-scope="scope">
{{scope.row.name}}
</template>
</el-table-column>
<el-table-column align="center" label="" min-width="250" prop="itemName">
<template slot-scope="scope">
{{scope.row.itemName}}
</template>
</el-table-column>
<el-table-column align="center" label="金额(万元)" width="250" prop="amount">
<template slot-scope="scope">
<price-format-input v-model="scope.row.amount" placeholder="请输入金额" :digit="2" :disabled="isdisable(scope.row)" @input="changeReComputed()" clearable></price-format-input>
</template>
</el-table-column>
<el-table-column align="center" label="抵销差额(万元)" width="250" prop="offsetDifference">
<template slot-scope="scope">
<price-format-input v-model="scope.row.offsetDifference" placeholder="请输入抵销差额" :digit="2" :disabled="isdisable(scope.row)" @input="changeReComputed()" clearable></price-format-input>
</template>
</el-table-column>
<el-table-column align="center" label="合计金额(万元)" width="250" prop="totalAmount">
<template slot-scope="scope">
<span v-if="scope.row.itemId!=32">{{scope.row.totalAmount|formatMoney(2) }}</span>
<span v-if="scope.row.itemId==32">{{scope.row.totalAmount}}</span>
</template>
</el-table-column>
</el-table>

data中定义

  

spanArr1中定义参照了下图:

我对下图中contentSpanArr的数据定义的理解: 比如说第一行不合并单元格就是1,第二行与第三行两行参与合并就是2:表示参与合并的行数,0表示占位,比如:4-6行需要合并就表示为3,0,0 ;

所以最终形成是数组就是【1,2,0,3,0,0】

Methods方法:

  //自动生成需要合并的行号集合   
getSpanArr(data) { 
for (var i = 0; i < data.length; i++) {
if (i === 0) {
this.spanArr.push(1);
this.pos = 0
} else {
// 判断当前元素与上一个元素是否相同
if (data[i].sortNo === data[i - 1].sortNo) {
this.spanArr[this.pos] += 1;
this.spanArr.push(0);
} else {
this.spanArr.push(1);
this.pos = i;
}
}
}
},
//合并单元格方法
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
const _row = this.spanArr[rowIndex];
const _col = _row > 0 ? 1 : 0;
return {
rowspan: _row,
colspan: _col
}
}
if (columnIndex === 1) {
if(this.spanArr2.includes(rowIndex)){
return {colspan: 2,rowspan: 1}
}
else{
const _row = this.spanArr1[rowIndex];
const _col = _row > 0 ? 1 : 0;
return {
rowspan: _row,
colspan: _col
}
}
}
//解决第二列与第三列合并之后数据发生偏移的问题
if(columnIndex===2){
if(this.spanArr2.includes(rowIndex)){
return {rowspan: 0,colspan: 0}
}
}
}

笔记:摘取自 https://blog.csdn.net/qq_14993591/article/details/124048897

tableDatas()这个函数就是用来返回 spanArr 数组的,定义每一行的 rowspan

if( index === 0),第一行,直接先给数组 push 进一个1,表示自己先占一行,position 是数组元素的位置
(此时是从数组元素的第一个开始,所以position 为 0), position为 0 意思表示的就是数组的第一个元素。 当到了 index 为 2 的时候,if(item.CertID === this.tableData[index - 1].CertID),
让第二行与第一行作比较:
(1)如果第二行与第一行相等的话,position 就 +1,当有 n 行第一行相同,position 就为 n,表示向下合并 n 行;
第二行自己就 spanArr.push(0),表示第二行“消失”,因为第一行和第二行合并了;
(2)如果第二行与第一行不相等的话,那么 spanArr.push(1);就让第二行自己独占一行; position = index :把指针拿到 index 这行来,表示设置数组 spanArr[position] 的元素值,然后定义从此行开始向下合并几行
(可以根据示例研究下,当 index 为 2 时,position 为 2,当 index 为 3 时,第四行与第三行需要合并,
那么在数组的 position 元素就要 +1 了,也就是 spanArr[position] += 1)

:span-method="objectSpanMethod" 

这个是官方给定的绑定属性和对应的方法,objectSpanMethod 传入了 { row, column, rowIndex, columnIndex }
row: 当前行
column: 当前列
rowIndex:当前行号
columnIndex :当前列号 该函数可以返回一个包含两个元素的数组,第一个元素代表rowspan,第二个元素代表 colspan。
也可以返回一个键名为 rowspan 和 colspan 的对象。 const _col = _row > 0 ? 1 : 0; 定义的这个单元格列的合并,我们项目只合并行,不合并列; _row:代表合并行的行数,_row 的值要么是 1,或者更大的自然正整数,要么是 0。
1代表:独占一行
更大的自然数:代表合并了若干行
0:代表“消失”的哪那一个单元格,后面的单元格向前推一格

  

贴个大佬文章链接:https://blog.csdn.net/qq_14993591/article/details/124048897

element UI el-table 合并单元格的更多相关文章

  1. css table 合并单元格

    1. css table 合并单元格 colspan:合并列, rowspan:合并行, 合并行的时候,比如rowspan="2",它的下一行tr会少一列: 合并列的时候,比如co ...

  2. table中tr间距的设定table合并单元格 colspan(跨列)和rowspan(跨行)

    table中的tr的默认display:table-row,虽然可以修改为display:block但是就失去了tr特有的显示效果,如(td自动对齐): 并且在tr中对起设定padding是有用的,可 ...

  3. table合并单元格

    table合并单元格 新建一张表格.要求表格有四行四列,当中第一行的四列合并,第二行.第三行和第四行的第一列合并 <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  4. ant design Table合并单元格合并单元格怎么用?

    1.ant design table合并单元格怎么用?

  5. BootStrap Table 合并单元格

    为了更直观展示表格的一大堆乱七八糟的数据,合并单元格就派上用场: 效果: 贴上JSON数据(后台查询数据一定要对合并字段排序): [ { "city": "广州市&quo ...

  6. 一种HTML table合并单元格的思路

    /** * 合并单元格 * @param table1 表格的ID * @param startRow 起始行 * @param col 合并的列号,对第几列进行合并(从0开始).如果传下来为0就是从 ...

  7. table合并单元格colspan和rowspan .

    colspan和rowspan这两个属性用于创建特殊的表格. colspan是“column span(跨列)”的缩写.colspan属性用在td标签中,用来指定单元格横向跨越的列数: 在浏览器中将显 ...

  8. JQuery Table 合并单元格-解决Bug版本

    网络中提供的方法是: <script type="text/javascript"> function _w_table_rowspan(_w_table_id, _w ...

  9. table合并单元格 colspan(跨列)和rowspan(跨行)

    colspan和rowspan这两个属性用于创建特殊的表格. colspan是“column span(跨列)”的缩写.colspan属性用在td标签中,用来指定单元格横向跨越的列数: 在浏览器中将显 ...

  10. Html table 合并单元格

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 为什么有些IP无法PING通但又能访问

    背景 在调试板子的网络,突然发现板子无法ping通开发机(出现request timed out,),而电脑却可以ping通板子. 而scp.ssh以及nfs等工具却可以正常使用. 原理 找了一些资料 ...

  2. 关于ZYNQ-7000中断调试一点感想

    背景 在ZYNQ 平台下,需要对各种需要的底层接口进行初始化. 我依次调试了很多驱动,从最简单的网口到USB:再到读写PL端的寄存器(通过AXI总线,内存映射读写物理地址实现),到中断的时候一直卡着不 ...

  3. Python 潮流周刊#58:最快运行原型的语言(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  4. 单qubit量子门

    量子编程的基本单元就是量子门.量子编程有点像传统的电路设计,一个量子程序可以被写成量子门序列. 图中有一些符合,比如H门.X门.Z门.测量等,我们都会接触到. 传统计算机程序的输入和输出可以不一样,但 ...

  5. 使用C#对华为IPC摄像头二次开发(二)

    上一篇我们实现了用SDK登录摄像头并实现预览(https://www.cnblogs.com/wdw984/p/13564195.html),这次我们实现通过SDK调用摄像头本身自带的人脸抓拍功能. ...

  6. 自己理解的TCP三次握手

    ### TCP 三次握手过程是怎样的? TCP的建立连接是通过三次握手来进行的.三次握手的过程如下图: 说实话这个很好理解,我称之为N字型 首先我们理解到建立连接是一个虚的概念了对吧?那么我们来设计一 ...

  7. 3分钟带你搞定Spring Boot中Schedule

    一.背景介绍 在实际的业务开发过程中,我们经常会需要定时任务来帮助我们完成一些工作,例如每天早上 6 点生成销售报表.每晚 23 点清理脏数据等等. 如果你当前使用的是 SpringBoot 来开发项 ...

  8. C# 开发技巧 轻松监控方法执行耗时

    前言 MethodTimer.Fody 是一个功能强大的库,可以用于测量 .NET 应用程序中的方法的执行时间.允许你在不修改代码的情况下,自动地测量和记录方法的执行时间. 这个工具是基于.NET的 ...

  9. springsecurity:权限与异常处理

    权限即不同用户可以使用不同功能 实现前置: 在上一次登录与校验中,我们将authentication存入到SecurityContextHolder中,后续我们需要从FilterSecurityInt ...

  10. neo4j常用命令练习

    查询 查询node labels下的节点 match (n:`企业`) return n 查询单个节点,这里返回的是一个节点,具有以下两种写法:在java中是optional,需要get一下 matc ...