feat(透视表): 表格底部增加每列数量合计行
- 每块透视表底部 summary 行,统计各工序列的设备数合计 + 行总计 - 固定底部,方便查看每列总量
This commit is contained in:
@ -49,7 +49,7 @@ export default function MatrixBoard() {
|
|||||||
const matrixChunks = useMemo(() => {
|
const matrixChunks = useMemo(() => {
|
||||||
const keys = Array.from(new Set(data.map((d) => d.dimension_key)));
|
const keys = Array.from(new Set(data.map((d) => d.dimension_key)));
|
||||||
if (keys.length === 0) return [];
|
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) {
|
for (let i = 0; i < keys.length; i += CHUNK_MATRIX) {
|
||||||
const chunkKeys = keys.slice(i, 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> },
|
{ 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;
|
return chunks;
|
||||||
}, [data]);
|
}, [data]);
|
||||||
@ -159,6 +159,29 @@ export default function MatrixBoard() {
|
|||||||
size="small"
|
size="small"
|
||||||
pagination={false}
|
pagination={false}
|
||||||
scroll={{ x: "max-content" }}
|
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>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user