feat(透视表): 表格底部增加每列数量合计行

- 每块透视表底部 summary 行,统计各工序列的设备数合计 + 行总计
- 固定底部,方便查看每列总量
This commit is contained in:
2026-08-28 17:00:02 +08:00
parent c3e03bb177
commit c19dbc2e7a

View File

@ -49,7 +49,7 @@ export default function MatrixBoard() {
const matrixChunks = useMemo(() => {
const keys = Array.from(new Set(data.map((d) => d.dimension_key)));
if (keys.length === 0) return [];
const chunks: { columns: any[]; dataSource: any[] }[] = [];
const chunks: { columns: any[]; dataSource: any[]; keys: string[] }[] = [];
for (let i = 0; i < keys.length; i += CHUNK_MATRIX) {
const chunkKeys = keys.slice(i, i + CHUNK_MATRIX);
@ -99,7 +99,7 @@ export default function MatrixBoard() {
{ title: "合计", dataIndex: "row_total", fixed: "right" as const, align: "center" as const, width: 90, render: (v: number) => <span className="font-bold text-blue-600">{v}</span> },
];
chunks.push({ columns, dataSource: Array.from(rowsMap.values()) });
chunks.push({ columns, dataSource: Array.from(rowsMap.values()), keys: chunkKeys });
}
return chunks;
}, [data]);
@ -159,6 +159,29 @@ export default function MatrixBoard() {
size="small"
pagination={false}
scroll={{ x: "max-content" }}
summary={(pageData: readonly any[]) => {
const totals: Record<string, number> = {};
let rowTotal = 0;
for (const row of pageData) {
rowTotal += row.row_total || 0;
for (const k of chunk.keys) totals[k] = (totals[k] || 0) + (row[k] || 0);
}
return (
<Table.Summary fixed>
<Table.Summary.Row>
<Table.Summary.Cell index={0}><span className="font-bold text-gray-800"></span></Table.Summary.Cell>
{chunk.keys.map(k => (
<Table.Summary.Cell key={k} index={0} align="center">
<span className="font-semibold text-gray-700">{totals[k] || 0}</span>
</Table.Summary.Cell>
))}
<Table.Summary.Cell index={0} align="center">
<span className="font-bold text-blue-600">{rowTotal}</span>
</Table.Summary.Cell>
</Table.Summary.Row>
</Table.Summary>
);
}}
/>
</div>
</div>