vue中 table 表格进行多行合并

一. 简介

刚入职的小白,公司目前采用的框架是 SpringBoot + Vue . 前段的UI控件是Iview。由于我们的公司Java开发是全栈的。所以前端的工作也交到了我们的手里。但是在项目开发的过程中遇到了一些问题。比如我们想要绘制出下面所示的一种表格页面。不仅需要实现单列的合并,还包括了第二列行的合并。Iview 的官方文档也并没有这种表格的展现及相应的属性。。
在这里插入图片描述
于是就开启了无限搜索模式,可惜效果甚微。当然,也想像大神们那样根据Iview的组件和自己的需求,设计一个table 组件。可能力十分有限。于是 退而求其次 ,尝试着用 原生 table表格进行实现。

二. 实现方法

用 table 表格 实现行合并 ,列合并还是相对简单点的。但那是对写死的数据。如果数据是动态加载的,并且设计到多列中的行合并。对我这种菜鸟来说还是很有难度的~~
幸好,找到了 一些关于 table 表格进行行合并的方法,在经过分析和测试。得到了目前所需要的初级版本(上图所示)。
代码如下所示:
在这里插入图片描述
如下为封装的测试数据:
在这里插入图片描述
目前也只能想到这种解决办法,也希望路过的大神们可以给点建议,如何用Iview组件或者更好的方法去实现这个 table 表格 双列的 行合并的问题。
特此提醒: 实现的这种方法主要是参考 别人的 一个 demo .给大家一个链接。[ 参考链接]

### 实现Ant Design表格多行合并 在Ant Design Vue中,可以通过自定义`render`函数来实现表格中的多行合并。具体来说,在列配置中设置`colSpan`属性可以控制单元格跨多少列显示。 对于批量删除功能,则可以在表头或页面其他位置放置一个按钮用于触发选中项的删除操作。通常会结合`rowSelection`选项来进行多选管理[^1]。 #### 多行合并示例代码 ```vue <template> <a-table :columns="columns" :data-source="dataSource" bordered @change="handleTableChange"> <!-- 自定义渲染 --> <span slot="name" slot-scope="text, record">{{ text }}</span> <!-- 合并逻辑放在组件内部处理 --> <template v-for="(column, index) in columns" #[`${index}`]="{ currentRecord }"> <div :key="currentRecord.key"> {{ currentRecord[column.dataIndex] }} </div> </template> </a-table> </template> <script> export default { data() { return { columns: [ { title: 'Name', dataIndex: 'name' }, { title: 'Age', dataIndex: 'age' } ], dataSource: [] }; }, methods: { handleMerge(rowKey, rowIndex, columnKey) { const result = this.dataSource.reduce((acc, cur, idx) => { if (idx === 0 || acc[idx - 1][columnKey] !== cur[columnKey]) { acc.push({ ...cur }); } else { // 更新上一行的 colspan 属性 Object.assign(acc[acc.length - 1], { _colspan: (acc[acc.length - 1]._colspan || 1) + 1 }); } return acc; }, []); console.log(result); // 返回当前行是否应该被隐藏(即不绘制) return rowKey >= 0 && result[rowIndex]?._colspan > 1 ? false : true; }, handleTableChange(pagination, filters, sorter) {} } }; </script> ``` 上述代码展示了如何通过遍历数据源数组,并利用reduce方法计算每一行是否需要与其他行合并。如果某一行的数据等于前一行相同字段的数据,则增加该字段对应的_colspan计数器;当遇到不同值时重置计数器。最后根据此逻辑决定哪些行应当被实际渲染出来。 #### 添加批量删除按钮的方法教程 为了实现批量删除的功能,首先要在表格上方添加一个多选框控件以便用户可以选择要删除的目标记录。接着创建一个“删除所选项”的按钮链接到相应的事件处理器: ```html <a-button type="primary" danger @click="onDeleteSelected">Delete Selected Items</a-button> ``` 然后修改JavaScript部分如下所示: ```javascript methods: { onDeleteSelected () { let selectedRowKeys = this.$refs.table.selectedRowKeys; // 这里假设有一个API接口用来执行真正的删除动作 deleteItems(selectedRowKeys).then(() => { // 成功后刷新列表视图 this.fetchData(); }).catch(err => { alert('Failed to delete items'); }); // 清除已选择状态 this.$refs.table.clearSelections(); } } ``` 这里的关键在于使用了`selectedRowKeys`获取所有已被勾选项目的键值集合,并将其传递给服务器端进行进一步的操作。完成之后记得调用`clearSelections()`清除现有的选择标记以保持界面整洁。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值