1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| import { Table, Space, Button, Tag } from 'antd'
function ProductTable({ products = [] }) {
// columns 定义每一列的配置
// title: 表头文字 dataIndex: 对应数据字段名
// sorter: true 启用该列的客户端排序
// filters + onFilter: 启用该列的筛选功能
const columns = [
{ title: 'ID', dataIndex: 'id', sorter: true },
{
title: '名称',
dataIndex: 'name',
filters: [
{ text: '产品A', value: '产品A' },
{ text: '产品B', value: '产品B' },
],
// onFilter:决定每行是否通过筛选
// value 是用户选择的筛选项,record 是当前行数据
onFilter: (value, record) => record.name.indexOf(value) === 0,
},
{
title: '状态',
dataIndex: 'status',
// render:自定义单元格内容,status 是当前单元格的值
render: status => (
<Tag color={status === 'active' ? 'green' : 'red'}>
{status === 'active' ? '上架' : '下架'}
</Tag>
)
},
{
title: '操作',
// render 的第一个参数是整行数据(此处用 _ 占位表示不用)
// 第二个参数 record 是当前行完整数据对象
render: (_, record) => (
<Space>
<Button size="small" onClick={() => handleEdit(record.id)}>编辑</Button>
<Button size="small" danger onClick={() => handleDelete(record.id)}>删除</Button>
</Space>
)
}
]
return (
<Table
columns={columns}
dataSource={products}
rowKey="id" // 指定每一行的唯一 key(对应数据中的 id 字段)
// pagination:分页配置
// pageSize: 每页条数 showSizeChanger: 显示切换每页条数下拉框
pagination={{ pageSize: 10, showSizeChanger: true }}
// onChange:分页、排序、筛选变化时触发
// 参数 pagination / filters / sorter 包含最新状态,可用于请求后端数据
onChange={(pagination, filters, sorter) => {
console.log('分页/筛选/排序变化:', pagination, filters, sorter)
// 实际项目中这里会重新请求后端数据:
// fetchProducts({ page: pagination.current, pageSize: pagination.pageSize, ...filters })
}}
/>
)
}
|