小程序内表格合并功能实现—行合并

功能介绍:支付宝小程序手写表格实现行内合并,依据动态数据自动计算每次需求合并的值,本次记录行内合并,如果列内合并,同理即可实现

前端技术:grid布局  display:grid

先看实现效果:

axml:

<view class="leasePlanView" style="padding-top:{{systemInfo.statusBarHeight + systemInfo.titleBarHeight + 15}}px"><view class="tableInfo por"><view class="head com_flex_between"><view a:for="{{ tableHead }}" class="item table-item com_font_26">{{item.title}}</view></view><view class="tableContent grid-container"><view a:for="{{ order_detail.billList }}" a:for-index="idx" class="grid-row"><view class="grid-cell com_flex_center">{{item.term}}</view><view class="grid-cell com_flex_center">内容</view><view class="grid-cell com_flex_center {{mergeInfo[idx].shouldMerge ? 'merge-cell-' + mergeInfo[idx].mergeRows : ''}} {{(!mergeInfo[idx].showNormal && !mergeInfo[idx].shouldMerge) ? 'hide-cell' : ''}}"><block a:if="{{mergeInfo[idx].showNormal}}"><view class="com_color_third">-</view></block><block a:elif="{{mergeInfo[idx].shouldMerge}}"><view class="com_flex_center_column com_font_20">我是合并数据</view></block></view><view class="grid-cell com_flex_center_column">内容</view></view></view></view>
</view>

js:

最重要的处理逻辑是processMergeData这个方法,根据实际需求可自行修改,只要是表格合并,处理逻辑都是相通的。

Page({data: {tableHead: [{title: '第一列'},{title: '第二列'},{title: '第三列'},{title: '第四列'}],mergeInfo: [], // 存储合并信息order_detail:{billList:[{term: '1',discountAmount: '',},{term: '2',discountAmount: '',},{term: '3',discountAmount: '100',},{term: '4',discountAmount: '100',},{term: '5',discountAmount: '200',},{term: '6',discountAmount: '200',},{term: '7',discountAmount: '300',},{term: '8',discountAmount: '300',},{term: '9',discountAmount: '300',},{term: '10',discountAmount: '',},{term: '11',discountAmount: '',},{term: '12',discountAmount: '',}]}},onLoad(query) {this.processMergeData();},// 处理合并数据processMergeData() {const { billList } = this.data.order_detail;const mergeInfo = [];// 遍历数据计算需要合并的行for (let i = 0; i < billList.length; i++) {const current = billList[i];if (current.discountAmount === null || !current.discountAmount) {// discountAmount 为 null 时正常显示mergeInfo[i] = {shouldMerge: false,mergeRows: 1,showNormal: true // 添加标记,表示需要正常显示};continue;}console.log(mergeInfo[i],'mergeInfo[i]mergeInfo[i]')// 如果当前行已经被标记为合并,跳过if (mergeInfo[i]) continue;let mergeCount = 1;// 向下查找相同 discountAmount 值的行for (let j = i + 1; j < billList.length; j++) {if (billList[j].discountAmount === current.discountAmount) {mergeCount++;// 标记被合并的行mergeInfo[j] = {shouldMerge: false,mergeRows: 0,showNormal: false};} else {break;}}// 标记合并起始行mergeInfo[i] = {shouldMerge: mergeCount > 1,mergeRows: mergeCount,showNormal: false};}console.log(mergeInfo,'mergeInfo')this.setData({ mergeInfo });}
});

css实现:

重点在grid布局和动态合并行数

.leasePlanView {width: 100%;min-height: 100vh;
}.bill_box{padding: 12rpx 16rpx 0;
}
.tableInfo {padding: 30rpx 16rpx;width: 710rpx;margin: -32rpx auto 0;background-color: white;border-radius: 20rpx;z-index: 2;
}.tableTitle {margin-bottom: 16rpx;padding: 0 14rpx;height: 32rpx;font-family: PingFangSC-Medium, PingFang SC;
}.tableInfo .head {background: rgba(255, 68, 36, 0.05);border-radius: 20rpx 20rpx 0rpx 0rpx;margin-top: 28rpx;border: 1rpx solid #E8E8E8;border-bottom: none;
}
.table-item{height: 85rpx;width: 169rpx;text-align: center;font-family: PingFangSC-Medium, PingFang SC;line-height: 85rpx;
}
.tableInfo .item {font-weight: 500;color: #000000;
}/* 表格边框实现 */
.tableContent{border: 1rpx solid #E8E8E8;display: grid;grid-template-columns: repeat(1, 1fr);
}
.border-bottom{border-bottom: 1rpx solid #E8E8E8;
}
.border-left{border-left: 1rpx solid #E8E8E8;
}
.grid-row:last-child .grid-cell{border-bottom: none;
}
.amount:first-child{border-left: none;
}.returnDate .bottom {font-family: PingFangSC-Regular, PingFang SC;font-weight: 400;color: #666666;line-height: 22rpx;margin-top: 4rpx;
}
.tableInfo .amount {font-weight: 400;flex: auto;position: relative;
}
.tableInfo .totalAmount{width: 169rpx;height: 85rpx;text-align: center;
}.grid-container {display: grid;grid-template-columns: repeat(4, 1fr);border: 1rpx solid #E8E8E8;
}.grid-row {display: contents;
}.grid-cell {padding: 10rpx;border-bottom: 1rpx solid #E8E8E8;border-left: 1rpx solid #E8E8E8;height: 85rpx;text-align: center;
}.grid-cell:first-child {border-left: none;
}/* 动态合并行数的样式 */
.merge-cell-2 {grid-row: span 2;height: 170rpx;
}.merge-cell-3 {grid-row: span 3;height: 255rpx;
}.merge-cell-4 {grid-row: span 4;height: 340rpx;
}.hide-cell {display: none;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42915.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CD19.【C++ Dev】类和对象(10) 日期类对象的成员函数(日期+天数)

目录 日期天数 需要考虑的几个问题 1.天数加在日上,有可能会溢出,需要进位 2.对月进位,也有可能导致月会溢出,需要进位 3.对年进位,需要考虑是否为闰年 代码设计 取得指定月的天数GetMonthDay函数 方法1:if判断或switch/case 方法2:查表 版本1 版本2 operator 初始…

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.3实战案例:在笔记本电脑上运行轻量级LLM

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 实战案例:在笔记本电脑上运行轻量级LLM2.2.3 模型架构设计与实现1. 环境与工具准备1.1 硬件要求1.2 软件栈选择2. 轻量级模型架构设计2.1 模型参数配置2.2 关键技术优化3. 实战流程3.1 数据准备流程3.2…

新手村:逻辑回归-理解04:熵是什么?

新手村&#xff1a;逻辑回归04&#xff1a;熵是什么? 熵是什么? 前置条件 在开始学习逻辑回归中的熵理论之前&#xff0c;需要掌握以下基础知识&#xff1a; 概率论与统计学&#xff1a; 概率分布&#xff08;如伯努利分布、正态分布&#xff09;。条件概率和贝叶斯定理。期…

linux》》docker 、containerd 保存镜像、打包tar、加载tar镜像

Linux》》docker: 默认情况下&#xff0c;Docker镜像保存在/var/lib/docker/目录下。 当您使用docker pull命令从Docker Hub或私有镜像仓库中拉取镜像时&#xff0c;Docker会自动将镜像文件保存在/var/lib/docker/image/目录下。 每个镜像都由一个或多个层组成&#xff0c;这些…

Processor System Reset IP 核 v5.0(vivado)

这个IP的作用&#xff0c;我的理解是&#xff0c;比普通按键复位更加高效灵活&#xff0c;可以配置多个复位输出&#xff0c;可以配置复位周期。 1、输入信号&#xff1a; 重要的信号有时钟clk信号&#xff0c;一般连接到系统时钟&#xff1b;输入复位信号&#xff0c;一般是外…

SQL中累计求和与滑动求和函数sum() over()的用法

[TOC](SQL中累计求和与滑动求和函数sum() over()的用法) 一、窗口函数功能简介 sum(c) over(partition by a order by b) 按照一定规则汇总c的值&#xff0c;具体规则为以a分组&#xff0c;每组内按照b进行排序&#xff0c;汇总第一行至当前行的c的加和值。 sum()&#xff1a…

优雅的开始一个Python项目

优雅的开始一个Python项目 这是我在初始化一个Python项目时&#xff0c;一键生成的项目文件。它自动完成了git初始化、环境管理、日志模块这三件事情&#xff0c;并在最后进入了虚拟环境。 uv安装 uv是一个现代的Python包管理和项目管理工具。uv中文文档 安装uv: # unix: …

【Django】教程-2-前端-目录结构介绍

【Django】教程-1-安装创建项目目录结构介绍 3. 前端文件配置 3.1 目录介绍 在app下创建static文件夹, 是根据setting中的配置来的 STATIC_URL ‘static/’ templates目录&#xff0c;编写HTML模板&#xff08;含有模板语法&#xff0c;继承&#xff0c;{% static ‘xx’ …

Vue 2 探秘:visible 和 append-to-body 是谁的小秘密?

&#x1f680; Vue 2 探秘&#xff1a;visible 和 append-to-body 是谁的小秘密&#xff1f;&#x1f914; 父组件&#xff1a;identify-list.vue子组件&#xff1a;fake-clue-list.vue 嘿&#xff0c;各位前端探险家&#xff01;&#x1f44b; 今天我们要在 Vue 2 的代码丛林…

docker-compese 启动mysql8.0.36与phpmyadmin,并使用web连接数据库

1、找一个文件夹&#xff0c;比如 E:\zqy\file\mysql&#xff0c;cd到这个目录下创建文件docker-compose.yml 2、将下面的代码块复制到docker-compose.yml文件中 version: 3.3 services:mysql:image: mysql:8.0.36container_name: mysqlrestart: alwaysports:- 3306:3306netw…

【Java SE】包装类 Byte、Short、Integer、Long、Character、Float、Double、Boolean

参考笔记&#xff1a;java 包装类 万字详解&#xff08;通俗易懂)_java包装类-CSDN博客 目录 1.简介 2.包装类的继承关系图 3.装箱和拆箱 3.1 介绍 3.2 手动拆装箱 3.3. 自动拆装箱 ​4.关于String类型的转化问题 4.1 String类型和基本类型的相互转化 4.1.1 String —…

《网络安全等级测评报告模版(2025版)》

网络安全等级保护&#xff08;以下简称“等保测评”&#xff09;制度是我国网络安全领域现行的基本制度。所谓等保测评&#xff0c;即具有资质的测评机构&#xff0c;依据国家网络安全等级保护规范规定&#xff0c;按照有关管理规范和技术标准&#xff0c;对等保对象&#xff0…

【零基础入门unity游戏开发——2D篇】2D物理系统 —— 2DEffector效应器

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…

从零开始:使用Luatools工具高效烧录Air780EPM核心板项目的完整指南

本文将深入讲解如何使用Luatools工具烧录一个具体的项目到Air780EPM开发板中。如何使用官方推荐的Luatools工具&#xff08;一款跨平台、命令行驱动的烧录利器&#xff09;&#xff0c;通过“环境配置→硬件连接→参数设置→一键烧录”四大步骤&#xff0c;帮助用户实现Air780E…

SpringMVC的请求与响应

SpringMVC的请求与响应 SpringMVC请求处理流程请求映射和参数绑定RequestMapping注解RequestMapping的属性RequestMapping的请求参数绑定HTML代码JavaBean代码controller代码在控制器中使用原生的ServletAPI对象 SpringMVC响应数据处理及跳转结果跳转方式ModelAndViewServletAP…

【QT继承QLabel实现绘制矩形、椭圆、直线、多边形功能,并且支持修改大小,移动位置,复制,粘贴,删除功能】

文章目录 介绍绘制一个矩形&#xff08;椭圆&#xff09;roi绘制一个多边形roi对矩形roi的缩放&#xff1a;对多边形rio的缩放&#xff08;移动点的位置&#xff09; 介绍 绘制矩形&#xff0c;椭圆&#xff0c;直线实际用的都是是同一个思路&#xff1a;鼠标第一次点击就确定…

3.0 Disruptor的使用介绍(一)

Disruptor: 其官网定义为&#xff1a;“A High Performance Inter-Thread Messaging Library”&#xff0c;即&#xff1a;线程间的高性能消息框架&#xff0c;与Labview的生产者、消费者模型很相似。 其组成部分比较多&#xff0c;先介绍几个常用的概念&#xff1a; …

ubuntu 2204键盘按键映射修改

键盘的按键和实际输出不一致&#xff0c;可以通过以下方法重新修改按键keycode. 1.在终端执行如下命令&#xff1a; xev -event keyboard 上边64是alt_l&#xff0c;但是键盘上对应的super(windows)。 2.vim /usr/share/X11/xkb/keycodes/evdev //<LALT> 64; 注释&l…

【Linux】System V共享内存:零拷贝加速进程通信!

引言 本文深入探讨System V IPC中的共享内存技术&#xff0c;涵盖其原理、操作步骤、实现细节及与其他IPC机制的关系&#xff0c;助力读者全面掌握这一高效进程间通信方式。 &#x1f4dd; 文章总结&#xff1a; 共享内存原理 System V共享内存通过让多个进程共享同一物理内存区…

UE4学习笔记 FPS游戏制作31 显示计分板

一 制作计分板 创建一个RankPanel的UI蓝图 在蓝图里拖入如下物体 覆层&#xff08;layout&#xff09;&#xff1a;让子物体跟随自己缩放&#xff0c;子物体需要设置为拉伸模式&#xff0c;有点类似于的panel&#xff0c;本身只是一个容器 调整各个物体 覆层&#xff1a; 锚…