vue3表格数据分2个表格序号连续展示

server/2025/2/1 10:38:05/

一、el-table表格在弹窗里面分两个表格展示。

假设我们有一个数组 tableData,我们希望在第一个表格中展示前半部分的数据,第二个表格中展示后半部分的数据。

javascript"><template><el-button type="primary" @click="dialogVisible = true">打开弹窗</el-button><el-dialogtitle="表格展示"v-model="dialogVisible"width="80%":before-close="handleClose"><!-- 第一个表格 --><el-table:data="firstTableData"borderstyle="width: 100%; margin-bottom: 20px"><el-table-column prop="date" label="日期" width="180"></el-table-column><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="address" label="地址"></el-table-column></el-table><!-- 第二个表格 --><el-table:data="secondTableData"borderstyle="width: 100%"><el-table-column prop="date" label="日期" width="180"></el-table-column><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="address" label="地址"></el-table-column></el-table><template #footer><span class="dialog-footer"><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary" @click="dialogVisible = false">确定</el-button></span></template></el-dialog>
</template><script>
export default {data() {return {dialogVisible: false,tableData: [{date: '2024-01-01',name: '张三',address: '上海市浦东新区',},{date: '2024-01-02',name: '李四',address: '北京市海淀区',},{date: '2024-01-03',name: '王五',address: '广州市天河区',},{date: '2024-01-04',name: '赵六',address: '深圳市南山区',},],};},computed: {// 计算第一个表格的数据(前半部分)firstTableData() {return this.tableData.slice(0, this.tableData.length / 2);},// 计算第二个表格的数据(后半部分)secondTableData() {return this.tableData.slice(this.tableData.length / 2);},},methods: {handleClose(done) {this.$confirm('确认关闭?').then(() => {done();}).catch(() => {});},},
};
</script>

代码解析

  1. 数据切分

    • 使用 computed 属性 firstTableDatasecondTableData 来分别计算两个表格的数据。

    • firstTableData:通过 slice(0, this.tableData.length / 2) 获取数组的前半部分。

    • secondTableData:通过 slice(this.tableData.length / 2) 获取数组的后半部分。

  2. 表格绑定

    • 第一个表格绑定到 firstTableData

    • 第二个表格绑定到 secondTableData

  3. 弹窗控制

    • 使用 el-dialog 控制弹窗的显示与隐藏。

    • 在弹窗底部添加操作按钮,控制弹窗的关闭。

扩展功能

  • 动态分组: 如果需要根据某些条件动态分组数据,可以在 computed 属性中添加逻辑。例如,根据 namedate 将数据分组。

  • 筛选功能: 可以在弹窗中添加筛选功能,允许用户选择展示哪些数据。

  • 分页功能: 如果数据量较大,可以在每个表格下方添加 el-pagination 组件来实现分页功能。

通过上述实现,你可以在一个弹窗中展示同一个数组的不同部分,满足不同的展示需求。

二、序号连续起来

javascript"><template><el-button type="primary" @click="dialogVisible = true">打开弹窗</el-button><el-dialogtitle="表格展示"v-model="dialogVisible"width="80%":before-close="handleClose"><!-- 第一个表格 --><el-table:data="firstTableData"borderstyle="width: 100%; margin-bottom: 20px"><el-table-columnprop="index"label="序号"width="60"></el-table-column><el-table-column prop="date" label="日期" width="180"></el-table-column><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="address" label="地址"></el-table-column></el-table><!-- 第二个表格 --><el-table:data="secondTableData"borderstyle="width: 100%"><el-table-columnprop="index"label="序号"width="60"></el-table-column><el-table-column prop="date" label="日期" width="180"></el-table-column><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="address" label="地址"></el-table-column></el-table><template #footer><span class="dialog-footer"><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary" @click="dialogVisible = false">确定</el-button></span></template></el-dialog>
</template><script>
export default {data() {return {dialogVisible: false,tableData: [{ date: '2024-01-01', name: '张三', address: '上海市浦东新区' },{ date: '2024-01-02', name: '李四', address: '北京市海淀区' },{ date: '2024-01-03', name: '王五', address: '广州市天河区' },{ date: '2024-01-04', name: '赵六', address: '深圳市南山区' },{ date: '2024-01-05', name: '孙七', address: '杭州市西湖区' },{ date: '2024-01-06', name: '周八', address: '成都市武侯区' },],};},computed: {firstTableData() {return this.tableData.slice(0, this.tableData.length / 2).map((item, index) => ({...item,index: index + 1, // 添加序号}));},secondTableData() {return this.tableData.slice(this.tableData.length / 2).map((item, index) => ({...item,index: index + 1 + this.tableData.length / 2, // 添加序号}));},},methods: {handleClose(done) {this.$confirm('确认关闭?').then(() => {done();}).catch(() => {});},},
};
</script>

代码解析

  1. 计算序号

    • computed 属性中,我们分别处理 firstTableDatasecondTableData

    • 使用 map 方法为每个表格的数据添加一个 index 属性。

    • 第一个表格的序号从 1 开始。

    • 第二个表格的序号从第一个表格的最后一个序号加 1 开始。

  2. 表格列绑定

    • 使用 prop="index" 绑定序号列,确保序号在表格中正确显示。

测试结果

假设 tableData 包含 6 条数据,第一个表格显示前 3 条,第二个表格显示后 3 条。序号将如下显示:

  • 第一个表格

    • 序号:1, 2, 3

  • 第二个表格

    • 序号:4, 5, 6

三、 将会遇到问题

当数据为单数时,第一条数据会切割到了右边表格,左边表格无数据。

同时,如果后台数据返回单数时,序号会出现1.5、2.5、3.5这样的。

四、解决

1、分析

当数据为单数时,第一条数据会切割到了右边表格,左边表格无数据。

原因是slice切割的时候,如果数据为单数,比如1条数据,左边表格:

javascript">this.tableData.slice(0, this.tableData.length / 2).map((item, index) => ({...item,index: index + 1, // 添加序号}));

slice(0, 0.5)就没切到数据,因为slice第二个参数取开区间,拿不到右边那个数的位置。然后右边表格:

javascript">this.tableData.slice(this.tableData.length / 2).map((item, index) => ({...item,index: index + 1 + this.tableData.length / 2, // 添加序号}));

slice(0.5)就是取后面的数据,就是取包括0.5位置在内的往后面的数据。

所以有且仅有一条数据时,就跑到了右边表格,左边表格没数据。

2、例如

javascript">const arr = [1, 2, 3, 4, 5]console.log(arr.slice(2, 4))    // [3, 4]console.log(arr.slice(1))    // [2, 3, 4, 5] 

3、解决一条数据数据跑到右边表格问题

3.1 切割时数据向上取整

 切割之后应该向上取整。比如,如果一条数据,左边表格:

this.tableData.slice(0, Math.ceil(this.tableData.length / 2)),也就是slice(0, 1),也就是切割到唯一一条数据。

右边表格:

this.tableData.slice(Math.ceil(this.tableData.length / 2)),slice(1),无数据。

这样就能解决只有一条数据时,会跑到右边表格的问题。

3.2 序号这里也要向上取整

原本连续序号实现方式:

javascript">computed: {firstTableData() {return this.tableData.slice(0, this.tableData.length / 2).map((item, index) => ({...item,index: index + 1, // 添加序号}));},secondTableData() {return this.tableData.slice(this.tableData.length / 2).map((item, index) => ({...item,index: index + 1 + this.tableData.length / 2, // 添加序号}));},},

因为现在切割时向上取整,序号位置也要.

3.3 最终逻辑:
javascript">computed: {firstTableData() {return this.tableData.slice(0, Math.ceil(this.tableData.length / 2)).map((item, index) => ({...item,index: index + 1, // 添加序号}));},secondTableData() {return this.tableData.slice(Math.ceil(this.tableData.length / 2)).map((item, index) => ({...item,index: index + 1 + Math.ceil(this.tableData.length / 2), // 添加序号}));},},

4、拓展

如果想通过向下取整的方式实现,会发现有问题,大家有兴趣可以试试。

以上就是实现vue3表格数据分2个表格且序号连续展示的全过程以及解决相关问题。


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

相关文章

【matlab】绘图 离散数据--->连续函数

matlab绘图练习 离散数据及离散函数对离散区间进行细划分 达到连续效果画plot(y)图 与 复数的应用 离散数据及离散函数 例1 x1[1 2 4 6 7 8 10 11 12 14 16 17 18 20] y1[1 2 4 6 7 8 10 10 8 7 6 4 2 1] figure(1); plot(x1,y1,o,MarkerSize,15); x21:20; y2log(x2); figure…

Day50:字典的合并

在 Python 中&#xff0c;字典是一个可变的数据类型&#xff0c;经常需要将多个字典合并成一个字典。合并字典的方式有多种&#xff0c;今天我们将学习几种常见的方法。 1. 使用 update() 方法合并字典 update() 方法可以用来将一个字典中的键值对添加到另一个字典中。如果目…

图像处理之图像灰度化

目录 1 图像灰度化简介 2 图像灰度化处理方法 2.1 均值灰度化 2.2 经典灰度化 2.3 Photoshop灰度化 2.4 C语言代码实现 3 演示Demo 3.1 开发环境 3.2 功能介绍 3.3 下载地址 参考 1 图像灰度化简介 对于24位的RGB图像而言&#xff0c;每个像素用3字节表示&#xff0…

宇宙大爆炸是什么意思

根据宇宙大爆炸学说&#xff0c;宇宙间的一切都在彼此远离&#xff0c;而且距离越远&#xff0c;远离的速度越快。我们只能在地球上观察这种现象&#xff0c;而我们观察到的速度符合如下公式&#xff0c;其中 为哈勃常数&#xff0c; 为距离&#xff0c; 为速度&#xff08;…

spring mvc 创建restapi 笔记

RestController RequestMapping("/spittles") public class SpittleController {// 示例&#xff1a;使用 RequestBody 接收 JSON 并自动转换为 Spittle 对象PostMappingpublic Spittle saveSpittle(RequestBody Spittle spittle) {// 此时 Spring 已经把请求体中的 …

【JAVA实战】如何使用 Apache POI 在 Java 中写入 Excel 文件

大家好&#xff01;&#x1f31f; 在这篇文章中&#xff0c;我们将带你深入学习如何使用 Apache POI 在 Java 中编写 Excel 文件的技巧&#xff01;&#x1f4ca;&#x1f4da; 如果你是 Java 开发者&#xff0c;或者正在探索如何处理 Excel 文件的数据&#xff0c;那么这篇文章…

【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)

羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_8264829…

MySQL注入中load_file()函数的使用

前言 在Msql注入中&#xff0c;load_file()函数在获得webshell以及提权过程中起着十分重要的作用&#xff0c;常被用来读取各种配置文件 而load_file函数只有在满足两个条件的情况下才可以使用&#xff1a; 文件权限&#xff1a;chmod ax pathtofile 文件大小&#xff1a;必须…