简介:antd 是基于 Ant Design 设计体系的 React UI 组件库,主要用于研发企业级中后台产品。
1. 表格根据某个字段进行合并行
问题描述:一个表格需要根据某个字段进行合并行。
实现思路:请求数据成功时,通过自定义方法对数据进行遍历,获取一个对象,该对象包含所需的某个字段的开始索引和总个数,最后在配置 Table 的 column 属性时在 render 函数中进行判断从而实现合并行。
核心代码:
// utils.ts/*** 根据某个字段获取合并表格数据* @param data 数组* @param key 主键* return temp {value: 重复次数, start: 开始的索引}*/export const calcTableMergeRow = (data: Array<any>, key: String) => {const temp = {};data.forEach((v, i) => {const item = v?.[`${key}`];if (!temp.hasOwnProperty(item)) {temp[item] = { value: 1, start: i };} else {temp[item].value += 1;}});return temp;};
// jsx 组件import React, { useState } from 'react';import ProTable from '@ant-design/pro-table';import { getData } from './service';// 封装umi的 request 请求import { calcTableMergeRow } from '@/utils/utils';export default (() => {// 处理合并表格数据const [resultData, setResultData] = useState({});// 表格 column 配置// 此处以字段"ruleCategory"为演示const columns = [{title: '规则大类',dataIndex: 'ruleCategory',render: (ruleCategory, _, index) => {const obj = { children: ruleCategory, props: { rowSpan: 0 } };const temp = resultData[ruleCategory];if (index === temp?.start) {obj.props.rowSpan = temp.value;}return obj;}// ...其他列配置}];// 此处省略其他配置return (<ProTablecolumns={columns}request={params => getData(params)}postData={data => { setResultData(calcTableMergeRow(data, 'ruleCategory')); return data }}/>);});
