mirror of
https://github.com/ant-design/ant-design.git
synced 2024-12-25 16:58:00 +08:00
158 lines
3.6 KiB
TypeScript
158 lines
3.6 KiB
TypeScript
import React from 'react';
|
|
import { Flex, Table, Typography } from 'antd';
|
|
import type { TableColumnsType } from 'antd';
|
|
import { createStyles } from 'antd-style';
|
|
|
|
const useStyle = createStyles(({ css, token }) => {
|
|
const { antCls } = token;
|
|
return {
|
|
customTable: css`
|
|
${antCls}-table {
|
|
${antCls}-table-container {
|
|
${antCls}-table-body,
|
|
${antCls}-table-content {
|
|
scrollbar-width: thin;
|
|
scrollbar-color: unset;
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
};
|
|
});
|
|
|
|
const { Text } = Typography;
|
|
|
|
interface DataType {
|
|
key: string;
|
|
name: string;
|
|
borrow: number;
|
|
repayment: number;
|
|
}
|
|
|
|
interface FixedDataType {
|
|
key: React.Key;
|
|
name: string;
|
|
description: string;
|
|
}
|
|
|
|
const columns: TableColumnsType<DataType> = [
|
|
{
|
|
title: 'Name',
|
|
dataIndex: 'name',
|
|
},
|
|
{
|
|
title: 'Borrow',
|
|
dataIndex: 'borrow',
|
|
},
|
|
{
|
|
title: 'Repayment',
|
|
dataIndex: 'repayment',
|
|
},
|
|
];
|
|
|
|
const dataSource: DataType[] = [
|
|
{
|
|
key: '1',
|
|
name: 'John Brown',
|
|
borrow: 10,
|
|
repayment: 33,
|
|
},
|
|
{
|
|
key: '2',
|
|
name: 'Jim Green',
|
|
borrow: 100,
|
|
repayment: 0,
|
|
},
|
|
{
|
|
key: '3',
|
|
name: 'Joe Black',
|
|
borrow: 10,
|
|
repayment: 10,
|
|
},
|
|
{
|
|
key: '4',
|
|
name: 'Jim Red',
|
|
borrow: 75,
|
|
repayment: 45,
|
|
},
|
|
];
|
|
|
|
const fixedColumns: TableColumnsType<FixedDataType> = [
|
|
{
|
|
title: 'Name',
|
|
dataIndex: 'name',
|
|
fixed: true,
|
|
width: 100,
|
|
},
|
|
{
|
|
title: 'Description',
|
|
dataIndex: 'description',
|
|
},
|
|
];
|
|
|
|
const fixedDataSource = Array.from({ length: 20 }).map<FixedDataType>((_, i) => ({
|
|
key: i,
|
|
name: ['Light', 'Bamboo', 'Little'][i % 3],
|
|
description: 'Everything that has a beginning, has an end.',
|
|
}));
|
|
|
|
const App: React.FC = () => {
|
|
const { styles } = useStyle();
|
|
return (
|
|
<Flex vertical gap="small">
|
|
<Table<DataType>
|
|
bordered
|
|
className={styles.customTable}
|
|
columns={columns}
|
|
dataSource={dataSource}
|
|
pagination={false}
|
|
summary={(pageData) => {
|
|
let totalBorrow = 0;
|
|
let totalRepayment = 0;
|
|
pageData.forEach(({ borrow, repayment }) => {
|
|
totalBorrow += borrow;
|
|
totalRepayment += repayment;
|
|
});
|
|
return (
|
|
<>
|
|
<Table.Summary.Row>
|
|
<Table.Summary.Cell index={0}>Total</Table.Summary.Cell>
|
|
<Table.Summary.Cell index={1}>
|
|
<Text type="danger">{totalBorrow}</Text>
|
|
</Table.Summary.Cell>
|
|
<Table.Summary.Cell index={2}>
|
|
<Text>{totalRepayment}</Text>
|
|
</Table.Summary.Cell>
|
|
</Table.Summary.Row>
|
|
<Table.Summary.Row>
|
|
<Table.Summary.Cell index={0}>Balance</Table.Summary.Cell>
|
|
<Table.Summary.Cell index={1} colSpan={2}>
|
|
<Text type="danger">{totalBorrow - totalRepayment}</Text>
|
|
</Table.Summary.Cell>
|
|
</Table.Summary.Row>
|
|
</>
|
|
);
|
|
}}
|
|
/>
|
|
<Table<FixedDataType>
|
|
className={styles.customTable}
|
|
columns={fixedColumns}
|
|
dataSource={fixedDataSource}
|
|
pagination={false}
|
|
scroll={{ x: 2000, y: 500 }}
|
|
bordered
|
|
summary={() => (
|
|
<Table.Summary fixed>
|
|
<Table.Summary.Row>
|
|
<Table.Summary.Cell index={0}>Summary</Table.Summary.Cell>
|
|
<Table.Summary.Cell index={1}>This is a summary content</Table.Summary.Cell>
|
|
</Table.Summary.Row>
|
|
</Table.Summary>
|
|
)}
|
|
/>
|
|
</Flex>
|
|
);
|
|
};
|
|
|
|
export default App;
|