大部分由ChatGpt和Cursor写的,留着自己看的
# React DataTable 组件
一个功能强大、灵活的 React 表格组件,支持多种数据类型、筛选、编辑、批量操作等功能。
## 目录
1. [功能特性](#功能特性)
2. [安装](#安装)
3. [基础用法](#基础用法)
4. [API 文档](#api-文档)
5. [数据类型](#数据类型)
6. [高级功能](#高级功能)
7. [注意事项](#注意事项)
## 功能特性
- 🔄 支持多种数据类型的展示和编辑
- 🔍 强大的筛选系统(按选项/条件筛选)
- ✏️ 单元格选择和批量操作
- 📊 灵活的列配置
- 📱 响应式设计
- 🖼️ 图片上传和预览
- 📥 数据导入导出
- 📊 统计面板
- ↩️ 操作撤销
- 🔒 权限控制
## 安装
```bash
npm install @your-org/react-datatable
import DataTable from '@your-org/react-datatable';
const App = () => {
const columns = [
{
field: 'name',
headerName: '名称',
type: 'string',
editable: true
},
{
field: 'price',
headerName: '价格',
type: 'currency',
precision: 2,
prefix: '¥'
}
];
const data = [
{ id: '1', name: '商品1', price: '99.99' },
{ id: '2', name: '商品2', price: '199.99' }
];
return (
<DataTable
tableName="商品列表"
columns={columns}
data={data}
onCellUpdate={(rowId, field, value) => {
console.log(`更新: ${rowId}, ${field}, ${value}`);
}}
/>
);
};
属性名 | 类型 | 说明 |
---|---|---|
columns | array | 列定义配置 |
data | array | 表格数据 |
tableName | string | 表格名称 |
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
tableClassName | string | - | 自定义类名 |
onBatchOperation | function | - | 批量操作回调 |
onDelete | function | - | 删除操作回调 |
onAdd | function | - | 添加操作回调 |
onUpload | function | - | 上传操作回调 |
onCellUpdate | function | - | 单元格更新回调 |
onReload | function | - | 重载数据回调 |
canDeleteRow | function | () => true | 行删除权限控制 |
canUpload | boolean | false | 是否允许上传 |
canBatchMenu | boolean | true | 是否显示批量菜单 |
canDelete | boolean | true | 是否允许删除 |
canAdd | boolean | true | 是否允许添加 |
rowsPerPageOptions | array | [10,20,50] | 分页选项 |
defaultRowsPerPage | number | 50 | 默认每页行数 |
interface Column {
field: string; // 字段名(必需)
headerName: string; // 列标题(必需)
type: DataType; // 数据类型(必需)
editable?: boolean; // 是否可编辑
filterable?: boolean; // 是否可筛选
visible?: boolean; // 是否可见
required?: boolean; // 是否必填
prefix?: string; // 前缀(数字类型)
suffix?: string; // 后缀(数字类型)
precision?: number; // 精度(数字类型)
properties?: Property[]; // 对象属性定义
selectOptions?: string[]; // 下拉选项
maxWidth?: string; // 最大宽度
separator?: string; // 分隔符(数组显示)
}
组件支持以下数据类型:
string
: 字符串integer
: 整数float
: 浮点数date
: 日期time
: 时间
currency
: 货币(带前缀和精度)percentage
: 百分比(带后缀和精度)array
: 数组(可自定义分隔符)object
: 对象(支持属性配置)images
: 图片(支持上传和预览)hyperlink
: 超链接select
: 下拉选择
const columns = [
// 货币类型
{
field: 'price',
headerName: '价格',
type: 'currency',
precision: 2,
prefix: '¥'
},
// 对象类型
{
field: 'priceInfo',
headerName: '价格信息',
type: 'object',
properties: [
{ key: 'current', name: '现价', type: 'currency', prefix: '¥', required: true },
{ key: 'change', name: '涨跌', type: 'string' },
{ key: 'percent', name: '涨跌幅', type: 'percentage', precision: 2 }
]
},
// 图片类型
{
field: 'images',
headerName: '图片',
type: 'images',
maxWidth: '100px'
}
];
支持两种筛选模式:
- 按选项筛选
- 按条件筛选(支持多条件组合)
// 条件筛选示例
{
operator: 'AND',
conditions: [
{ field: 'price', operator: 'greater_than', value: 100 },
{ field: 'stock', operator: 'not_empty' }
]
}
支持以下选择方式:
- 单击选择
- 拖动选择
- Shift + 点击选择范围
- Ctrl/Cmd + 点击多选
const batchOperations = [
{ label: '批量删除', value: 'delete' },
{ label: '批量导出', value: 'export' }
];
<DataTable
batchOperations={batchOperations}
onBatchOperation={(operation, selectedData) => {
console.log(`执行${operation}操作`, selectedData);
}}
/>
自动计算选中单元格的:
- 总数
- 非空单元格数
- 数值类型的总和
- 数值类型的平均值
- 大数据量时建议使用分页
- 避免频繁更新不必要的状态
- 合理设置 rowsPerPageOptions
- 必填字段不能为空
- 数值类型需符合格式要求
- 对象类型的必填属性必须有值
- 支持格式:JPG, PNG, GIF
- 大小限制:5MB
- 建议使用压缩后的图片
- 可控制整表的增删改查权限
- 支持行级别的删除权限
- 支持列级别的编辑权限
- Delete/Backspace: 删除选中单元格内容
- Ctrl/Cmd + Z: 撤销操作
- 方向键: 移动选中单元格
- Enter: 确认编辑
- Esc: 取消编辑
欢迎提交 Issue 和 Pull Request!
MIT License
这个 README.md 文件提供了组件的完整文档,包括:
1. 基本介绍和功能特性
2. 安装和基础用法
3. 详细的 API 文档
4. 支持的数据类型说明
5. 高级功能的使用说明
6. 重要注意事项
文档结构清晰,包含代码示例,便于用户快速上手和参考。需要补充或修改的部分,请告诉我。