表格的单元格合并和表头的合并——vxe-table

ops/2024/9/23 9:26:59/
vxe-table的官网:https://vxetable.cn/#/table/advanced/mergeCell

在你的项目中下载安装完成后,先在main.js文件中引入:

import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
Vue.use(VXETable)

一、单元格合并

效果图:在这里插入图片描述
代码:

<template><div><vxe-tableborderresizablealign="center":span-method="mergeRowMethod":data="tableData3"><vxe-column field="key" title="标题1"></vxe-column><vxe-column field="key1" title="标题2"></vxe-column><vxe-column field="max" title="标题5"></vxe-column><vxe-column field="min" title="标题6"></vxe-column><vxe-column field="height" title="标题7"></vxe-column><vxe-column field="low" title="标题8"></vxe-column><vxe-column field="" title="操作"><template scope="scope"><span @click="updateClick(scope.row,scope.rowIndex)">操作</span><span style="margin-left: 15px;">删除</span></template></vxe-column></vxe-table></div>
</template><script>
export default {data () {return {tableData3: [{ id: 10001, key: '内容1', key1: '22%', max: 20, min: 10, height: 27, low: 19 },{ id: 10002, key: '内容1', key1: '22%', max: 20, min: 10, height: 27, low: 19 },{ id: 10002, key: '内容1', key1: '22%', max: 20, min: 10, height: 27, low: 19 },{ id: 10003, key: '内容2', key1: '35%', max: 20, min: 10, height: 27, low: 19 },{ id: 10004, key: '内容2', key1: '35%', max: 20, min: 10, height: 27, low: 19 },],}},methods: {// 通用行合并函数(将相同多列数据合并为一行)mergeRowMethod ({ row, _rowIndex, column, visibleData }) {// 你需要哪一列进行合并,就写他的字段名const fields = ['key', 'key1']const cellValue = row[column.property]if (cellValue && fields.includes(column.property)) {const prevRow = visibleData[_rowIndex - 1]let nextRow = visibleData[_rowIndex + 1]if (prevRow && prevRow[column.property] === cellValue) {return { rowspan: 0, colspan: 0 }} else {let countRowspan = 1while (nextRow && nextRow[column.property] === cellValue) {nextRow = visibleData[++countRowspan + _rowIndex]}if (countRowspan > 1) {return { rowspan: countRowspan, colspan: 1 }}}}},updateClick (row, rowIndex) {console.log(row, rowIndex);},}
}
</script>

如果数据相同,但是你不想要他合并,例如:
在这里插入图片描述
如上图,虽然内容1和内容2后面对应的百分比都是22%,但是你不希望该单元格整体合并,你可以将标题1和标题2的field属性改成同一个参数名,就可以解决了,如下:

<template><div><vxe-tableborderresizablealign="center":span-method="mergeRowMethod":data="tableData3"><vxe-column field="key" title="标题1"></vxe-column><vxe-column field="key" title="标题2"><template slot-scope="scope">{{ scope.row.key1 }}</template></vxe-column><vxe-column field="max" title="标题5"></vxe-column><vxe-column field="min" title="标题6"></vxe-column><vxe-column field="height" title="标题7"></vxe-column><vxe-column field="low" title="标题8"></vxe-column><vxe-column field="" title="操作"><template scope="scope"><span @click="updateClick(scope.row,scope.rowIndex)">操作</span><span style="margin-left: 15px;">删除</span></template></vxe-column></vxe-table></div>
</template>

二、表头合并

效果图:
在这里插入图片描述
代码:
columns里的field属性和data里的属性名是对应的,例如{ field: ‘address’, title: ‘标题3-4’, },标题3-4这一列展示的就是data里的address所对应的值

<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div>
</template>
<script>
export default {data () {return {gridOptions: {border: true,resizable: true,align: 'center',// 分组列头,通过 children 定义子列columns: [{title: '标题1',children: [{field: '', title: '标题1-1',children: [{ field: 'bank', title: '' },]},]},{title: '标题2',children: [{field: '',title: '20%',children: [{ field: 'ran', title: '标题2-1', },{ field: 'rank', title: '标题2-2', },{ field: 'ranki', title: '标题2-3', },{ field: 'rankin', title: '标题2-4', },]},]},{title: '标题3',children: [{field: '',title: '35%',children: [{ field: 'role', title: '标题3-1', },{ field: 'sex', title: '标题3-2', },{ field: 'age', title: '标题3-3', },{ field: 'address', title: '标题3-4', },]},]},{field: 'data4',title: '标题4',},],data: [{ id: 10001, bank: '工商银行', data4: 1, ran: '1', rank: '2', ranki: '3', rankin: '4', role: '35', sex: 'Man', age: 28, address: 'Shenzhen' },{ id: 10002, bank: '交通银行', data4: 2, ran: '2', rank: '2', ranki: '3', rankin: '4', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },{ id: 10003, bank: '工农银行', data4: 3, ran: '3', rank: '2', ranki: '3', rankin: '4', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },{ id: 10004, bank: '招商银行', data4: 4, ran: '4', rank: '2', ranki: '3', rankin: '4', role: 'Designer', sex: 'Women', age: 23, address: 'Shenzhen' },]},}},methods: {}
}
</script>

http://www.ppmy.cn/ops/19031.html

相关文章

Go 学习笔记

Go 学习相关笔记 Go 官方的教学文档顺序不怎么友好&#xff0c;这里根据我自己的学习曲线来记录文档的查看顺序 基础知识 文档预备 新手先要看 Go 的模块管理介绍&#xff0c;这样才知道基础 Go 怎么导入外部包和进行本地的包管理 https://go.dev/doc/modules/managing-dep…

用例整体执行及pytest.ini文件

在我们写代码的过程中&#xff0c;一般都是右键或者命令行去执行一个用例 但是当我们写完后&#xff0c;需要整体执行一遍。那应该怎么搞呢&#xff1f; 我们可以在根目录下新建一个main.py或者run.py之类的文件&#xff0c;文件内容如下&#xff1a; if __name__ "__ma…

【iOS开发】(五)react Native路由和导航20240421-22

【iOS开发】(五)react Native 路由和导航Navigation 20240421 在&#xff08;一&#xff09;&#xff08;二&#xff09;中我们 Reactnative搭建了开发环境、学习了 基础语法、状态管理&#xff0c;JSX、组件、状态和生命周期以及样式布局等。 在&#xff08;三&#xff09;&a…

smart200 做client,modbus_tcp读取modbus_slave

这里还隐藏一个重要的设置&#xff0c;就是站地址。这个在库函数里。不同plc位置会不一样&#xff0c;我这里是vb1651对应modbus的地址为255&#xff0c;这个值我们可以自己更改&#xff0c;范围为1-247. 打开modbus_slave 软件&#xff0c;

binder 双向通信时客户端没有joinThreadPool也能接收到服务端的请求

服务端之所以能够接收到客户端的请求&#xff0c;并能正确调用服务端进程中对应服务的onTransact方法&#xff0c;是因为服务端会通过joinThreadPool或者startThreadPool&#xff0c;在里面循环的等待客户端的请求并在接收到请求之后做对应的处理。 但是今天我在用C写binder双向…

Elasticsearch 精确查询:术语查询、多术语查询、主键查询、范围查询、存在查询、前缀查询、正则查询与通配符查询

为了深入理解Elasticsearch的各种精确查询方法&#xff0c;我们将通过一系列示例来演示术语查询、多术语查询、主键查询、范围查询、存在查询、前缀查询、正则查询和通配符查询的应用场景。首先&#xff0c;我们为示例准备一组数据&#xff1a; POST person/_doc/1 {"id&…

Java中JVM常见调优以及对应参数使用

JVM调优是为了提升Java应用程序的性能和稳定性。下面是一些常见的JVM调优以及对应的参数使用&#xff1a; 堆内存调优&#xff1a; -Xms: 指定JVM初始化时堆内存的大小。-Xmx: 指定JVM堆内存的最大大小。-Xmn: 指定年轻代的大小。-XX:NewRatio: 指定年轻代与老年代的比例。-XX:…

UI 设计的未来发展

UI 设计的未来发展&#xff0c;实际上是互联网行业未来发展的折射。毕竟&#xff0c;UI 设计始终是互联网行业的一部分&#xff0c;因此在互联网行业未来发展的可能性来看&#xff0c;UI 设计同样会跟随着互联网的部分稳步前进。曾经&#xff0c;在最初的图形化界面出现的时候&…