Web前端之Vue+Element实现表格动态不同列合并多行、localeCompare、forEach、table、push、sort、Map
MENU
- 效果图
- 公共数据
- 数据未排序时(需要合并的行数据未处于相邻位置)
- 固定合并行(写死)
- 动态合并行
- 方法(函数)执行
效果图
公共数据
Html
<el-table :data="tableData" :span-method="changeSpanMethod" borderstyle="width: 100%; margin-top: 20px"><el-table-column prop="department" label="科室" width="168px"></el-table-column><el-table-column prop="name" label="姓名"></el-table-column><el-table-column prop="amount1" label="特色套餐"></el-table-column><el-table-column prop="amount2" label="价格"></el-table-column><el-table-column prop="amount3" label="菜肴名称"></el-table-column><el-table-column prop="amount4" label="制作物料"></el-table-column>
</el-table>
JavaScript
// 数据
tableData: [{department: '急诊大厅',name: '张三',amount1: '桂林米粉套餐',amount2: '5.50',amount3: '米饭',amount4: '水70g'},{department: '急诊大厅',name: '张三',amount1: '桂林米粉套餐',amount2: '5.50',amount3: '油豆腐炒肉',amount4: '猪里脊20g'},{department: '急诊大厅',name: '张三',amount1: '桂林米粉套餐',amount2: '5.50',amount3: '油豆腐炒肉',amount4: '油果50g'},{department: '急诊大厅',name: '张三',amount1: '桂林米粉套餐',amount2: '5.50',amount3: '米饭',amount4: '香米50g'},{department: '急诊大厅',name: '张三',amount1: '桂林米粉套餐',amount2: '5.50',amount3: '油豆腐炒肉',amount4: '葱花2g'},{department: '急诊大厅',name: '王五',amount1: '包子铺',amount2: '1.50',amount3: '水晶包',amount4: '肥肉10g'},{department: '急诊大厅',name: '张三',amount1: '桂林米粉套餐',amount2: '5.50',amount3: '油豆腐炒肉',amount4: '蒜米5g'},{department: '急诊大厅',name: '张三',amount1: '桂林米粉套餐',amount2: '5.50',amount3: '油豆腐炒肉',amount4: '豆油2g'}, {department: '急诊大厅',name: '王五',amount1: '包子铺',amount2: '1.50',amount3: '水晶包',amount4: '糖10g'},{department: '急诊大厅',name: '张三',amount1: '桂林米粉套餐',amount2: '5.50',amount3: '油豆腐炒肉',amount4: '盐2g'},{department: '急诊大厅',name: '张三',amount1: '桂林米粉套餐',amount2: '5.50',amount3: '油豆腐炒肉',amount4: '酱油3g'},{department: '急诊大厅',name: '李四',amount1: '早餐1',amount2: '6.00',amount3: '小米粥',amount4: '香米20g'},{department: '急诊大厅',name: '李四',amount1: '早餐1',amount2: '6.00',amount3: '煎蛋',amount4: '鸡蛋50g'},{department: '急诊大厅',name: '王五',amount1: '包子铺',amount2: '1.50',amount3: '水晶包',amount4: '面粉50g'},{department: '急诊大厅',name: '李四',amount1: '早餐1',amount2: '6.00',amount3: '小米粥',amount4: '水70g'},{department: '急诊大厅',name: '李四',amount1: '早餐1',amount2: '6.00',amount3: '煎蛋',amount4: '油20g'},{department: '急诊大厅',name: '李四',amount1: '早餐1',amount2: '6.00',amount3: '榨菜',amount4: '榨菜20g'}
],
spanConfig: ['department', 'name', 'amount1', 'amount2', 'amount3'],
spanMap: new Map()
数据未排序时(需要合并的行数据未处于相邻位置)
// 排序方法
groupByKeys(keyLis) {let list = this.tableData;let res = list.sort((a, b) => {// localeCompare汉字排序const sor1 = b[keyLis[0]].localeCompare(a[keyLis[0]], 'zh');if (sor1 !== 0) return sor1;return a[keyLis[1]].localeCompare(b[keyLis[1]], 'zh');});this.tableData = res;
}
固定合并行(写死)
changeSpanMethod({row,column,rowIndex,columnIndex
}) {if (columnIndex === 0) {if (rowIndex === 0) {return {rowspan: 11,colspan: 1};} else {return {rowspan: 0,colspan: 0};}}if (columnIndex === 1) {if (rowIndex === 0) {return {rowspan: 8,colspan: 1};} else if (rowIndex === 8) {return {rowspan: 3,colspan: 1};} else {return {rowspan: 0,colspan: 0};}}if (columnIndex === 2) {if (rowIndex === 0) {return {rowspan: 8,colspan: 1};} else if (rowIndex === 8) {return {rowspan: 3,colspan: 1};} else {return {rowspan: 0,colspan: 0};}}if (columnIndex === 3) {if (rowIndex === 0) {return {rowspan: 8,colspan: 1};} else if (rowIndex === 8) {return {rowspan: 3,colspan: 1};} else {return {rowspan: 0,colspan: 0};}}if (columnIndex === 4) {if (rowIndex === 0) {return {rowspan: 1,colspan: 1};} else if (rowIndex === 1) {return {rowspan: 7,colspan: 1};} else if (rowIndex >= 2 && rowIndex <= 7) {return {rowspan: 0,colspan: 0};} else {return {rowspan: 1,colspan: 1};}}
}
动态合并行
// 合并行数计算
calculateSpans() {const spanConfig = this.spanConfig;const tempMap = new Map();spanConfig.forEach(prop => {const spans = [];let position = 0;this.tableData.forEach((item, index) => {if (index === 0) {spans.push(1);position = 0;} else {// 当前行内容与上一行相同if (this.tableData[index][prop] === this.tableData[index - 1][prop]) {spans[position] += 1;spans.push(0);} else {spans.push(1);position = index;}}});tempMap.set(prop, spans);});this.spanMap = tempMap;
}
方法(函数)执行
// 注:一下两个方法执行顺序不能颠倒
// 排序方法执行(如果不需要排序,那就不用执行排序方法)
this.groupByKeys(['name', 'amount3']);
// 计算合并行方法执行
this.calculateSpans();
相关文章:
Web前端之Vue+Element实现表格动态不同列合并多行、localeCompare、forEach、table、push、sort、Map
MENU 效果图公共数据数据未排序时(需要合并的行数据未处于相邻位置)固定合并行(写死)动态合并行方法(函数)执行 效果图 公共数据 Html <el-table :data"tableData" :span-method"chang…...
【教学类-102-07】剪纸图案全套代码07——Python点状虚线优化版本+制作1图2图6图
背景需求: 我觉得这个代码里面的输入信息分离太远(42行和241行),想重新优化一下 【教学类-102-05】蛋糕剪纸图案(留白边、沿线剪)04——Python白色(255)图片转为透明png再制作“点状边框和虚线边框”-CSDN博客文章浏览阅读864次,点赞14次,收藏27次。【教学类-102-0…...
Redis与Lua原子操作深度解析及案例分析
一、Redis原子操作概述 Redis作为高性能的键值存储系统,其原子性操作是保证数据一致性的核心机制。在Redis中,原子性指的是一个操作要么完全执行,要么完全不执行,不会出现部分执行的情况。 Redis原子性的实现原理 单线程模型&a…...
QT中怎么隐藏或显示最大化、最小化、关闭按钮
文章目录 方法一:通过代码动态设置1、隐藏最大化按钮2、隐藏最小化按钮3、隐藏关闭按钮方法 1:移除 WindowCloseButtonHint方法 2:使用 Qt::CustomizeWindowHint 并手动控制按钮 4、同时隐藏最大化和最小化按钮5、同时隐藏最大化和关闭按钮6、…...
OpenSceneGraph相机系统
一、相机的核心原理 Open Scene Graph(OSG)中相机的核心原理围绕视图变换和投影变换展开,结合场景图的层次化结构实现三维空间的动态渲染。 1、视图变换(View Transformation) )视图矩阵的作用…...
KTH5772 系列游戏手柄摇杆专用3D 霍尔位置传感器
产品概述 KTH5772是一款专为游戏手柄上的摇杆应用而设计的3D霍尔磁感应芯片,主要面向对线性度、回报率、灵敏度、功耗要求严格的摇杆应用。KTH5772基于3D霍尔技术,内部分别集成了X轴、Y轴和Z轴三个独立的霍尔元件,能够通过测量和处理磁通密度…...
Soybean Admin 使用tv-focusable兼容电视TV端支持遥控器移动焦点
环境 window10 pnpm 8.15.4 node 8.15.4 vite 5.1.4 soybean admin: 1.0.0 native-ui: 2.38.0 vue-tv-focusable: 2.0.1 小米电视 MIUI TV版本:MiTV OS 2.7.1886(稳定版) 飞视浏览器:https://www.fenxm.com/1220.html这里必须使用飞视浏览器,…...
经济金融最优化:从理论到MATLAB实践——最大利润问题全解析
内容摘要 本文聚焦经济金融领域的最大利润问题,深入探讨不考虑销售影响和考虑销售影响两种情形下的利润最大化模型柯布 - 道格拉斯生产函数等理论构建与求解。 关键词:经济金融;最大利润问题;柯布-道格拉斯生产函数 1. 引言 在…...
大模型学习七:小米8闲置,直接安装ubuntu,并安装VNC远程连接手机,使劲造
一、说明 对于咱们技术人来说,就没有闲的蛋疼的时候,那不是现在机会来了 二、刷机器准备 1、申请解锁手机 申请解锁小米手机https://www.miui.com/unlock/download.html 下载工具,安装下面的步骤来,官网不欺人吧 打开开发者工…...
高可用之战:Redis Sentinal(哨兵模式)
参考:Redis系列24:Redis使用规范 - Hello-Brand - 博客园 1 背景 在我们的《Redis高可用之战:主从架构》篇章中,介绍了Redis的主从架构模式,可以有效的提升Redis服务的可用性,减少甚至避免Redis服务发生完…...
简单括号匹配_栈
课程笔记 10:数据结构(清华) 栈_opnd push-CSDN博客 括号匹配。对于一个表达式,要想确认其中所使用的括号是否匹配,可以采用减而治之的思路,将每对邻近括号消去,则剩下的达式括号匹配当且仅当…...
CSS Grid布局:从入门到放弃再到真香
Flexbox 与 Grid 布局:基础概念与特点 Flexbox Flexbox(Flexible Box Layout),即弹性盒布局模型,主要用于创建一维布局,能够轻松实现元素在一行或一列中的排列、对齐与分布。通过display: flex属性启用 Fl…...
Springboot把外部jar包打包进最终的jar包,并实现上传服务器
1、创建lib目录,把jar包放进这个目录下,然后标记lib目录为“资源根路径”(鼠标右键lib目录->将目录标记为->资源根路径。之后lib文件夹会有如下的图标变化) 文件结构如下: 2、pom文件添加依赖 <dependency…...
仿照管理系统布局配置
1.vue仿照snowy 配置,如下图: 2.代码实现 <template><div class"theme-settings"><!-- 导航栏 --><div class"nav-bar"><el-breadcrumb separator"/"><el-breadcrumb-item>导航设置…...
A2L文件解析
目录 1 摘要2 A2L文件介绍2.1 A2L文件作用2.2 A2L文件格式详解2.2.1 A2L文件基本结构2.2.2 关键元素与声明2.2.3 完整A2L文件示例 3 总结 1 摘要 A2L文件(也称为ASAP2文件)是ECU开发的核心接口文件,用于标定、测量和诊断的关键配置文件&…...
GPT - 因果掩码(Causal Mask)
本节代码定义了一个函数 causal_mask,用于生成因果掩码(Causal Mask)。因果掩码通常用于自注意力机制中,以确保模型在解码时只能看到当前及之前的位置,而不能看到未来的信息。这种掩码在自然语言处理任务(如…...
SpringBoot 数据库MySql的读写分离 多数据源 Shardingsphere高并发优化
介绍 传统的 MySQL 架构中,所有的数据库操作(包括读操作和写操作)都在同一个数据库实例上进行。随着应用程序的规模增长,单一数据库实例可能会成为瓶颈,无法满足高并发的需求。为了优化性能,可以将数据库的…...
适合工程建筑行业的OA系统有什么推荐?
工程行业具有项目周期长、协作链条复杂等特性,传统管理模式下的 “人治”“纸质化” 弊端日益凸显。OA 系统作为数字化管理的核心载体,通过流程标准化、数据可视化,精准解决工程行业项目管理核心痛点。 泛微 e-office 深度聚焦工程场景&#…...
如何使用 DeepSeek 帮助自己的工作?
1. 信息检索 信息检索是获取特定信息的过程,尤其是在大量数据或文本中查找相关内容。这个过程应用广泛,从网页搜索引擎到数据库查询,再到企业内部信息系统。在使用 DeepSeek 或其它类似工具进行信息检索时,可以考虑以下几个重要方…...
python对mysql数据库的操作
现在遇到一个问题如何将数据批量的插入mysql数据库中 基础操作 import asyncio from config import config from mysql_pool import MysqlPoolclass MysqlLoop(object):def __init__(self):self.logger config.loggerself.pool MysqlPool()def loop_query(self, queries):lo…...
MFC案例:利用CFileDialog类选择多个文件的实验
在MFC项目中使用CFileDialog打开文件时,一般的使用场景是选择一个文件,今天我们做一个选择多个文件的实验,运行环境是VS2022。 实验目标:在基于对话框的MFC项目中,通过调用CFileDialog类对象,将选择…...
深入解析栈回溯技术:如何通过异常处理精准定位程序崩溃点
一、栈回溯 1.1 栈回溯的原理 调试程序时,经常发生这类错误: 1.读写某个地址,导致程序崩溃 2.调用某个空函数,导致程序崩溃在异常处理函数中,可以打印出”发生错误瞬间”的所有寄存器。 我们调试时,可以…...
封装uniapp request promise化
uniapp request 封装 一、 封装方法1. 使用 promis 封装 request2. 封装 api 在 api.js3.在要请求的页面 调用 api 一、 封装方法 1. 使用 promis 封装 request const BASE_URL 你的url接口 //比如 http://198.12.3.3/pzexport function request(config {}){let {url,dat…...
重构居家养老安全网:从 “被动响应” 到 “主动守护”
随着全球老龄化加剧,居家养老安全成为社会关注的核心议题。 传统养老模式依赖人工巡检或单一传感器,存在响应滞后、隐私泄露、场景覆盖不足等问题。 由此智绅科技应运而生,七彩喜智慧养老系统构筑居家养老安全网。 而物联网(Io…...
深入理解 GLOG_minloglevel 与 GLOG_v:原理与使用示例
文章目录 深入理解 GLOG_minloglevel 与 GLOG_v:原理与使用示例1. GLOG_minloglevel:最低日志等级控制2. GLOG_v:控制 VLOG() 的详细输出等级3. GLOG_minloglevel 与 GLOG_v 的优先级关系4. 使用示例4.1 基础示例:不同日志等级4.2…...
Unity6下架中国区,团结引擎接棒:这是分裂,还是本地化的开始?
就在近日,一则消息在国内游戏开发圈内迅速传播开来:Unity 6 及其后续版本已在中国大陆及港澳地区下架。这意味着,未来中国用户将无法直接使用 Unity 最新的主线版本。而取而代之的,是由 Unity 中国主导推出的本地化产品 —— 团结…...
ESP8266水位监测以及温湿度数据采集
上面就是ESP8266的引脚图,水温检测使用的是水位监测传感器,温湿度测量使用的是DHT11,DHT11的反应时间是2秒,这里要注意。开发采用Arduino程序 1. 传感器初始化 功能:初始化DHT11温湿度传感器和串口通信。 代码实现&…...
国产信创数据库:PolarDB 分布式版 V2.0,支持集中分布式一体化
阿里云PolarDB数据库管理软件(分布式版)V2.0 ,安全可靠的集中分布式一体化数据库管理软件。点此查看详情https://www.aliyun.com/activity/database/polardbx-v2?spma2c6h.13046898.publish-article.8.44146ffaE0lEWT 立即咨询专家…...
iOS按键精灵辅助工具在游戏开发中的创新应用
一、iOS自动化测试辅助工具 在移动游戏开发领域,iOS按键精灵类辅助工具不同于传统的安卓自动化方案,iOS环境下的自动化测试面临更严峻的技术挑战,但通过创新方法仍可实现精准控制。 # 基于图像识别的智能定位算法示例 def find_button(butt…...
淘宝 API 与 AI 图像识别整合:开启商品主图智能解析新时代
在电商蓬勃发展的当下,淘宝作为行业巨头,承载着海量的商品信息。如何让买家更高效地筛选心仪好物,让卖家精准把握商品展示要点?淘宝 API 与 AI 图像识别技术的整合为这一难题提供了创新性解法,实现对商品主图实时解析&…...
