简介:antd 是基于 Ant Design 设计体系的 React UI 组件库,主要用于研发企业级中后台产品。

1. 表格根据某个字段进行合并行

问题描述:一个表格需要根据某个字段进行合并行。
实现思路:请求数据成功时,通过自定义方法对数据进行遍历,获取一个对象,该对象包含所需的某个字段的开始索引和总个数,最后在配置 Tablecolumn 属性时在 render 函数中进行判断从而实现合并行。
核心代码:

  1. // utils.ts
  2. /**
  3. * 根据某个字段获取合并表格数据
  4. * @param data 数组
  5. * @param key 主键
  6. * return temp {value: 重复次数, start: 开始的索引}
  7. */
  8. export const calcTableMergeRow = (data: Array<any>, key: String) => {
  9. const temp = {};
  10. data.forEach((v, i) => {
  11. const item = v?.[`${key}`];
  12. if (!temp.hasOwnProperty(item)) {
  13. temp[item] = { value: 1, start: i };
  14. } else {
  15. temp[item].value += 1;
  16. }
  17. });
  18. return temp;
  19. };
  1. // jsx 组件
  2. import React, { useState } from 'react';
  3. import ProTable from '@ant-design/pro-table';
  4. import { getData } from './service';// 封装umi的 request 请求
  5. import { calcTableMergeRow } from '@/utils/utils';
  6. export default (() => {
  7. // 处理合并表格数据
  8. const [resultData, setResultData] = useState({});
  9. // 表格 column 配置
  10. // 此处以字段"ruleCategory"为演示
  11. const columns = [
  12. {
  13. title: '规则大类',
  14. dataIndex: 'ruleCategory',
  15. render: (ruleCategory, _, index) => {
  16. const obj = { children: ruleCategory, props: { rowSpan: 0 } };
  17. const temp = resultData[ruleCategory];
  18. if (index === temp?.start) {
  19. obj.props.rowSpan = temp.value;
  20. }
  21. return obj;
  22. }
  23. // ...其他列配置
  24. }
  25. ];
  26. // 此处省略其他配置
  27. return (
  28. <ProTable
  29. columns={columns}
  30. request={params => getData(params)}
  31. postData={data => { setResultData(calcTableMergeRow(data, 'ruleCategory')); return data }}
  32. />
  33. );
  34. });