You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React DataTable中按AKONT字段分组并汇总UM01S金额?

可以实现,具体方案如下:

首先需要在渲染表格前对原始数据按AKONT字段分组并汇总UM01S,再将处理后的数据传入表格组件。以下是具体实现步骤:

1. 数据分组汇总处理

先编写数据处理函数,把response转换成按AKONT分组的结构,同时计算每组的UM01S总和:

// 处理数据:按AKONT分组,汇总UM01S
const processGroupedData = (data) => {
  // 先分组并计算每组总和
  const grouped = data.reduce((acc, item) => {
    const akontKey = item.AKONT;
    if (!acc[akontKey]) {
      acc[akontKey] = {
        groupKey: akontKey,
        items: [],
        totalUM01S: 0,
        // 保留分组公共字段(如BUKRS、WAERS,可根据业务调整)
        BUKRS: item.BUKRS,
        WAERS: item.WAERS
      };
    }
    acc[akontKey].items.push(item);
    // 确保UM01S为数值类型,字符串需先转换
    acc[akontKey].totalUM01S += parseFloat(item.UM01S) || 0;
    return acc;
  }, {});

  // 转换为扁平化数组,支持明细+汇总行的展示
  const result = [];
  Object.values(grouped).forEach(group => {
    // 添加分组汇总行(标记为汇总行,方便渲染区分)
    result.push({
      ...group,
      isTotalRow: true,
      TXT50: "合计",
      KUNNR: "",
      NAME1: ""
    });
    // 添加分组下的所有明细行
    result.push(...group.items);
  });

  return result;
};

// 组件内使用处理后的数据
const processedData = processGroupedData(response);

如果只需要显示分组汇总结果(不展示明细),可以简化处理逻辑:

const processSummaryOnlyData = (data) => {
  const grouped = data.reduce((acc, item) => {
    const akontKey = item.AKONT;
    if (!acc[akontKey]) {
      acc[akontKey] = {
        AKONT: akontKey,
        BUKRS: item.BUKRS,
        WAERS: item.WAERS,
        totalUM01S: 0,
        TXT50: "汇总"
      };
    }
    acc[akontKey].totalUM01S += parseFloat(item.UM01S) || 0;
    return acc;
  }, {});
  return Object.values(grouped);
};

2. 调整表格渲染配置

修改options中的UM01S渲染逻辑,区分汇总行和明细行的样式:

const options = {
  UM01S: (item) => {
    const value = item.isTotalRow ? item.totalUM01S : item.UM01S;
    // 汇总行加粗显示,区分明细
    return <td style={item.isTotalRow ? { fontWeight: 'bold' } : {}}>
      {formatColumn('currency', value)}
    </td>;
  },
  NAME1: (item) => <td>{item.NAME1 + (item.NAME2 || "")}</td>,
};

3. 更新表格数据源

将处理后的数据传入DataTable组件:

<DataTable
   usersData={processedData} // 使用处理后的分组数据
   fields={columns}
   slots={options}
   setCurrentItems={setCurrentItems}
/>

注意事项

  • 确保UM01S是可计算的数值类型,若接口返回字符串需先做类型转换
  • 同一AKONT下的公共字段(如BUKRS、WAERS)若存在不一致,需根据业务需求决定展示规则(如取第一个值、合并显示等)
  • 若使用的DataTable组件自带分组功能,可直接查阅组件文档配置分组规则,无需手动处理数据

内容的提问来源于stack exchange,提问作者Juan Morales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 13:02:34