ez-react-antd 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +608 -119
  2. package/dist/AdminLayout/AdminLayout.d.ts +34 -3
  3. package/dist/AdminLayout/AdminLayout.d.ts.map +1 -1
  4. package/dist/ConfigProvider/index.d.ts +114 -7
  5. package/dist/ConfigProvider/index.d.ts.map +1 -1
  6. package/dist/Drawer/Drawer.d.ts +24 -3
  7. package/dist/Drawer/Drawer.d.ts.map +1 -1
  8. package/dist/DrawerRemoteTableSelect/DrawerRemoteTableSelect.d.ts +100 -0
  9. package/dist/DrawerRemoteTableSelect/DrawerRemoteTableSelect.d.ts.map +1 -0
  10. package/dist/DrawerRemoteTableSelect/index.d.ts +3 -0
  11. package/dist/DrawerRemoteTableSelect/index.d.ts.map +1 -0
  12. package/dist/ErrorNotification/ErrorNotification.d.ts +43 -2
  13. package/dist/ErrorNotification/ErrorNotification.d.ts.map +1 -1
  14. package/dist/ErrorPage/ErrorPage.d.ts +14 -0
  15. package/dist/ErrorPage/ErrorPage.d.ts.map +1 -1
  16. package/dist/Grid/Grid.d.ts.map +1 -1
  17. package/dist/Grid/useResponsive.d.ts.map +1 -1
  18. package/dist/ImageUpload/ImageUpload.d.ts +86 -14
  19. package/dist/ImageUpload/ImageUpload.d.ts.map +1 -1
  20. package/dist/Link/Link.d.ts +12 -0
  21. package/dist/Link/Link.d.ts.map +1 -1
  22. package/dist/Loading/Loading.d.ts +14 -1
  23. package/dist/Loading/Loading.d.ts.map +1 -1
  24. package/dist/ModalAvatar/ModalAvatar.d.ts +33 -0
  25. package/dist/ModalAvatar/ModalAvatar.d.ts.map +1 -0
  26. package/dist/ModalAvatar/index.d.ts +3 -0
  27. package/dist/ModalAvatar/index.d.ts.map +1 -0
  28. package/dist/NoFoundPage/NoFoundPage.d.ts +14 -0
  29. package/dist/NoFoundPage/NoFoundPage.d.ts.map +1 -1
  30. package/dist/NotAuthorizedPage/NotAuthorizedPage.d.ts +14 -0
  31. package/dist/NotAuthorizedPage/NotAuthorizedPage.d.ts.map +1 -1
  32. package/dist/Redirect/Redirect.d.ts +28 -2
  33. package/dist/Redirect/Redirect.d.ts.map +1 -1
  34. package/dist/RemoteCascader/RemoteCascader.d.ts +48 -13
  35. package/dist/RemoteCascader/RemoteCascader.d.ts.map +1 -1
  36. package/dist/RemoteSelect/RemoteSelect.d.ts +73 -19
  37. package/dist/RemoteSelect/RemoteSelect.d.ts.map +1 -1
  38. package/dist/RemoteTable/RemoteTable.d.ts +36 -16
  39. package/dist/RemoteTable/RemoteTable.d.ts.map +1 -1
  40. package/dist/RemoteTableSelect/RemoteTableSelect.d.ts +39 -2
  41. package/dist/RemoteTableSelect/RemoteTableSelect.d.ts.map +1 -1
  42. package/dist/RemoteTree/RemoteTree.d.ts +143 -52
  43. package/dist/RemoteTree/RemoteTree.d.ts.map +1 -1
  44. package/dist/ez-react-antd.es.js +4545 -4214
  45. package/dist/index.css +1 -1
  46. package/dist/index.d.ts +2 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/package.json +1 -1
  49. package/dist/ez-react-antd.umd.js +0 -73
package/README.md CHANGED
@@ -1,68 +1,65 @@
1
- # Ez-Antd
1
+ # Ez-React-Antd
2
2
 
3
- 基于 Ant Design 的 React 组件库,提供开箱即用的业务组件。
3
+ 基于 Ant Design 5.x 的 React 业务组件库,提供开箱即用的企业级组件。
4
4
 
5
- ## 特性
5
+ ## 特性
6
6
 
7
- - 🎨 基于 Ant Design 5.x 构建
8
- - 📦 开箱即用的业务组件
9
- - 🔥 支持 TypeScript
10
- - 🎯 零依赖打包(所有依赖由宿主项目提供)
11
- - 🌈 自动 CSS 注入,无需手动引入样式
7
+ - 🎨 **基于 Ant Design 5.x** - 继承 Ant Design 的优秀设计
8
+ - 📦 **开箱即用** - 22+ 业务组件,覆盖常见场景
9
+ - 🔥 **TypeScript** - 完整的类型定义和 JSDoc 注释
10
+ - 🎯 **零依赖打包** - Peer Dependencies 模式,避免重复打包
11
+ - 🌈 **自动样式注入** - 无需手动引入 CSS
12
+ - 📱 **响应式设计** - 自动适配移动端和桌面端
13
+ - 🔗 **Redux 集成** - 与 Redux 无缝集成
12
14
 
13
- ## 安装
15
+ ## 📦 安装
14
16
 
15
- ### 1. 安装 ez-antd
17
+ ### 基础安装
16
18
 
17
19
  ```bash
18
- npm install ez-antd
20
+ npm install ez-react-antd
19
21
  ```
20
22
 
21
- ### 2. 安装必需的 Peer Dependencies
22
-
23
- Ez-antd 需要以下依赖,请确保您的项目中已安装:
23
+ ### 必需的 Peer Dependencies
24
24
 
25
25
  ```bash
26
- npm install react react-dom antd react-redux react-router
26
+ npm install react react-dom antd react-redux react-router redux
27
27
  ```
28
28
 
29
- ### 3. 安装组件特定依赖
30
-
31
- 根据您使用的组件,可能需要安装额外的依赖:
29
+ ### 可选依赖(按需安装)
32
30
 
33
- #### IconSelect 组件
31
+ **IconSelect 组件**
34
32
  ```bash
35
- npm install @fortawesome/fontawesome-svg-core \
36
- @fortawesome/free-regular-svg-icons \
37
- @fortawesome/free-solid-svg-icons \
38
- @fortawesome/react-fontawesome \
39
- react-select \
40
- react-window
33
+ npm install @fortawesome/fontawesome-svg-core @fortawesome/free-regular-svg-icons @fortawesome/free-solid-svg-icons @fortawesome/react-fontawesome react-select react-window
41
34
  ```
42
35
 
43
- #### ImageUpload 组件
36
+ **ImageUpload 组件**
44
37
  ```bash
45
38
  npm install antd-img-crop
46
39
  ```
47
40
 
48
- ## 快速开始
41
+ ## 🚀 快速开始
49
42
 
50
43
  ### 1. 配置全局 Provider
51
44
 
52
- 在应用入口文件中配置 `ConfigProvider`:
45
+ 在应用入口配置 `ConfigProvider`:
53
46
 
54
47
  ```tsx
55
- import { ConfigProvider } from 'ez-antd';
56
- import axios from 'axios';
48
+ import { ConfigProvider } from 'ez-react-antd';
49
+ import request from './utils/request'; // 你的请求工具
57
50
 
58
51
  function App() {
59
52
  return (
60
- <ConfigProvider
61
- request={axios}
62
- upload={(url, data) => axios.post(url, data)}
63
- getData={(response) => response.data}
64
- isSuccess={(response) => response.status === 200}
65
- >
53
+ <ConfigProvider value={{
54
+ request: {
55
+ getRequest: (url, params) => request.get(url, { params }),
56
+ postRequest: (url, data) => request.post(url, data),
57
+ putRequest: (url, data) => request.put(url, data),
58
+ deleteRequest: (url, params) => request.delete(url, { params }),
59
+ },
60
+ responseIsSuccess: (res) => res.status === 200 && res.data.code === 0,
61
+ upload: (url, formData) => request.post(url, formData),
62
+ }}>
66
63
  <YourApp />
67
64
  </ConfigProvider>
68
65
  );
@@ -72,93 +69,570 @@ function App() {
72
69
  ### 2. 使用组件
73
70
 
74
71
  ```tsx
75
- import { RemoteTable, AdminLayout } from 'ez-antd';
72
+ import { RemoteTable, RemoteSelect, AdminLayout } from 'ez-react-antd';
73
+
74
+ // 远程表格
75
+ <RemoteTable
76
+ modelName="user"
77
+ columns={columns}
78
+ queryParam={{ status: 'active' }}
79
+ />
80
+
81
+ // 远程下拉选择
82
+ <RemoteSelect
83
+ api="/api/users"
84
+ labelKey="name"
85
+ valueKey="id"
86
+ onChange={(value) => console.log(value)}
87
+ />
88
+
89
+ // 后台布局
90
+ <AdminLayout
91
+ appName="管理系统"
92
+ menus={menuConfig}
93
+ userInfo={currentUser}
94
+ onLogout={handleLogout}
95
+ >
96
+ <YourContent />
97
+ </AdminLayout>
98
+ ```
76
99
 
77
- // RemoteTable 示例
78
- function UserList() {
79
- return (
80
- <RemoteTable
81
- url="/api/users"
82
- columns={[
83
- { title: '姓名', dataIndex: 'name' },
84
- { title: '邮箱', dataIndex: 'email' }
85
- ]}
86
- />
87
- );
88
- }
100
+ ## 📚 组件文档
89
101
 
90
- // AdminLayout 示例
91
- function Layout() {
92
- return (
93
- <AdminLayout
94
- appName="我的系统"
95
- menus={[
96
- { name: '首页', path: '/', icon: 'HomeOutlined' }
97
- ]}
98
- userInfo={{ name: '用户名' }}
99
- onLogout={() => console.log('退出登录')}
100
- >
101
- <YourContent />
102
- </AdminLayout>
103
- );
104
- }
102
+ ### 核心组件
103
+
104
+ #### ConfigProvider
105
+
106
+ 全局配置提供者,为所有组件提供统一的请求和响应处理。
107
+
108
+ **Props:**
109
+ - `request` - 请求方法对象(getRequest, postRequest, putRequest, deleteRequest)
110
+ - `responseIsSuccess` - 判断响应是否成功的函数
111
+ - `upload` - 文件上传方法
112
+
113
+ **示例:**
114
+ ```tsx
115
+ <ConfigProvider value={{
116
+ request: requestInstance,
117
+ responseIsSuccess: (res) => res.status === 200,
118
+ upload: (url, formData) => axios.post(url, formData)
119
+ }}>
120
+ <App />
121
+ </ConfigProvider>
105
122
  ```
106
123
 
107
- ## 组件列表
108
-
109
- ### 数据展示
110
- - **RemoteTable** - 远程数据表格,支持分页、搜索、排序
111
- - **RemoteTree** - 远程数据树形控件
112
- - **IconSelect** - 图标选择器(需要 FontAwesome 依赖)
113
-
114
- ### 数据录入
115
- - **RemoteSelect** - 远程数据下拉选择
116
- - **RemoteCascader** - 远程数据级联选择
117
- - **RemoteTableSelect** - 表格形式的数据选择器
118
- - **RemoteModalSelect** - 弹窗形式的数据选择器
119
- - **ImageUpload** - 图片上传组件(需要 antd-img-crop)
120
- - **SearchBar** - 搜索栏组件
121
-
122
- ### 布局
123
- - **AdminLayout** - 后台管理布局
124
- - **ErrorPage** - 错误页面
125
- - **NoFoundPage** - 404 页面
126
- - **NotAuthorizedPage** - 未授权页面
127
-
128
- ## 完整依赖列表
129
-
130
- ### 必需依赖(所有组件)
131
- ```json
132
- {
133
- "react": "^18.0.0",
134
- "react-dom": "^18.0.0",
135
- "antd": "^5.29.3",
136
- "react-redux": "^9.2.0",
137
- "react-router": "^7.11.0"
138
- }
124
+ #### AdminLayout
125
+
126
+ 后台管理系统布局组件,支持响应式、主题切换。
127
+
128
+ **Props:**
129
+ - `menus` - 菜单配置数组
130
+ - `appName` - 系统名称(默认: 'System')
131
+ - `appIcon` - 系统图标 URL
132
+ - `userInfo` - 用户信息对象
133
+ - `onLogout` - 退出登录回调
134
+ - `onModifyPassword` - 修改密码回调
135
+ - `fileDownloadUrl` - 文件下载地址
136
+
137
+ **示例:**
138
+ ```tsx
139
+ <AdminLayout
140
+ appName="ERP系统"
141
+ appIcon="/logo.png"
142
+ menus={[
143
+ { name: '首页', path: '/', icon: 'HomeOutlined' },
144
+ { name: '用户管理', path: '/users', icon: 'UserOutlined' }
145
+ ]}
146
+ userInfo={{ name: '张三', avatar: '/avatar.jpg' }}
147
+ onLogout={() => logout()}
148
+ >
149
+ <Routes />
150
+ </AdminLayout>
139
151
  ```
140
152
 
141
- ### 可选依赖(按需安装)
142
- ```json
143
- {
144
- "@fortawesome/fontawesome-svg-core": "^7.1.0",
145
- "@fortawesome/free-regular-svg-icons": "^7.1.0",
146
- "@fortawesome/free-solid-svg-icons": "^7.1.0",
147
- "@fortawesome/react-fontawesome": "^3.1.1",
148
- "antd-img-crop": "^4.27.0",
149
- "react-select": "^5.10.2",
150
- "react-window": "^2.2.3"
151
- }
153
+ ---
154
+
155
+ ### 数据展示组件
156
+
157
+ #### RemoteTable
158
+
159
+ 从远程 API 加载分页数据的表格组件,支持响应式布局。
160
+
161
+ **Props:**
162
+ - `modelName` - Redux 模块名称(必需)
163
+ - `columns` - 表格列配置(必需)
164
+ - `queryParam` - 查询参数对象
165
+ - `primaryKey` - 行主键字段名(默认: 'id')
166
+ - `queryMethod` - 查询方法名(默认: 'getPageInfo')
167
+ - `paramName` - 查询参数在 store 中的字段名(默认: 'queryParam')
168
+ - `dataStore` - 分页数据在 store 中的字段名(默认: 'pageData')
169
+ - `title` - 表格标题
170
+ - `rowSelection` - 行选择配置
171
+ - `expandable` - 展开配置
172
+ - `showHeader` - 是否显示表头(默认: true)
173
+ - `scrollSub` - 横向滚动条宽度补偿(默认: 0)
174
+ - `notShowLoading` - 不显示 loading(默认: false)
175
+
176
+ **示例:**
177
+ ```tsx
178
+ <RemoteTable
179
+ modelName="user"
180
+ columns={[
181
+ { title: '姓名', dataIndex: 'name' },
182
+ { title: '邮箱', dataIndex: 'email' },
183
+ { title: '操作', render: (_, record) => <Button>编辑</Button> }
184
+ ]}
185
+ queryParam={{ status: 'active' }}
186
+ rowSelection={{
187
+ type: 'checkbox',
188
+ onChange: (keys, rows) => console.log(keys, rows)
189
+ }}
190
+ />
191
+ ```
192
+
193
+ #### RemoteTree
194
+
195
+ 远程数据树形控件,支持动态加载子节点。
196
+
197
+ **Props:**
198
+ - `api` - 数据请求接口 URL
199
+ - `queryParam` - 查询参数
200
+ - `labelKey` - 显示字段名(默认: 'name')
201
+ - `valueKey` - 值字段名(默认: 'id')
202
+ - `onSelect` - 选中节点回调
203
+ - `checkable` - 是否显示复选框
204
+ - `onCheck` - 复选框选中回调
205
+
206
+ **示例:**
207
+ ```tsx
208
+ <RemoteTree
209
+ api="/api/departments"
210
+ labelKey="name"
211
+ valueKey="id"
212
+ checkable
213
+ onCheck={(checkedKeys) => console.log(checkedKeys)}
214
+ />
215
+ ```
216
+
217
+ #### IconSelect
218
+
219
+ 图标选择器,支持 Ant Design Icons 和 FontAwesome 图标。
220
+
221
+ **Props:**
222
+ - `value` - 当前选中的图标值
223
+ - `onChange` - 选中变化回调
224
+
225
+ **示例:**
226
+ ```tsx
227
+ <IconSelect
228
+ value={iconValue}
229
+ onChange={(value) => setIconValue(value)}
230
+ />
231
+ ```
232
+
233
+ ---
234
+
235
+ ### 表单组件
236
+
237
+ #### RemoteSelect
238
+
239
+ 从远程 API 加载选项的下拉选择框。
240
+
241
+ **Props:**
242
+ - `api` - 数据请求接口 URL(必需)
243
+ - `labelKey` - 显示字段名(默认: 'name')
244
+ - `valueKey` - 值字段名(默认: 'id')
245
+ - `queryParam` - 查询参数对象
246
+ - `needQueryParam` - 是否需要参数才请求(默认: false)
247
+ - `placeholder` - 占位提示(默认: '请选择')
248
+ - `allowClear` - 允许清除(默认: true)
249
+ - `showSearch` - 显示搜索(默认: true)
250
+ - `selectedFirst` - 默认选中第一个(默认: false)
251
+ - `metaDataInValue` - 返回原始数据(默认: false)
252
+ - `mode` - 选择模式('multiple' | 'tags')
253
+ - `disabled` - 是否禁用
254
+ - `onChange` - 选中变化回调
255
+ - `onLoadingChange` - 加载状态变化回调
256
+
257
+ **示例:**
258
+ ```tsx
259
+ <RemoteSelect
260
+ api="/api/users"
261
+ labelKey="name"
262
+ valueKey="id"
263
+ queryParam={{ department: 'IT' }}
264
+ onChange={(value) => console.log(value)}
265
+ showSearch
266
+ allowClear
267
+ />
268
+ ```
269
+
270
+ #### RemoteCascader
271
+
272
+ 远程级联选择器,支持动态加载子节点。
273
+
274
+ **Props:**
275
+ - `api` - 数据请求接口 URL(必需)
276
+ - `labelKey` - 显示字段名(默认: 'name')
277
+ - `valueKey` - 值字段名(默认: 'id')
278
+ - `queryParam` - 查询参数
279
+ - `defaultParam` - 默认参数(会合并到每次请求)
280
+ - `initValue` - 初始值
281
+ - `value` - 当前值
282
+ - `placeholder` - 占位提示
283
+ - `allowClear` - 允许清除
284
+ - `onChange` - 选中变化回调
285
+ - `onLoadSonData` - 加载子节点参数构造函数
286
+
287
+ **示例:**
288
+ ```tsx
289
+ <RemoteCascader
290
+ api="/api/regions"
291
+ labelKey="name"
292
+ valueKey="code"
293
+ initValue={['110000', '110100']}
294
+ onChange={(values) => console.log(values)}
295
+ onLoadSonData={(option) => ({ parentId: option.value })}
296
+ />
297
+ ```
298
+
299
+ #### SearchBar
300
+
301
+ 搜索栏组件,与 Redux 集成,支持展开/收起。
302
+
303
+ **Props:**
304
+ - `modelName` - Redux 模块名称(必需)
305
+ - `moreItem` - 更多搜索条件(展开后显示)
306
+ - `disabled` - 禁用所有按钮
307
+ - `paramName` - 查询参数字段名(默认: 'queryParam')
308
+ - `dataStore` - 数据存储字段名(默认: 'pageData')
309
+ - `queryMethod` - 查询方法名(默认: 'getPageInfo')
310
+ - `onValuesChange` - 表单值变化回调
311
+ - `onSearch` - 搜索前数据处理函数
312
+ - `showAddMenu` - 显示新增按钮
313
+ - `showDeleteMenu` - 显示删除按钮
314
+ - `addMenuName` - 新增按钮文本(默认: '新增')
315
+ - `deleteMenuName` - 删除按钮文本(默认: '删除')
316
+ - `onClickAdd` - 新增按钮回调
317
+ - `onClickDelete` - 删除按钮回调
318
+
319
+ **示例:**
320
+ ```tsx
321
+ <SearchBar modelName="user" showAddMenu onClickAdd={handleAdd}>
322
+ <SearchBar.Item label="用户名" name="username">
323
+ <Input placeholder="请输入用户名" />
324
+ </SearchBar.Item>
325
+ <SearchBar.Item label="状态" name="status">
326
+ <Select options={statusOptions} />
327
+ </SearchBar.Item>
328
+ </SearchBar>
152
329
  ```
153
330
 
154
- ## 开发
331
+ #### ImageUpload
332
+
333
+ 图片上传组件,支持裁剪和 base64。
334
+
335
+ **Props:**
336
+ - `limit` - 张数限制(默认: 1)
337
+ - `aspect` - 裁切宽高比(默认: 1)
338
+ - `showGrid` - 显示裁切网格(默认: true)
339
+ - `quality` - 图片质量 0-1(默认: 1)
340
+ - `rotationSlider` - 启用旋转
341
+ - `cropShape` - 裁切形状('rect' | 'round',默认: 'rect')
342
+ - `value` - 图片地址
343
+ - `onChange` - 变化回调
344
+ - `enabledUpload` - 启用上传到服务器(默认: true)
345
+ - `disabled` - 是否禁用
346
+ - `needCrop` - 是否需要裁剪(默认: true)
347
+ - `uploadUrl` - 上传接口地址
348
+
349
+ **示例:**
350
+ ```tsx
351
+ <ImageUpload
352
+ value={imageUrl}
353
+ onChange={(url) => setImageUrl(url)}
354
+ uploadUrl="/api/upload"
355
+ cropShape="round"
356
+ aspect={1}
357
+ />
358
+ ```
359
+
360
+ #### RemoteTableSelect
361
+
362
+ 表格选择器,在模态框中显示表格进行选择。
363
+
364
+ **Props:**
365
+ - 继承 `RemoteTable` 的所有属性
366
+ - `placeholder` - 占位提示
367
+ - `limit` - 最大可选数量(默认: 无限制)
368
+ - `labelKey` - 显示字段名(默认: 'name')
369
+ - `labelRender` - 自定义标签渲染函数
370
+ - `showSort` - 显示排序按钮(默认: false)
371
+ - `disabled` - 是否禁用
372
+ - `value` - 当前值
373
+ - `onChange` - 变化回调
374
+
375
+ **示例:**
376
+ ```tsx
377
+ <RemoteTableSelect
378
+ modelName="product"
379
+ columns={columns}
380
+ labelKey="name"
381
+ limit={5}
382
+ showSort
383
+ onChange={(selected) => console.log(selected)}
384
+ />
385
+ ```
386
+
387
+ #### DrawerRemoteTableSelect
388
+
389
+ 抽屉式表格选择器。
390
+
391
+ **Props:**
392
+ - 继承 `RemoteTable` 的所有属性
393
+ - `limit` - 最大可选数量
394
+ - `open` - 是否打开抽屉
395
+ - `onClose` - 关闭回调
396
+ - `width` - 抽屉宽度
397
+ - `title` - 抽屉标题
398
+ - `onSearch` - 搜索回调
399
+ - `returnSourceData` - 返回原始数据(默认: false)
400
+ - `value` - 当前值
401
+ - `onChange` - 变化回调
402
+
403
+ **示例:**
404
+ ```tsx
405
+ <DrawerRemoteTableSelect
406
+ modelName="user"
407
+ columns={columns}
408
+ open={visible}
409
+ onClose={() => setVisible(false)}
410
+ title="选择用户"
411
+ limit={10}
412
+ onChange={(selected) => console.log(selected)}
413
+ />
414
+ ```
415
+
416
+ #### RemoteModalSelect
417
+
418
+ 模态框表格选择器。
419
+
420
+ **Props:**
421
+ - `primaryKey` - 主键字段(默认: 'id')
422
+ - `limit` - 最大可选数量
423
+ - `disabled` - 是否禁用
424
+ - `onSubmit` - 提交回调
425
+ - `value` - 当前值
426
+ - `tableProp` - 表格属性配置
427
+
428
+ **示例:**
429
+ ```tsx
430
+ <RemoteModalSelect
431
+ tableProp={{
432
+ modelName: 'product',
433
+ columns: columns
434
+ }}
435
+ limit={5}
436
+ onSubmit={(selected) => console.log(selected)}
437
+ />
438
+ ```
439
+
440
+ ---
441
+
442
+ ### UI 组件
443
+
444
+ #### Link
445
+
446
+ 链接组件,基于 react-router 的 Link 封装。
447
+
448
+ **Props:**
449
+ - `to` - 跳转路径(必需)
450
+ - `children` - 子元素
451
+
452
+ **示例:**
453
+ ```tsx
454
+ <Link to="/dashboard">前往控制台</Link>
455
+ ```
456
+
457
+ #### Loading
458
+
459
+ 加载组件,在内容上方显示加载动画。
460
+
461
+ **Props:**
462
+ - `loading` - 是否显示加载状态(默认: false)
463
+ - `children` - 子组件内容
464
+
465
+ **示例:**
466
+ ```tsx
467
+ <Loading loading={isLoading}>
468
+ <YourContent />
469
+ </Loading>
470
+ ```
471
+
472
+ #### ModalAvatar
473
+
474
+ 模态框头像组件,点击预览大图。
475
+
476
+ **Props:**
477
+ - `src` - 图片地址(必需)
478
+
479
+ **示例:**
480
+ ```tsx
481
+ <ModalAvatar src="/avatar.jpg" />
482
+ ```
483
+
484
+ #### Drawer
485
+
486
+ 抽屉组件,自定义关闭按钮样式。
487
+
488
+ **Props:**
489
+ - 继承 Ant Design Drawer 的所有属性
490
+ - `closeTxt` - 关闭按钮文本(默认: '关闭')
491
+ - `title` - 抽屉标题
492
+ - `onClose` - 关闭回调
493
+
494
+ **示例:**
495
+ ```tsx
496
+ <Drawer
497
+ open={visible}
498
+ title="详情"
499
+ onClose={handleClose}
500
+ closeTxt="取消"
501
+ >
502
+ <YourContent />
503
+ </Drawer>
504
+ ```
505
+
506
+ #### Grid
507
+
508
+ 响应式网格组件,监听窗口大小变化。
509
+
510
+ **Props:**
511
+ - `onChange` - 窗口大小变化回调
512
+ - `responsive` - 响应式类型('xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl')
513
+ - `style` - 自定义样式
514
+ - `debounceDelay` - 防抖延迟(默认: 150ms)
515
+
516
+ **示例:**
517
+ ```tsx
518
+ <Grid
519
+ onChange={(type, width) => console.log(type, width)}
520
+ responsive={['lg', 'xl', 'xxl']}
521
+ >
522
+ <DesktopContent />
523
+ </Grid>
524
+ ```
525
+
526
+ ---
527
+
528
+ ### 页面组件
529
+
530
+ #### ErrorPage
531
+
532
+ 500 错误页面。
533
+
534
+ **Props:**
535
+ - `status` - 状态码(默认: 500)
536
+ - `title` - 标题
537
+ - `subTitle` - 副标题
538
+ - `onBackHome` - 返回首页回调
539
+
540
+ **示例:**
541
+ ```tsx
542
+ <ErrorPage
543
+ status={500}
544
+ title="服务器错误"
545
+ subTitle="抱歉,服务器出错了"
546
+ onBackHome={() => navigate('/')}
547
+ />
548
+ ```
549
+
550
+ #### NoFoundPage
551
+
552
+ 404 页面。
553
+
554
+ **Props:**
555
+ - `status` - 状态码(默认: 404)
556
+ - `title` - 标题
557
+ - `subTitle` - 副标题
558
+ - `onBackHome` - 返回首页回调
559
+
560
+ **示例:**
561
+ ```tsx
562
+ <NoFoundPage onBackHome={() => navigate('/')} />
563
+ ```
564
+
565
+ #### NotAuthorizedPage
566
+
567
+ 403 权限页面。
568
+
569
+ **Props:**
570
+ - `status` - 状态码(默认: 403)
571
+ - `title` - 标题
572
+ - `subTitle` - 副标题
573
+ - `onBackHome` - 返回首页回调
574
+
575
+ **示例:**
576
+ ```tsx
577
+ <NotAuthorizedPage onBackHome={() => navigate('/')} />
578
+ ```
579
+
580
+ #### Redirect
581
+
582
+ 路由重定向组件。
583
+
584
+ **Props:**
585
+ - `from` - 源路径(可选,不提供则无条件重定向)
586
+ - `to` - 目标路径(必需)
587
+ - `state` - 传递的状态
588
+
589
+ **示例:**
590
+ ```tsx
591
+ <Redirect from="/old-path" to="/new-path" />
592
+ <Redirect to="/home" /> {/* 无条件重定向 */}
593
+ ```
594
+
595
+ ---
596
+
597
+ ### 通知组件
598
+
599
+ #### ErrorNotification
600
+
601
+ 错误通知组件,用于在 notification 中显示格式化的错误信息。
602
+
603
+ **Props:**
604
+ - `data` - 错误数据对象(包含 msg 和 code)
605
+ - `message` - 错误消息
606
+ - `title` - 标题(默认: '错误信息:')
607
+ - `titleStyle` - 标题样式
608
+ - `contentStyle` - 内容样式
609
+ - `containerStyle` - 容器样式
610
+
611
+ **示例:**
612
+ ```tsx
613
+ import React from 'react';
614
+ import { notification } from 'antd';
615
+ import { ErrorNotification } from 'ez-react-antd';
616
+
617
+ const description = React.createElement(ErrorNotification, {
618
+ data: { code: 500, msg: '服务器错误' }
619
+ });
620
+
621
+ notification.error({
622
+ message: '错误代码:500',
623
+ description: description,
624
+ duration: 10
625
+ });
626
+ ```
627
+
628
+ ## 🔧 开发
155
629
 
156
630
  ```bash
157
631
  # 安装依赖
158
632
  npm install
159
633
 
160
- # 开发模式
161
- npm run dev
634
+ # 开发模式(监听文件变化)
635
+ npm run watch
162
636
 
163
637
  # 构建
164
638
  npm run build
@@ -170,18 +644,33 @@ npm run type-check
170
644
  npm run lint
171
645
  ```
172
646
 
173
- ## 本地开发调试
647
+ ## 📝 TypeScript
174
648
 
175
- 如果需要在本地项目中调试 ez-antd:
649
+ 所有组件都提供完整的 TypeScript 类型定义和 JSDoc 注释,IDE 会自动提示属性和方法说明。
176
650
 
177
- ```bash
178
- # ez-antd 目录
179
- npm run link:watch
180
-
181
- # 在业务项目目录
182
- npm link ez-antd
651
+ ```tsx
652
+ import { RemoteSelect, RemoteSelectProp } from 'ez-react-antd';
653
+
654
+ // 完整的类型提示
655
+ const props: RemoteSelectProp = {
656
+ api: '/api/users',
657
+ labelKey: 'name',
658
+ valueKey: 'id',
659
+ onChange: (value) => console.log(value)
660
+ };
183
661
  ```
184
662
 
185
- ## License
663
+ ## 🌐 浏览器支持
664
+
665
+ - Chrome >= 90
666
+ - Firefox >= 88
667
+ - Safari >= 14
668
+ - Edge >= 90
669
+
670
+ ## 📄 License
186
671
 
187
672
  MIT
673
+
674
+ ## 🤝 贡献
675
+
676
+ 欢迎提交 Issue 和 Pull Request!