@gmfe/react 2.14.30-alpha.0 → 2.14.30
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.
- package/README.md +179 -0
- package/package.json +4 -4
- package/src/component/affix/README.md +54 -0
- package/src/component/box/README.md +142 -0
- package/src/component/box/box_table.js +11 -18
- package/src/component/button/README.md +90 -0
- package/src/component/calendar/README.md +98 -0
- package/src/component/carousel/README.md +51 -0
- package/src/component/cascader/README.md +139 -0
- package/src/component/checkbox/README.md +120 -0
- package/src/component/collapse/README.md +80 -0
- package/src/component/color_picker/README.md +50 -0
- package/src/component/date_picker/README.md +144 -0
- package/src/component/date_range_picker/README.md +126 -0
- package/src/component/dialog/README.md +149 -0
- package/src/component/divider/README.md +41 -0
- package/src/component/drawer/README.md +83 -0
- package/src/component/drop_down/README.md +105 -0
- package/src/component/drop_select/README.md +146 -0
- package/src/component/dropper/README.md +55 -0
- package/src/component/editable_text/README.md +68 -0
- package/src/component/filter_select/README.md +104 -0
- package/src/component/flex/README.md +88 -0
- package/src/component/flip_number/README.md +53 -0
- package/src/component/form/README.md +199 -0
- package/src/component/function_set/README.md +93 -0
- package/src/component/grid/README.md +93 -0
- package/src/component/icon_down_up/README.md +43 -0
- package/src/component/image_preview/README.md +57 -0
- package/src/component/img_uploader/README.md +91 -0
- package/src/component/input/README.md +49 -0
- package/src/component/input_number/README.md +93 -0
- package/src/component/layout_root/README.md +181 -0
- package/src/component/lazy_img/README.md +59 -0
- package/src/component/level_list/README.md +75 -0
- package/src/component/level_select/README.md +78 -0
- package/src/component/list/README.md +96 -0
- package/src/component/loading/README.md +116 -0
- package/src/component/mask/README.md +62 -0
- package/src/component/modal/README.md +155 -0
- package/src/component/more_select/README.md +185 -0
- package/src/component/nav/README.md +101 -0
- package/src/component/nprogress/README.md +135 -0
- package/src/component/pagination/README.md +87 -0
- package/src/component/picture_preview/README.md +50 -0
- package/src/component/popover/README.md +146 -0
- package/src/component/popup/README.md +121 -0
- package/src/component/price/README.md +72 -0
- package/src/component/progress/README.md +98 -0
- package/src/component/progress_circle/README.md +92 -0
- package/src/component/radio/README.md +101 -0
- package/src/component/recommend_input/README.md +75 -0
- package/src/component/select/README.md +120 -0
- package/src/component/selection/README.md +87 -0
- package/src/component/sheet/README.md +176 -0
- package/src/component/steps/README.md +55 -0
- package/src/component/storage/README.md +83 -0
- package/src/component/switch/README.md +85 -0
- package/src/component/table_select/README.md +92 -0
- package/src/component/tabs/README.md +85 -0
- package/src/component/time_span/README.md +112 -0
- package/src/component/tip/README.md +105 -0
- package/src/component/tool_tip/README.md +84 -0
- package/src/component/transfer/README.md +98 -0
- package/src/component/transfer_v2/README.md +85 -0
- package/src/component/tree/README.md +99 -0
- package/src/component/tree/index.js +1 -1
- package/src/component/tree_v2/README.md +99 -0
- package/src/component/uploader/README.md +104 -0
- package/src/index.js +1 -3
- package/LICENSE +0 -16
- package/src/hoc/sticky_layout.js +0 -157
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# Sheet
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
数据表格组件 - 用于展示结构化数据,支持列定义、操作列、选择框、批量操作、展开行和分页等功能。(已废弃,建议使用 Table 组件替代)
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
已包含在 `@gmfe/react` 中,无需额外安装。
|
|
8
|
+
|
|
9
|
+
## 使用
|
|
10
|
+
```jsx
|
|
11
|
+
import { Sheet, SheetColumn, SheetAction, SheetSelect, SheetBatchAction } from '@gmfe/react/lib/sheet'
|
|
12
|
+
|
|
13
|
+
<Sheet list={dataList}>
|
|
14
|
+
<SheetColumn field='id' name='ID' />
|
|
15
|
+
<SheetColumn field='name' name='名字' />
|
|
16
|
+
<SheetColumn field='age' name='年龄' />
|
|
17
|
+
<SheetAction>
|
|
18
|
+
{(record, index) => <Button>操作</Button>}
|
|
19
|
+
</SheetAction>
|
|
20
|
+
</Sheet>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## API
|
|
24
|
+
|
|
25
|
+
### Sheet Props
|
|
26
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
27
|
+
|------|------|------|--------|------|
|
|
28
|
+
| list | 表格数据数组 | `array` | `[]` | 是 |
|
|
29
|
+
| loading | 是否显示加载状态 | `bool` | `false` | 否 |
|
|
30
|
+
| enableEmptyTip | 数据为空时的提示,传入 `true` 显示默认提示,也可传入字符串或 React 元素自定义提示 | `bool \| string \| ReactElement` | - | 否 |
|
|
31
|
+
| className | 自定义类名 | `string` | - | 否 |
|
|
32
|
+
| getTrProps | 获取行属性,返回值会传递到 `<tr>` 上 | `(index: number) => object` | `() => ({})` | 否 |
|
|
33
|
+
| scrollX | 是否开启横向滚动 | `bool` | `false` | 否 |
|
|
34
|
+
| expandedRowRender | 展开行渲染函数 | `(index: number) => ReactElement` | - | 否 |
|
|
35
|
+
| onExpand | 单行展开/收起回调 | `(index: number) => void` | - | 否 |
|
|
36
|
+
| onExpandAll | 全部展开/收起回调 | `() => void` | - | 否 |
|
|
37
|
+
| children | 子组件(SheetColumn、SheetAction、SheetSelect、SheetBatchAction、Pagination 等) | `any` | - | 否 |
|
|
38
|
+
|
|
39
|
+
### SheetColumn Props
|
|
40
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
41
|
+
|------|------|------|--------|------|
|
|
42
|
+
| field | 对应 list 中的字段名 | `string` | - | 是 |
|
|
43
|
+
| name | 列标题,支持字符串或 React 元素 | `string \| ReactElement` | - | 是 |
|
|
44
|
+
| render | 自定义单元格渲染函数 | `(value: any, index: number, record: object) => ReactNode` | - | 否 |
|
|
45
|
+
| placeholder | 字段值为空时的占位内容 | `any` | - | 否 |
|
|
46
|
+
| children | 自定义单元格渲染(函数子组件),参数为 `(value, index, record)` | `(value, index, record) => ReactNode` | - | 否 |
|
|
47
|
+
|
|
48
|
+
### SheetAction Props
|
|
49
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
50
|
+
|------|------|------|--------|------|
|
|
51
|
+
| children | 操作列渲染函数,参数为 `(record, index)` | `(record, index) => ReactNode` | - | 否 |
|
|
52
|
+
|
|
53
|
+
### SheetSelect Props
|
|
54
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
55
|
+
|------|------|------|--------|------|
|
|
56
|
+
| onSelect | 单选回调 | `(checked: bool, index: number) => void` | - | 是 |
|
|
57
|
+
| onSelectAll | 全选回调 | `(checked: bool) => void` | - | 否 |
|
|
58
|
+
| onChange | 选中状态变更回调,参数为完整的 list(修改后的) | `(list: array) => void` | - | 否 |
|
|
59
|
+
| isDisabled | 判断行是否禁用选择 | `(record: object) => bool` | `() => false` | 否 |
|
|
60
|
+
| isRadio | 是否为单选模式 | `bool` | `false` | 否 |
|
|
61
|
+
| hasSelectTip | 是否显示全选提示 | `bool` | `false` | 否 |
|
|
62
|
+
| selectAllTip | 全选提示内容 | `ReactNode` | `'已选中所有'` | 否 |
|
|
63
|
+
| children | 子元素 | `any` | - | 否 |
|
|
64
|
+
|
|
65
|
+
### SheetBatchAction Props
|
|
66
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
67
|
+
|------|------|------|--------|------|
|
|
68
|
+
| children | 批量操作按钮区域 | `any` | - | 否 |
|
|
69
|
+
|
|
70
|
+
### Sheet 静态方法
|
|
71
|
+
|
|
72
|
+
#### `Sheet.findTableDOM(ref)`
|
|
73
|
+
获取表格 DOM 元素。
|
|
74
|
+
|
|
75
|
+
| 参数 | 说明 | 类型 | 必填 |
|
|
76
|
+
|------|------|------|------|
|
|
77
|
+
| ref | Sheet 组件的 ref | `ReactRef` | 是 |
|
|
78
|
+
|
|
79
|
+
返回值:`HTMLTableElement`
|
|
80
|
+
|
|
81
|
+
## 示例
|
|
82
|
+
|
|
83
|
+
### 基础用法
|
|
84
|
+
```jsx
|
|
85
|
+
<Sheet list={[
|
|
86
|
+
{ id: 1, name: '小明', age: '10' },
|
|
87
|
+
{ id: 2, name: '小红', age: '15' },
|
|
88
|
+
{ id: 3, name: '小蓝', age: '20' }
|
|
89
|
+
]}>
|
|
90
|
+
<SheetColumn field='id' name='ID' />
|
|
91
|
+
<SheetColumn field='name' name='名字' />
|
|
92
|
+
<SheetColumn field='age' name='年龄' />
|
|
93
|
+
</Sheet>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 自定义列渲染
|
|
97
|
+
```jsx
|
|
98
|
+
<Sheet list={list}>
|
|
99
|
+
<SheetColumn field='id' name='ID' />
|
|
100
|
+
<SheetColumn field='name' name='名字'>
|
|
101
|
+
{(name, index, record) => `我的名字叫${name}, ID是${record.id}`}
|
|
102
|
+
</SheetColumn>
|
|
103
|
+
<SheetColumn field='name' name='名字' render={(name, index, record) => `自定义: ${name}`} />
|
|
104
|
+
</Sheet>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 带操作列
|
|
108
|
+
```jsx
|
|
109
|
+
<Sheet list={list}>
|
|
110
|
+
<SheetColumn field='name' name='名字' />
|
|
111
|
+
<SheetAction>
|
|
112
|
+
{(record, index) => (
|
|
113
|
+
<div>
|
|
114
|
+
<Button onClick={() => alert(record.name)}>删除</Button>
|
|
115
|
+
</div>
|
|
116
|
+
)}
|
|
117
|
+
</SheetAction>
|
|
118
|
+
</Sheet>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 带选择框
|
|
122
|
+
```jsx
|
|
123
|
+
<Sheet list={list}>
|
|
124
|
+
<SheetColumn field='name' name='名字' />
|
|
125
|
+
<SheetSelect
|
|
126
|
+
onSelect={(checked, index) => {
|
|
127
|
+
// 处理选中逻辑,使用 _gm_select 字段标记选中状态
|
|
128
|
+
}}
|
|
129
|
+
onSelectAll={(checked) => {
|
|
130
|
+
// 处理全选逻辑
|
|
131
|
+
}}
|
|
132
|
+
hasSelectTip
|
|
133
|
+
selectAllTip={<div>全选提示信息</div>}
|
|
134
|
+
/>
|
|
135
|
+
<SheetBatchAction>
|
|
136
|
+
<Button>批量删除</Button>
|
|
137
|
+
</SheetBatchAction>
|
|
138
|
+
</Sheet>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 带分页
|
|
142
|
+
```jsx
|
|
143
|
+
<Sheet list={list}>
|
|
144
|
+
<SheetColumn field='name' name='名字' />
|
|
145
|
+
<Pagination
|
|
146
|
+
data={{ count: 70, offset: 0, limit: 10 }}
|
|
147
|
+
toPage={({ offset, limit }) => fetchData({ offset, limit })}
|
|
148
|
+
/>
|
|
149
|
+
</Sheet>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### 可展开行
|
|
153
|
+
```jsx
|
|
154
|
+
<Sheet
|
|
155
|
+
list={list}
|
|
156
|
+
expandedRowRender={(index) => (
|
|
157
|
+
<div>展开行内容:{list[index].name}</div>
|
|
158
|
+
)}
|
|
159
|
+
onExpand={(index) => {
|
|
160
|
+
// 切换展开状态,需要修改数据中 __gm_expanded 字段
|
|
161
|
+
}}
|
|
162
|
+
onExpandAll={() => {
|
|
163
|
+
// 全部展开/收起
|
|
164
|
+
}}
|
|
165
|
+
>
|
|
166
|
+
<SheetColumn field='name' name='名字' />
|
|
167
|
+
</Sheet>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## 注意事项
|
|
171
|
+
- Sheet 组件已废弃,建议使用 Table 组件替代,使用时会输出控制台警告
|
|
172
|
+
- 使用 `SheetSelect` 时,约定数据列表中的 `_gm_select` 字段表示选中状态(bool 类型)
|
|
173
|
+
- `onChange` 和 `onSelect` 的区别:`onChange` 会修改整个 list 数据,`onSelect` 只返回 checked 和 index
|
|
174
|
+
- `SheetBatchAction` 必须配合 `SheetSelect` 使用才会显示
|
|
175
|
+
- `Pagination` 和 `PaginationText` 作为 Sheet 的子组件时会自动排列到表格下方
|
|
176
|
+
- `getTrProps` 返回的属性会传递到每一行的 `<tr>` 上,可用于自定义行样式或属性
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Steps
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
步骤条组件 - 展示操作流程的当前步骤进度,支持标题和描述信息。
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
已包含在 `@gmfe/react` 中,无需额外安装。
|
|
8
|
+
|
|
9
|
+
## 使用
|
|
10
|
+
```jsx
|
|
11
|
+
import Steps from '@gmfe/react/lib/steps'
|
|
12
|
+
|
|
13
|
+
<Steps
|
|
14
|
+
data={[
|
|
15
|
+
{ title: '第一步' },
|
|
16
|
+
{ title: '第二步', description: '这是第二步的描述' },
|
|
17
|
+
{ title: '第三步', description: '这是第三步的描述' }
|
|
18
|
+
]}
|
|
19
|
+
/>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## API
|
|
23
|
+
|
|
24
|
+
### Props
|
|
25
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
26
|
+
|------|------|------|--------|------|
|
|
27
|
+
| data | 步骤数据数组 | `{ title?: string, description?: string }[]` | - | 是 |
|
|
28
|
+
| className | 自定义类名 | `string` | - | 否 |
|
|
29
|
+
|
|
30
|
+
data 数组中每项的字段:
|
|
31
|
+
|
|
32
|
+
| 字段 | 说明 | 类型 | 必填 |
|
|
33
|
+
|------|------|------|------|
|
|
34
|
+
| title | 步骤标题 | `string` | 否 |
|
|
35
|
+
| description | 步骤描述 | `string` | 否 |
|
|
36
|
+
|
|
37
|
+
## 示例
|
|
38
|
+
|
|
39
|
+
### 基础用法
|
|
40
|
+
```jsx
|
|
41
|
+
<Steps
|
|
42
|
+
data={[
|
|
43
|
+
{ title: '第一步' },
|
|
44
|
+
{ title: '第二步', description: '这是第二步' },
|
|
45
|
+
{ title: '第三步', description: '这是第三步' },
|
|
46
|
+
{ title: '第四步', description: '这是第四步' }
|
|
47
|
+
]}
|
|
48
|
+
style={{ width: '300px' }}
|
|
49
|
+
/>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 注意事项
|
|
53
|
+
- 步骤条为垂直方向排列
|
|
54
|
+
- 每个步骤自动显示序号(从 1 开始)
|
|
55
|
+
- title 和 description 均为可选,可以只传 title 不传 description
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Storage
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
本地存储组件 - 基于 localStorage 的封装,提供组件式和静态方法两种使用方式
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
已包含在 `@gmfe/react` 中,无需额外安装。
|
|
8
|
+
|
|
9
|
+
## 使用
|
|
10
|
+
|
|
11
|
+
### 组件方式
|
|
12
|
+
```jsx
|
|
13
|
+
import { Storage } from '@gmfe/react'
|
|
14
|
+
|
|
15
|
+
<Storage name="myKey" value={myValue} />
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 静态方法方式
|
|
19
|
+
```jsx
|
|
20
|
+
import { Storage } from '@gmfe/react'
|
|
21
|
+
|
|
22
|
+
Storage.set('key', 'value')
|
|
23
|
+
Storage.get('key')
|
|
24
|
+
Storage.remove('key')
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## API
|
|
28
|
+
|
|
29
|
+
### 组件 Props
|
|
30
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
31
|
+
|------|------|------|--------|------|
|
|
32
|
+
| name | 存储的键名 | `string` | - | 是 |
|
|
33
|
+
| value | 存储的值,支持 `string`、`object`、`array` | `string \| object \| array` | - | 否 |
|
|
34
|
+
|
|
35
|
+
### 静态方法
|
|
36
|
+
| 方法 | 说明 | 参数 |
|
|
37
|
+
|------|------|------|
|
|
38
|
+
| `Storage.set(key, value)` | 设置存储值 | `key: string, value: any` |
|
|
39
|
+
| `Storage.get(key)` | 获取存储值 | `key: string` |
|
|
40
|
+
| `Storage.remove(key)` | 删除指定存储 | `key: string` |
|
|
41
|
+
| `Storage.clear()` | 清除本域名全部存储(慎用) | - |
|
|
42
|
+
| `Storage.getAll()` | 获取全部存储,以对象形式返回 | - |
|
|
43
|
+
|
|
44
|
+
## 示例
|
|
45
|
+
|
|
46
|
+
### 实时存储
|
|
47
|
+
```jsx
|
|
48
|
+
function App() {
|
|
49
|
+
const [data, setData] = useState('hello')
|
|
50
|
+
return (
|
|
51
|
+
<div>
|
|
52
|
+
<input
|
|
53
|
+
type="text"
|
|
54
|
+
value={data}
|
|
55
|
+
onChange={e => setData(e.target.value)}
|
|
56
|
+
/>
|
|
57
|
+
<Storage name="test" value={data} />
|
|
58
|
+
</div>
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 静态方法
|
|
64
|
+
```jsx
|
|
65
|
+
// 设置值
|
|
66
|
+
Storage.set('username', '张三')
|
|
67
|
+
Storage.set('settings', { theme: 'dark', lang: 'zh' })
|
|
68
|
+
|
|
69
|
+
// 获取值
|
|
70
|
+
Storage.get('username') // '张三'
|
|
71
|
+
|
|
72
|
+
// 删除
|
|
73
|
+
Storage.remove('username')
|
|
74
|
+
|
|
75
|
+
// 获取全部
|
|
76
|
+
Storage.getAll() // { settings: { theme: 'dark', lang: 'zh' } }
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 注意事项
|
|
80
|
+
- 所有存储的 key 会自动添加 `_react-gm_` 前缀,避免与其他存储冲突
|
|
81
|
+
- 组件方式会在 `value` 变化时自动更新存储
|
|
82
|
+
- `Storage.clear()` 会清除本域名下全部 localStorage,请谨慎使用
|
|
83
|
+
- 内部使用 `JSON.stringify` / `JSON.parse` 序列化,支持存储对象和数组
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Switch
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
开关组件 - 用于表示两种状态之间的切换,支持多种颜色类型和自定义开/关文案。
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
已包含在 `@gmfe/react` 中,无需额外安装。
|
|
8
|
+
|
|
9
|
+
## 使用
|
|
10
|
+
```jsx
|
|
11
|
+
import { Switch } from '@gmfe/react'
|
|
12
|
+
|
|
13
|
+
<Switch
|
|
14
|
+
checked={checked}
|
|
15
|
+
onChange={setChecked}
|
|
16
|
+
/>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## API
|
|
20
|
+
|
|
21
|
+
### Props
|
|
22
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
23
|
+
|------|------|------|--------|------|
|
|
24
|
+
| checked | 是否开启 | `bool` | - | 是 |
|
|
25
|
+
| onChange | 状态变化回调,参数为当前 checked 值 | `func` | `_.noop` | 否 |
|
|
26
|
+
| type | 颜色类型 | `'default' \| 'primary' \| 'success' \| 'info' \| 'warning' \| 'danger'` | `'default'` | 否 |
|
|
27
|
+
| disabled | 是否禁用 | `bool` | - | 否 |
|
|
28
|
+
| on | 开启时显示的文案 | `any` | `''` | 否 |
|
|
29
|
+
| off | 关闭时显示的文案 | `any` | `''` | 否 |
|
|
30
|
+
| className | 自定义类名 | `string` | - | 否 |
|
|
31
|
+
| style | 自定义样式 | `object` | - | 否 |
|
|
32
|
+
|
|
33
|
+
## 示例
|
|
34
|
+
|
|
35
|
+
### 基础用法
|
|
36
|
+
```jsx
|
|
37
|
+
<Switch
|
|
38
|
+
checked={isWork}
|
|
39
|
+
onChange={checked => setIsWork(checked)}
|
|
40
|
+
/>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 带文案
|
|
44
|
+
```jsx
|
|
45
|
+
<Switch
|
|
46
|
+
checked={checked}
|
|
47
|
+
onChange={setChecked}
|
|
48
|
+
on='开'
|
|
49
|
+
off='关'
|
|
50
|
+
/>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 不同颜色类型
|
|
54
|
+
```jsx
|
|
55
|
+
<Switch type='default' checked onChange={_.noop} />
|
|
56
|
+
<Switch type='primary' checked onChange={_.noop} />
|
|
57
|
+
<Switch type='success' checked onChange={_.noop} />
|
|
58
|
+
<Switch type='info' checked onChange={_.noop} />
|
|
59
|
+
<Switch type='warning' checked onChange={_.noop} />
|
|
60
|
+
<Switch type='danger' checked onChange={_.noop} />
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 禁用状态
|
|
64
|
+
```jsx
|
|
65
|
+
<Switch disabled checked onChange={_.noop} />
|
|
66
|
+
<Switch disabled onChange={_.noop} />
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 在表单中使用
|
|
70
|
+
```jsx
|
|
71
|
+
<FormItem label='是否工作' required>
|
|
72
|
+
<Switch
|
|
73
|
+
checked={isWork}
|
|
74
|
+
onChange={checked => setIsWork(checked)}
|
|
75
|
+
/>
|
|
76
|
+
</FormItem>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 注意事项
|
|
80
|
+
- `checked` 为必填属性,建议使用受控模式
|
|
81
|
+
- 组件宽度会根据 `on` 和 `off` 文案自动调整,取两者中较宽者
|
|
82
|
+
- 建议保持 `on` 和 `off` 文案宽度一致,以获得更好的视觉效果
|
|
83
|
+
- 开关的最小宽度为 34px
|
|
84
|
+
- 非受控模式下(未传入 `checked`),组件内部自行管理状态
|
|
85
|
+
- 组件挂载时会自动计算开关宽度,确保文案完整显示
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# TableSelect
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
表格选择器组件 - 以表格形式展示选项列表的下拉选择器,支持多列显示和搜索过滤
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
已包含在 `@gmfe/react` 中,无需额外安装。
|
|
8
|
+
|
|
9
|
+
## 使用
|
|
10
|
+
```jsx
|
|
11
|
+
import { TableSelect } from '@gmfe/react'
|
|
12
|
+
|
|
13
|
+
<TableSelect
|
|
14
|
+
data={data}
|
|
15
|
+
columns={columns}
|
|
16
|
+
selected={selected}
|
|
17
|
+
onSelect={selected => setSelected(selected)}
|
|
18
|
+
/>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## API
|
|
22
|
+
|
|
23
|
+
### Props
|
|
24
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
25
|
+
|------|------|------|--------|------|
|
|
26
|
+
| data | 数据源,全部展示,没有内部过滤 | `array` | - | 是 |
|
|
27
|
+
| selected | 当前选中的值 | `any` | - | 否 |
|
|
28
|
+
| onSelect | 选中回调 | `function` | - | 是 |
|
|
29
|
+
| columns | 列定义,类似 ReactTable,格式:`[{Header, accessor, Cell, width}]` | `array` | - | 是 |
|
|
30
|
+
| disabled | 是否禁用 | `bool` | - | 否 |
|
|
31
|
+
| onSearch | 搜索回调,参数为 `(searchValue, data)` | `function` | - | 否 |
|
|
32
|
+
| delay | 搜索防抖延迟(毫秒) | `number` | - | 否 |
|
|
33
|
+
| searchPlaceholder | 搜索框占位文本 | `string` | - | 否 |
|
|
34
|
+
| renderListFilter | 列表过滤函数,参数为 `(searchValue, data)` | `function` | - | 否 |
|
|
35
|
+
| renderListFilterType | 指定默认的过滤类型 | `'default' \| 'pinyin'` | - | 否 |
|
|
36
|
+
| placeholder | 占位文本 | `string` | - | 否 |
|
|
37
|
+
| renderSelected | 定制已选区域的展示,参数为 `selected` | `function` | - | 否 |
|
|
38
|
+
| listHeight | 列表高度 | `string` | - | 否 |
|
|
39
|
+
| popoverType | 弹出框触发方式 | `'focus' \| 'realFocus'` | - | 否 |
|
|
40
|
+
| className | 自定义类名 | `string` | - | 否 |
|
|
41
|
+
| style | 自定义样式 | `object` | - | 否 |
|
|
42
|
+
| popupClassName | 弹出框自定义类名 | `string` | - | 否 |
|
|
43
|
+
| isKeyboard | 是否启用键盘导航 | `bool` | - | 否 |
|
|
44
|
+
| onKeyDown | 键盘事件回调 | `function` | - | 否 |
|
|
45
|
+
|
|
46
|
+
### columns 配置
|
|
47
|
+
| 属性 | 说明 | 类型 | 必填 |
|
|
48
|
+
|------|------|------|------|
|
|
49
|
+
| Header | 列标题 | `string` | 是 |
|
|
50
|
+
| accessor | 字段访问器,支持字符串路径或函数 | `string \| function` | 否 |
|
|
51
|
+
| Cell | 自定义单元格渲染,参数为 `{original, index}` | `function` | 否 |
|
|
52
|
+
| width | 列宽度(px),建议设置 | `number` | 否 |
|
|
53
|
+
|
|
54
|
+
## 示例
|
|
55
|
+
|
|
56
|
+
### 基础用法
|
|
57
|
+
```jsx
|
|
58
|
+
const data = [
|
|
59
|
+
{ value: 'D1', text: '大白菜', original: { sku_id: 'D1', sku_name: '大白菜', supplier: '供应商A' } },
|
|
60
|
+
{ value: 'D2', text: '小白菜', original: { sku_id: 'D2', sku_name: '小白菜', supplier: '供应商B' } }
|
|
61
|
+
]
|
|
62
|
+
|
|
63
|
+
const columns = [
|
|
64
|
+
{ Header: 'ID', accessor: 'original.sku_id', width: 100 },
|
|
65
|
+
{ Header: '名字', accessor: 'original.sku_name', width: 100 },
|
|
66
|
+
{ Header: '供应商', accessor: 'original.supplier', width: 100 }
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
<TableSelect
|
|
70
|
+
data={data}
|
|
71
|
+
columns={columns}
|
|
72
|
+
selected={selected}
|
|
73
|
+
onSelect={selected => setSelected(selected)}
|
|
74
|
+
/>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 自定义单元格渲染
|
|
78
|
+
```jsx
|
|
79
|
+
const columns = [
|
|
80
|
+
{
|
|
81
|
+
Header: '名字',
|
|
82
|
+
accessor: 'original.sku_name',
|
|
83
|
+
width: 100,
|
|
84
|
+
Cell: ({ original }) => <strong>{original.sku_name}</strong>
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## 注意事项
|
|
90
|
+
- 建议为每列设置 `width`,未设置时会在控制台输出警告
|
|
91
|
+
- 数据项需要包含 `value`、`text` 和 `original` 字段
|
|
92
|
+
- 空值单元格会显示为 `-`
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Tabs
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
选项卡组件 - 支持受控和非受控两种模式,可通过 `lazy` 属性开启懒加载渲染。
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
已包含在 `@gmfe/react` 中,无需额外安装。
|
|
8
|
+
|
|
9
|
+
## 使用
|
|
10
|
+
```jsx
|
|
11
|
+
import Tabs from '@gmfe/react/lib/tabs'
|
|
12
|
+
|
|
13
|
+
// 非受控模式
|
|
14
|
+
<Tabs tabs={['选项1', '选项2', '选项3']} defaultActive={0}>
|
|
15
|
+
<div>内容1</div>
|
|
16
|
+
<div>内容2</div>
|
|
17
|
+
<div>内容3</div>
|
|
18
|
+
</Tabs>
|
|
19
|
+
|
|
20
|
+
// 受控模式
|
|
21
|
+
<Tabs
|
|
22
|
+
tabs={['选项1', '选项2', '选项3']}
|
|
23
|
+
active={activeIndex}
|
|
24
|
+
onChange={index => setActiveIndex(index)}
|
|
25
|
+
>
|
|
26
|
+
<div>内容1</div>
|
|
27
|
+
<div>内容2</div>
|
|
28
|
+
<div>内容3</div>
|
|
29
|
+
</Tabs>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## API
|
|
33
|
+
|
|
34
|
+
### Props
|
|
35
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
36
|
+
|------|------|------|--------|------|
|
|
37
|
+
| tabs | 选项卡标题数组 | `string[]` | - | 是 |
|
|
38
|
+
| active | 当前激活的选项卡索引(受控模式) | `number` | - | 否 |
|
|
39
|
+
| defaultActive | 默认激活的选项卡索引(非受控模式) | `number` | `0` | 否 |
|
|
40
|
+
| lazy | 是否懒加载,开启后只渲染当前激活的选项卡内容 | `bool` | `false` | 否 |
|
|
41
|
+
| onChange | 选项卡切换回调,返回当前选中的索引 | `(index: number) => void` | - | 否 |
|
|
42
|
+
| children | 选项卡内容,长度必须与 tabs 数组一致 | `ReactNode[]` | - | 否 |
|
|
43
|
+
|
|
44
|
+
## 示例
|
|
45
|
+
|
|
46
|
+
### 受控模式
|
|
47
|
+
```jsx
|
|
48
|
+
const [active, setActive] = useState(0)
|
|
49
|
+
const tabs = ['第一个', '第二个', '第三个']
|
|
50
|
+
|
|
51
|
+
<Tabs
|
|
52
|
+
tabs={tabs}
|
|
53
|
+
active={active}
|
|
54
|
+
onChange={index => setActive(index)}
|
|
55
|
+
>
|
|
56
|
+
<div>第一个选项卡内容</div>
|
|
57
|
+
<div>第二个选项卡内容</div>
|
|
58
|
+
<div>第三个选项卡内容</div>
|
|
59
|
+
</Tabs>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 非受控模式
|
|
63
|
+
```jsx
|
|
64
|
+
<Tabs tabs={['选项1', '选项2', '选项3']} defaultActive={2}>
|
|
65
|
+
<div>内容1</div>
|
|
66
|
+
<div>内容2</div>
|
|
67
|
+
<div>内容3</div>
|
|
68
|
+
</Tabs>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 懒加载模式
|
|
72
|
+
```jsx
|
|
73
|
+
<Tabs tabs={['选项1', '选项2', '选项3']} lazy>
|
|
74
|
+
<div>内容1</div>
|
|
75
|
+
<div>内容2</div>
|
|
76
|
+
<div>内容3</div>
|
|
77
|
+
</Tabs>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 注意事项
|
|
81
|
+
- `active` 和 `defaultActive` 不能同时使用,否则会输出控制台警告
|
|
82
|
+
- 使用 `active`(受控模式)时,必须同时传入 `onChange`,否则会输出控制台警告
|
|
83
|
+
- `children` 的长度必须与 `tabs` 数组长度一致,否则会报错
|
|
84
|
+
- 非懒加载模式下,所有选项卡内容都会被渲染(通过 `hidden` 类名控制显示/隐藏)
|
|
85
|
+
- 懒加载模式下,只有当前激活的选项卡内容会被渲染,切换时会销毁之前的内容
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# TimeSpan / TimeSpanPicker
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
时间跨度选择组件 - TimeSpan 提供时间点选择面板,TimeSpanPicker 提供带输入框的时间选择器
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
已包含在 `@gmfe/react` 中,无需额外安装。
|
|
8
|
+
|
|
9
|
+
## 使用
|
|
10
|
+
```jsx
|
|
11
|
+
import { TimeSpan, TimeSpanPicker } from '@gmfe/react'
|
|
12
|
+
|
|
13
|
+
// 直接使用时间面板
|
|
14
|
+
<TimeSpan
|
|
15
|
+
selected={date}
|
|
16
|
+
onSelect={date => setDate(date)}
|
|
17
|
+
/>
|
|
18
|
+
|
|
19
|
+
// 带输入框的时间选择器
|
|
20
|
+
<TimeSpanPicker
|
|
21
|
+
date={date}
|
|
22
|
+
onChange={date => setDate(date)}
|
|
23
|
+
/>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## API
|
|
27
|
+
|
|
28
|
+
### TimeSpan Props
|
|
29
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
30
|
+
|------|------|------|--------|------|
|
|
31
|
+
| min | 可选的最小时间(Date 对象),默认一天的开始时间 | `object` | 当天 `00:00` | 否 |
|
|
32
|
+
| max | 可选的最大时间(Date 对象),默认一天的结束时间 | `object` | 当天 `23:59` | 否 |
|
|
33
|
+
| disabledSpan | 禁用时间段函数,参数为 Date 对象,返回 `boolean` | `function` | - | 否 |
|
|
34
|
+
| span | 时间跨度(毫秒),默认为 30 分钟 | `number` | `1800000` (30分钟) | 否 |
|
|
35
|
+
| selected | 当前选中的时间(Date 对象) | `object` | - | 否 |
|
|
36
|
+
| renderItem | 渲染时间文本格式 | `function` | `(value) => moment(value).format('HH:mm')` | 否 |
|
|
37
|
+
| onSelect | 选中回调,参数为 Date 对象 | `function` | `_.noop` | 否 |
|
|
38
|
+
| beginTime | 自定义起始时间点(Date 对象),不传默认从 00:00 开始 | `object` | - | 否 |
|
|
39
|
+
| endTime | 自定义结束时间点(Date 对象) | `object` | - | 否 |
|
|
40
|
+
| enabledEndTimeOfDay | 是否展示 24:00 结束时间 | `bool` | `false` | 否 |
|
|
41
|
+
|
|
42
|
+
### TimeSpanPicker Props
|
|
43
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
44
|
+
|------|------|------|--------|------|
|
|
45
|
+
| date | 当前选中的时间(Date 对象) | `object` | - | 是 |
|
|
46
|
+
| onChange | 选中回调,参数为 Date 对象 | `function` | `_.noop` | 否 |
|
|
47
|
+
| disabled | 是否禁用 | `bool` | - | 否 |
|
|
48
|
+
| min | 可选的最小时间(Date 对象) | `object` | - | 否 |
|
|
49
|
+
| max | 可选的最大时间(Date 对象) | `object` | - | 否 |
|
|
50
|
+
| span | 时间跨度(毫秒),默认为 30 分钟 | `number` | `1800000` (30分钟) | 否 |
|
|
51
|
+
| disabledSpan | 禁用时间段函数,参数为 Date 对象,返回 `boolean` | `function` | - | 否 |
|
|
52
|
+
| renderItem | 渲染时间文本格式 | `function` | `(value) => moment(value).format('HH:mm')` | 否 |
|
|
53
|
+
| beginTime | 自定义起始时间点(Date 对象) | `object` | - | 否 |
|
|
54
|
+
| endTime | 自定义结束时间点(Date 对象) | `object` | - | 否 |
|
|
55
|
+
| className | 自定义类名 | `string` | - | 否 |
|
|
56
|
+
| style | 自定义样式 | `object` | - | 否 |
|
|
57
|
+
| children | 自定义触发器元素 | `any` | - | 否 |
|
|
58
|
+
| isInPopup | 是否嵌套在其他弹出层中 | `bool` | `false` | 否 |
|
|
59
|
+
| enabledEndTimeOfDay | 是否展示 24:00 结束时间 | `bool` | `false` | 否 |
|
|
60
|
+
|
|
61
|
+
## 示例
|
|
62
|
+
|
|
63
|
+
### TimeSpan 基础用法
|
|
64
|
+
```jsx
|
|
65
|
+
<TimeSpan
|
|
66
|
+
selected={date}
|
|
67
|
+
onSelect={date => setDate(date)}
|
|
68
|
+
/>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### TimeSpan 禁用时间段
|
|
72
|
+
```jsx
|
|
73
|
+
<TimeSpan
|
|
74
|
+
max={moment().hour(20).minute(0)}
|
|
75
|
+
disabledSpan={spanMoment =>
|
|
76
|
+
spanMoment.isSameOrAfter(moment('11:00', 'HH:mm')) &&
|
|
77
|
+
spanMoment.isSameOrBefore(moment('18:30', 'HH:mm'))
|
|
78
|
+
}
|
|
79
|
+
selected={date}
|
|
80
|
+
onSelect={date => setDate(date)}
|
|
81
|
+
/>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### TimeSpan 自定义时间跨度
|
|
85
|
+
```jsx
|
|
86
|
+
<TimeSpan
|
|
87
|
+
span={60 * 60 * 1000} // 1小时
|
|
88
|
+
renderItem={value => moment(value).format('HH')}
|
|
89
|
+
selected={date}
|
|
90
|
+
onSelect={date => setDate(date)}
|
|
91
|
+
/>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### TimeSpanPicker 基础用法
|
|
95
|
+
```jsx
|
|
96
|
+
<TimeSpanPicker
|
|
97
|
+
date={date}
|
|
98
|
+
onChange={date => setDate(date)}
|
|
99
|
+
/>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### TimeSpanPicker 自定义触发器
|
|
103
|
+
```jsx
|
|
104
|
+
<TimeSpanPicker date={date} onChange={date => setDate(date)}>
|
|
105
|
+
<span>{date ? moment(date).format('HH:mm') : '请点击选择'}</span>
|
|
106
|
+
</TimeSpanPicker>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## 注意事项
|
|
110
|
+
- 时间面板分三列展示,时间间隔较大时,某一列可能无数据
|
|
111
|
+
- `TimeSpanPicker` 内部使用 `Popover` 和 `Selection` 组件
|
|
112
|
+
- `disabledSpan` 可用于禁用特定时间段(如午休时间)
|