Ant Design中Table动态获取数据合并单元格问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ant Design中Table动态获取数据合并单元格问题相关的知识,希望对你有一定的参考价值。

参考技术A ant中table动态添加的数据在不能改变表头的情况下对于一部分单元格合并比较难搞,如下

ps:请求拿到的数据是每条都有信息
我需要将相同的商家名称、联系人、及联系电话合并为一条对应后续数据

ps:下图为我想要的格式

表头固定导致对数据再无法进行处理,所以只能在渲染的角度去解决可以参考ant官网table中customRender

customRender方法有三个参数,value为当前行渲染的值,row为本行渲染的所有数据,index为行索引

对当前表头下的值进行筛选,判断重复值,并进行记录,接下来就是合并操作了

假设从第一行开始需要合并两行,我们判断索引值index==0时,rowSpan == 2,注意了这里比较重要的一步操作,我们需要将合并后的行数rowSpan值改为0(index == 1时,rowSpan==0),如果合并3行,则索引index为2时,也需要将rowSpan值归0。

ps:以上仅为个人理解,如有写的不正确的地方欢迎各位大佬批评指正!

ant design V3 实现table表格 添加底部合计行

目录

因 4版本才有 Table.Summary api去实现合计行,那3版本怎么来实现这个功能呢?

实现思路:

完整代码


因 4版本才有 Table.Summary api去实现合计行,那3版本怎么来实现这个功能呢?

实现思路:

  1. 每次分页请求接口,都将接口返回的合计数据和表格的正常数据进行合并,这样数据的最后一条一直都是合计的数据
  2. table的columns的第一个通过索引设置,最后一行显示 '合计'
  3. 将table的pagination设置为false
  4. 使用Pagination组件控制分页

这样就不受table组件的pageSize的控制,导致显示不出合计行了

完整代码

import React,  useState, useEffect, useRef  from 'react'
import defaultPag from '@src/common/defaultPagination'
import  Table, Pagination  from 'antd'
import moment from 'moment'


function CallInReport () 
    const [ tableData, setTableData ] = useState([])
    const [ pagination, setPagination ] = useState(defaultPag( isAdjust: false ))
    const [ loading, setLoading ] = useState(false)

    const queryTableData = async (query = ) => 
        const apiParams = 
            ...query,
            pageNo: query.pageNo || 1,
            pageSize: query.pageSize || pagination.pageSize,
        
        setLoading(true)
        const res = await ajax('xxx', apiParams)
        setLoading(false)
        let paginationNew = 
            ...pagination,
            current: +res.page.pageNo || 1,
            pageSize: +res.page.pageSize || pagination.pageSize,
            total: +res.page.totalSize,
        

        setTableData([ ...res.records, res.total ])
        setPagination(paginationNew)
    

    const columns = [
        
            title: '日期',
            dataIndex: 'date',
            key: 'date',
            fixed: 'left',
            render: (text, record, index) => index === tableData.length - 1 ? '总计' : moment(text).format('YYYY-MM-DD'),
        ,
    ]
    const paginationChange = (page, pageSize) => 
        const params = 
            pageNo: page,
            pageSize: pageSize,
        
        queryTableData(params)
    
    const showSizeChange = (current, size) => 
        const params = 
            pageNo: current,
            pageSize: size,
        
        queryTableData(params)
    

    return (
        <div>
            <Table
                rowKey=(record, index) => `$ index `
                columns=columns
                loading=loading
                scroll= x: 'max-content' 
                dataSource=tableData
                pagination=false
                bordered
            />
            <div className='custom-pagination-container'>
                <Pagination
                    ...pagination
                    onChange=paginationChange
                    onShowSizeChange=showSizeChange
                />
            </div>
        </div>
    )

以上是关于Ant Design中Table动态获取数据合并单元格问题的主要内容,如果未能解决你的问题,请参考以下文章

ant design-Table组件实现每一行某个特定字段连续相同进行行合并。

react ,ant Design UI中table组件合并单元格并展开详情的问题

ant design V3 实现table表格 添加底部合计行

ant design V3 实现table表格 添加底部合计行

ant design V3 实现table表格 添加底部合计行

Ant Design of Vue —— Table表格组件 —— 设置动态表头