el-table :span-method 合并单元格(2.0)

server/2024/11/25 7:50:44/

2024.11.23今天我学习了如何使用el-table组件的合并单元格方法,效果如下:

代码如下:

javascript"><template><div class="container"><el-table :data="table_data" :span-method="object_merge" border><el-table-column label="名称" prop="name" align="center"/><el-table-column label="单价" prop="price" align="center"/><el-table-column label="时间" prop="time" align="center"/></el-table></div>
</template>
<script>
export default {data() {return {table_data: [],//存放表格数据length_data: [],//存放相同数据的个数}},created() {this.get_list();},methods: {get_list() {let demo = [{ name: '苹果', price: 20, time: '07:00:00', id: 1 },{ name: '香蕉', price: 12, time: '08:00:00', id: 2 },{ name: '苹果', price: 23, time: '09:00:00', id: 1 },{ name: '西瓜', price: 30, time: '07:00:00', id: 3 },{ name: '苹果', price: 11, time: '19:00:00', id: 1 },{ name: '香蕉', price: 20, time: '10:00:00', id: 2 },];// 合并相同的idlet new_demo = demo.reduce((arr, cur) => {if (!arr[cur.id]) {arr[cur.id] = [];}arr[cur.id].push(cur);return arr;//注意返回}, {});this.table_data = Object.values(new_demo).flat();//数组扁平化,如[[1,2],3]变成一维数组[1,2,3]// 获取相同数据的长度,如果长度大于1,需要填充n-1个0let length_data = [];Object.values(new_demo).forEach(item => {length_data.push(item.length);if (item.length > 1) {length_data.push(...new Array(item.length - 1).fill(0));}})this.length_data = length_data;},// 合并数组object_merge({ row, column, rowIndex, columnIndex}) {if (columnIndex === 0) {//判断第一列const row_span = this.length_data[rowIndex];const col_span = row_span > 0 ? 1 : 0;return {rowspan: row_span,colspan: col_span}}}}
}
</script>

封装方法:

1.utils  el-table-span-method.js文件
javascript">// el-table合并单元格方法
// repeat_data_length 重复数据长度如[1,2,0,1,1,3,0,0];长度大于1需要填充n-1个0
export function el_table_merge_cell({row, column, rowIndex, columnIndex}, repeat_data_length) {if (columnIndex === 0) {//判断第一列const row_span = repeat_data_length[rowIndex];const col_span = row_span > 0 ? 1 : 0;return {rowspan: row_span,colspan: col_span}}
}

页面代码:

javascript"><template><div class="container"><el-table :data="table_data" :span-method="object_merge" border><el-table-column label="名称" prop="name" align="center"/><el-table-column label="单价" prop="price" align="center"/><el-table-column label="时间" prop="time" align="center"/></el-table></div>
</template>
<script>
import { el_table_merge_cell } from '@/utils/el-table-span-method'export default {data() {return {table_data: [],//存放表格数据length_data: [],//存放相同数据的个数}},created() {this.get_list();},methods: {get_list() {let demo = [{ name: '苹果', price: 20, time: '07:00:00', id: 1 },{ name: '香蕉', price: 12, time: '08:00:00', id: 2 },{ name: '苹果', price: 23, time: '09:00:00', id: 1 },{ name: '西瓜', price: 30, time: '07:00:00', id: 3 },{ name: '苹果', price: 11, time: '19:00:00', id: 1 },{ name: '香蕉', price: 20, time: '10:00:00', id: 2 },];// 合并相同的idlet new_demo = demo.reduce((arr, cur) => {if (!arr[cur.id]) {arr[cur.id] = [];}arr[cur.id].push(cur);return arr;//注意返回}, {});this.table_data = Object.values(new_demo).flat();//数组扁平化,如[[1,2],3]变成一维数组[1,2,3]// 获取相同数据的长度,如果长度大于1,需要填充n-1个0let length_data = [];Object.values(new_demo).forEach(item => {length_data.push(item.length);if (item.length > 1) {length_data.push(...new Array(item.length - 1).fill(0));}})this.length_data = length_data;},// 合并数组object_merge({ row, column, rowIndex, columnIndex }) {return el_table_merge_cell({ row, column, rowIndex, columnIndex }, this.length_data)}}
}
</script>

 


http://www.ppmy.cn/server/144736.html

相关文章

分布式数据库中间件可以用在哪些场景呢

在数字化转型的浪潮中&#xff0c;企业面临着海量数据的存储、管理和分析挑战。华为云分布式数据库中间件&#xff08;DDM&#xff09;作为一款高效的数据管理解决方案&#xff0c;致力于帮助企业在多个场景中实现数据的高效管理和应用&#xff0c;提升业务效率和用户体验。九河…

props.children的使用场景

props.children 是 React 中一个非常重要的特性&#xff0c;它用于访问组件的子元素。这些子元素可以是其他组件、字符串、数字、数组或者任何有效的 React 元素。props.children 是 React 提供的一种机制&#xff0c;使得父组件可以将其内容传递给子组件&#xff0c;并且子组件…

聚水潭与MySQL数据集成案例分享

聚水潭数据集成到MySQL的技术案例分享 在现代数据驱动的业务环境中&#xff0c;如何高效、可靠地实现不同系统之间的数据对接成为企业关注的焦点。本次案例将详细介绍如何通过轻易云数据集成平台&#xff0c;将聚水潭的数据无缝集成到MySQL数据库中&#xff0c;实现从“聚水谭…

【D04】网络安全基本命令

网络安全基本命令 想学会网络安全,就必须学会基本的网络常用命令,才能更好的去掌握网络,保护自己的系统&#xff0c;防止入侵。我们必须学会的基本的网络命令主要是基于Windows NT平台下的基本命令&#xff0c;也就是说windows 98/windows ME的下部分命令是不能运行的。所以说&…

Leetcode146. LRU 缓存(HOT100)

链接 代码&#xff1a; class LRUCache { private:struct Node{int key,val;Node* left,*right;Node(int _key,int _val):key(_key),val(_val){}}*L,*R;unordered_map<int,Node*> hash;int n;public:void remove(struct Node* p){p->left->right p->right;p-…

设计模式之 解释器模式

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;主要用于解决特定问题的解析和解释。这个模式的核心思想是定义一种语言的语法规则&#xff0c;并利用这些规则来解释和执行相应的表达式。解释器模式为设计语言解释器提供了一种解决方案…

Leetcode:15.三数之和

这道题是一道双指针解决的例题&#xff0c;从字面上看&#xff0c;能想到的暴力解法就是三重循环&#xff0c;但是如果数据量过大的时候&#xff0c;时间复杂度会很高&#xff0c;所以我们要想办法减少循环次数&#xff0c;第二个循环和第三个循环都是在前一个循环的基础上对后…

5G NR:调制与编码策略(MCS)简介

一、介绍 5G NR系统中的调制编码方案&#xff08;Modulation and Coding Scheme&#xff0c;MCS&#xff09;是定义了每个资源单位&#xff08;Resource Element&#xff0c;RE&#xff09;可以承载的有效比特数的一套标准。MCS等级的确定依赖于无线链路的信号质量&#xff0c;…