Vue2 带纵向合并的原生表格实现切割侧栏分页

news2024/12/23 10:43:54

文章目录

  • 前言
  • 一、目标效果
  • 二、失败方案
  • 三、正确方案
  • 四、解决正确方案中的一个Bug
  • 总结


前言

前端表格分页.
带纵向合并的表格, 到达固定行数强制分页, 截断本页纵向合并, 在下页展示该纵向列的剩余部分, 代码多为前端数据处理, 所以仅提供思路.
这并不难, 你可以直接看第三节.


一、目标效果

未分页状态:

在这里插入图片描述

红线以上为表头, 这看起来似乎不复杂, 主要问题是需要分页, 而且是以右侧的那种小行为单位, 43行为一页, 而左侧 id colspan并不固定, 没有人知道这次请求的数据会有几个在这一栏.

分页状态:
如果左侧长栏受到分页切割, 那么应该在两页均显示这一栏, 就像这样:

在这里插入图片描述


二、失败方案

起初的方案先依据id属性对包含所有数据的大数组做切分, 先把分段做出来, 计算每段的小计加入段末, 之后根据段数组长定制每段idcolspan进而得到tagcolspan, 将colspan作为一个特殊的属性(我用的是idColspan)添加给每个段数组的第一个元素, 即加给每段第一行的行数据对象.
之后将标记了段首colspan并增加了段尾小计行的所有分段数据拆解, 重新组合为一个大数组, 分页后直接v-for遍历生成每页, 遍历时v-if, 若该行存在标记了colspan的特殊属性或者标记了小计行的特殊属性, 那么单独使用一种渲染方案:

<tr> <!-- 每段作为一个tr -->
  <template v-for="(row, rowIndex) in tableData">
    <td v-if="row.xj" :key></td> <!-- 小计行渲染方案 -->
    <td v-else-if="row.idColspan" :key :colspan="idColspan"></td> <!-- id行渲染方案 -->
    <td v-else :key></td>
  </template>
</tr>

这套方案不分页是没有任何问题的…
渲染起来倒也很方便, 直到做完这一套…分页之后彻底崩了.
如果长侧栏被切, 第二页起头就会因为缺少idtag格而错乱.


三、正确方案

主要区别就是在分页之后才进行了分段, 而非先分段再分页.

段肯定是要分的, 因为小计行需要在前端计算并且加到数据里, 段长固定还好, 段长不固定情况下不分段直接算有点难规划.

每一条数据有一个saName属性, 所有saName属性相同的数据在数组中都相邻并成段分布.

应该对每一行对象都加上它们所属的id, 比如第8行对应的id为2, 那么第八行的id属性值为2, tag也是, 每行都加, 一定要在这里加, 不要分页之后, 不然每页你id都从1开始…

然后在数据的段形态下计算并加小计行到正确位置, 这个不说了, 但是一定要在分页前把小计算好加进去.

加完之后还是拆, 把所有加了小计行的段数组合并成一个大数组, 依据pageSize进行分页.

分页之后, 在每页的基础上计算idtagcolspan, 就不用担心分页后长栏被切了.

然后开始做每页的长栏, 提取这页的所有id值种类(比如这是第三页, id只有4, 5, 6这三种), 你必须提取而不是直接用刚开始的那个包含所有id种类的数组, 那会报undefined,
可以用以下:

const idArr = Array.from(new Set(xxx.map(item => item.id)))

然后依据id种类数组将本页的这些总数据进行分段, 根据段数组长度来判定idcolspan值, 作为一个特殊属性(比如我写的那个idColspan)加给每段的第一个行数据对象, 这样渲染的时候还是老套路直接一个template里面三种方案, 根据当前受遍历行具备何种特殊属性来判定合适的渲染方案.


四、解决正确方案中的一个Bug

这种方案看着很完美, 但是还有一个小Bug, 因为tagcolspan是比idcolspan小1的, 要给小计行腾一个colspan出来, 所以我想你可能会向我一样直接减了一个1就赋值了, 然后你就发现…

如果这一页的末尾对一个段进行了切割, 也就是这一页的最后一行不是小计行, 那么最后一行是不正确的, 一个正常的数据行会占据原本小计的位置.

解决方法也很简单, 我们对当页数据分段的时候不是设置了tagcolspan吗? 判定一下, 如果当前段的最后一行不是小计行, 即不具备"xj"属性, 那么我们不需要给小计行留空位, 令tagcolspan等于idcolspan即可完美实现.


总结

如果它帮到你, 我很高兴.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式系统-开关机测试笔记

在嵌入式系统中,产品在出厂前需要对开发板的开关机进行测试,用于验证产品在大量次数的开关机过程中是否出现异常.实现方法如下: 1.电源准备 我们不可能完全人工操作,太耽误时间和效率.在这里我选用了一款稳压源GW INSTEK GPD 3303这款产品支持串口编程控制,花了一些时间编写了…

智能车图像处理去畸变+逆透视教程

逆透视请参考&#xff1a;智能车逆透视教程(含上位机、源码)_LoseHu的博客-CSDN博客 去畸变请参考&#xff1a;智能车去畸变教程(含上位机、源码)_LoseHu的博客-CSDN博客 逆透视去畸变&#xff1a;如下 1.简介 在前两个博文中已经分别说明了单独去畸变、逆透视的方法。为了同…

web前端进阶之一些动画

1.字体图标的基本使用 首先下载iconfont文件夹&#xff0c;用link标签引入&#xff0c;使用如下&#xff1a; <i class"iconfont icon-favorites-fill green"></i> //改样式的话使用iconfont或者使用 .green(自己设置的类名) .iconfont {font-size: 60…

React.memo 和 useMemo 的使用

文章の目录问题背景useMemo 进行优化React.memo 进行优化props的值是基本类型props的值是引用类型写在最后问题背景 大家在使用 React 框架进行开发时一定遇到过以下问题&#xff1a; 当函数式组件中的某一状态改变&#xff0c;整个组件刷新&#xff0c;重新渲染在类组件中 s…

解决虚拟机下 “Linux和Windows之间复制粘贴” 的问题

大家在安装完虚拟机后&#xff0c;其实很多东西都还是要跟Windows打交道的&#xff0c;比如像Linux下某个软件的环境配置&#xff0c;你在Linux下遇到种种问题&#xff0c;这时你已习惯回到Windows下&#xff0c;默默的打开了“一亿名程序员都在用的CSDN平台”&#xff0c;找到…

腾讯疯狂招人,肝完自动化测试这关,20k+妥了

前言 对于程序员来说&#xff0c;BAT 为首的一线互联网公司肯定是自己的心仪对象&#xff0c;毕竟能到这些大厂工作&#xff0c;不仅薪资高待遇好&#xff0c;而且能力技术都能够得到提升&#xff0c;最关键的是还能够给自己镀上一层金&#xff0c;让人瞻仰。 最近很多同行群…

测试开发工程师到底是做什么的?

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

本地电脑搭建SFTP服务器,并实现公网访问

1. 搭建SFTP服务器 1.1 下载 freesshd 服务器软件 下载地址&#xff1a;freeSSHd and freeFTPd image_1gbuejept12741719ta61ubn8ej9.png-63.1kB 选择freeFTPD.exe下载 下载后&#xff0c;点击安装 image_1gbueks891c258ee2o315kmf9m.png-57.7kB 安装之后&#xff0c;它会提…

Reactor反应器模式

单线程Reactor反应器模式 在事件驱动模式中&#xff0c;当有事件触发时&#xff0c;事件源会将事件dispatch分发到handler处理器进行事件处理。反应器模式中的反应器角色&#xff0c;类似于事件驱动模式中的dispatcher事件分发器角色。 在反应器模式中&#xff0c;有Reactor反…

企业进行高质量数据管理,实施数据治理的关键是什么?

随着数据通过各种方式创造了巨大价值&#xff0c;各领域的企业开始不断挖掘数据的作用&#xff0c;数据的重要性得到了社会各界的共同认可。像我们熟知的数据治理、数据管理、数据标准以及数据资产都是因为数据地位不断提升&#xff0c;企业开始重视起数据全生命周期流程&#…

SpringBoot笔记(一)核心内容

官网&#xff1a;https://spring.io/projects/spring-boot Spring Boot可以轻松创建独立的、基于Spring的生产级应用程序&#xff0c;它可以让你“运行即可”。大多数Spring Boot应用程序只需要少量的Spring配置。 SpringBoot功能&#xff1a; 创建独立的Spring应用程序直接嵌…

2022.11.1 固体物理

Drude Model 原子由原子核和核外电子组成 我们首先看一下不同材料的自由电子密度 知道原子数目基本就知道了核外电子的数目 如果是单位体积内的&#xff0c;知道密度&#xff0c;我们就可以知道质量&#xff0c;根据摩尔质量和阿伏伽德罗常数&#xff0c;我们就可以知道原子…

网络层——IP协议

网络层 网络层概述 网络层主要考虑数据传输的路上问题&#xff0c;在复杂的网络环境中确定一个合适的路径。 网络层设计要尽量简单&#xff0c;向上层只提供简单灵活的、无连接的、不保证可靠性的数据报服务。网络层不提供服务质量的承诺&#xff01; IP 数据报的格式 如何分…

计算机网络---第四章网络层---ipv4---选择题

9# 1IPV4在第一个4B&#xff0c;5678位。当它为0101时&#xff0c;表示首部长度为5420B&#xff0c;这也是最常见的。当它为1111时&#xff0c;表示首部长度为15460B&#xff0c;此时加上了可选字段40B 2协议字段在第三个4B的9到16位&#xff0c;表示IP的上层协议&#xff0c;…

聚观早报 | 吉利汽车拟将极氪独立上市;比亚迪斥资近50亿元造船

今日要闻&#xff1a;吉利汽车拟将极氪独立上市&#xff1b;比亚迪斥资近50亿元造船&#xff1b;华硕开设首个AI智能工厂&#xff1b;升级款Mac将于明年3月推出&#xff1b;世界互联网大会将于11月9日举行吉利汽车拟将极氪独立上市 10 月 31 日消息&#xff0c;吉利汽车午间在港…

个人设计web前端大作业——HTML+CSS华为官网首页

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

【Java 数据结构】顺序表

篮球哥温馨提示&#xff1a;编程的同时不要忘记锻炼哦&#xff01;我们不过是普通人&#xff0c;只不过在彼此眼中闪闪发光 目录 1、什么是顺序表&#xff1f; 2、模拟实现ArrayList 2.1 模拟实现前的约定 2.2 构造方法 2.3 add方法 2.4 contains 方法 2.5 indexOf 方法…

Python量化初学者入门必备,如何入门Python量化交易?

前言 量化可以简单分为数据管理、策略分析和策略执行三个模块&#xff0c;数据是基础&#xff0c;策略分析是核心&#xff0c;其中策略自动化执行&#xff08;算法交易&#xff09;在国内由于政策限制实施起来比较麻烦。&#xff08;文末送福利&#xff09; 从Python的角度看…

Centos8.2编译安装Nginx

一、介绍 1、Nginx 简介 Nginx 是一个高性能的 HTTP 和反向代理 WEB 服务器&#xff0c;除它之外 Apache、Tomcat、Jetty、IIS&#xff0c;它们都是 WEB 服务器&#xff0c;或者叫做 WWW &#xff08;World Wide Web&#xff09;服务器&#xff0c;相应的也都具备 WEB 服务器的…

服务器的管理IIS 6.0

IIS 6.0 和 Windows Server 2003在网络应用服务器的管理、可用性、可靠性、安全性、性能与可扩展性方面提供了许多新的功能。IIS 6.0同样增强了网络应用的开发与国际性支持。IIS 6.0和 Windows Server 2003提供了最可靠的、高效的、连接的、完整的网络服务器解决方案。 中文名I…