@gmfe/react 2.14.29 → 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 +3 -3
- package/src/component/affix/README.md +54 -0
- package/src/component/box/README.md +142 -0
- 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_v2/README.md +99 -0
- package/src/component/uploader/README.md +104 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# List
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
列表组件 - 支持单选、多选、分组展示和滚动定位的通用列表
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
已包含在 `@gmfe/react` 中,无需额外安装。
|
|
8
|
+
|
|
9
|
+
## 使用
|
|
10
|
+
```jsx
|
|
11
|
+
import { List } from '@gmfe/react'
|
|
12
|
+
|
|
13
|
+
// 基础单选
|
|
14
|
+
<List
|
|
15
|
+
data={[
|
|
16
|
+
{ value: '南山', text: '南山' },
|
|
17
|
+
{ value: '福田', text: '福田', disabled: true },
|
|
18
|
+
{ value: '龙岗', text: '龙岗' }
|
|
19
|
+
]}
|
|
20
|
+
selected={selected}
|
|
21
|
+
onSelect={selected => setSelected(selected)}
|
|
22
|
+
/>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## API
|
|
26
|
+
|
|
27
|
+
### Props
|
|
28
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
29
|
+
|------|------|------|--------|------|
|
|
30
|
+
| data | 数据源,普通列表格式:`[{value, text, disabled}]`,分组列表格式:`[{label, children: [{value, text, disabled}]}]` | `array` | - | 是 |
|
|
31
|
+
| selected | 选中值,单选为 value,多选为 `[value, value]`。多选请务必提供数组 | `any` | - | 否 |
|
|
32
|
+
| onSelect | 选中回调,单选返回 value,多选返回 `[value, value]` | `function` | `_.noop` | 否 |
|
|
33
|
+
| multiple | 是否多选 | `bool` | `false` | 否 |
|
|
34
|
+
| isGroupList | 数据是否为分组格式 | `bool` | `false` | 否 |
|
|
35
|
+
| renderItem | 自定义列表项渲染,参数为 `(item, index)` | `function` | `(item) => item.text` | 否 |
|
|
36
|
+
| willActiveIndex | 即将激活的索引,用于键盘导航 | `number` | - | 否 |
|
|
37
|
+
| isScrollTo | 是否滚动到选中项 | `bool` | `false` | 否 |
|
|
38
|
+
| getItemProps | 给列表项更多自定义属性,参数为 `(item)` | `function` | `() => ({})` | 否 |
|
|
39
|
+
| className | 自定义类名 | `string` | - | 否 |
|
|
40
|
+
| style | 自定义样式 | `object` | - | 否 |
|
|
41
|
+
|
|
42
|
+
## 示例
|
|
43
|
+
|
|
44
|
+
### 基础单选
|
|
45
|
+
```jsx
|
|
46
|
+
<List
|
|
47
|
+
data={data}
|
|
48
|
+
selected={selected}
|
|
49
|
+
onSelect={selected => setSelected(selected)}
|
|
50
|
+
/>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 多选
|
|
54
|
+
```jsx
|
|
55
|
+
<List
|
|
56
|
+
multiple
|
|
57
|
+
data={data}
|
|
58
|
+
selected={selected}
|
|
59
|
+
onSelect={selected => setSelected(selected)}
|
|
60
|
+
/>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 分组列表
|
|
64
|
+
```jsx
|
|
65
|
+
<List
|
|
66
|
+
data={groupData}
|
|
67
|
+
isGroupList
|
|
68
|
+
selected={selected}
|
|
69
|
+
onSelect={selected => setSelected(selected)}
|
|
70
|
+
/>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 自定义渲染项
|
|
74
|
+
```jsx
|
|
75
|
+
<List
|
|
76
|
+
data={data}
|
|
77
|
+
selected={selected}
|
|
78
|
+
onSelect={selected => setSelected(selected)}
|
|
79
|
+
renderItem={(item, index) => item.text + index}
|
|
80
|
+
/>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 滚动到选中项
|
|
84
|
+
```jsx
|
|
85
|
+
<List
|
|
86
|
+
data={data}
|
|
87
|
+
selected="罗湖5"
|
|
88
|
+
onSelect={selected => setSelected(selected)}
|
|
89
|
+
isScrollTo
|
|
90
|
+
style={{ maxHeight: '100px' }}
|
|
91
|
+
/>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## 注意事项
|
|
95
|
+
- 多选情况下 `selected` 请务必传递数组类型
|
|
96
|
+
- `data` 中单个项支持 `disabled` 属性来禁用该项
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Loading
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
加载中组件 - 提供多种加载状态展示方式,包含基础旋转加载、区域块加载和全屏加载三种模式
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
已包含在 `@gmfe/react` 中,无需额外安装。
|
|
8
|
+
|
|
9
|
+
## 使用
|
|
10
|
+
```jsx
|
|
11
|
+
import { Loading, LoadingChunk, LoadingFullScreen } from '@gmfe/react'
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## API
|
|
15
|
+
|
|
16
|
+
### Loading 组件 Props
|
|
17
|
+
|
|
18
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
19
|
+
|------|------|------|--------|------|
|
|
20
|
+
| text | 加载文字 | `string` | - | 否 |
|
|
21
|
+
| size | 加载图标尺寸(像素) | `number` | `40` | 否 |
|
|
22
|
+
| className | 自定义类名 | `string` | - | 否 |
|
|
23
|
+
| style | 自定义样式 | `object` | - | 否 |
|
|
24
|
+
|
|
25
|
+
### LoadingChunk 组件 Props
|
|
26
|
+
|
|
27
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
28
|
+
|------|------|------|--------|------|
|
|
29
|
+
| loading | 是否显示加载状态 | `bool` | `false` | 否 |
|
|
30
|
+
| children | 加载区域内容 | `any` | - | 否 |
|
|
31
|
+
| text | 加载文字 | `string` | - | 否 |
|
|
32
|
+
| size | 加载图标尺寸(像素) | `number` | `50` | 否 |
|
|
33
|
+
| className | 自定义类名 | `string` | - | 否 |
|
|
34
|
+
| style | 自定义样式 | `object` | - | 否 |
|
|
35
|
+
|
|
36
|
+
### LoadingChunk 静态方法
|
|
37
|
+
|
|
38
|
+
无静态方法,仅作为组件使用。
|
|
39
|
+
|
|
40
|
+
### LoadingFullScreen 静态方法
|
|
41
|
+
|
|
42
|
+
| 方法 | 说明 | 参数 | 返回值 |
|
|
43
|
+
|------|------|------|--------|
|
|
44
|
+
| `LoadingFullScreen.render(props)` | 显示全屏加载 | `props: Object` | - |
|
|
45
|
+
| `LoadingFullScreen.hide()` | 隐藏全屏加载 | - | - |
|
|
46
|
+
|
|
47
|
+
#### LoadingFullScreen Props
|
|
48
|
+
|
|
49
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
50
|
+
|------|------|------|--------|------|
|
|
51
|
+
| text | 加载文字 | `string` | - | 否 |
|
|
52
|
+
| size | 加载图标尺寸(像素) | `number` | `50` | 否 |
|
|
53
|
+
| className | 自定义类名 | `string` | - | 否 |
|
|
54
|
+
| style | 自定义样式 | `object` | - | 否 |
|
|
55
|
+
|
|
56
|
+
## 示例
|
|
57
|
+
|
|
58
|
+
### 基础旋转加载
|
|
59
|
+
|
|
60
|
+
```jsx
|
|
61
|
+
<Loading />
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 自定义大小
|
|
65
|
+
|
|
66
|
+
```jsx
|
|
67
|
+
<Loading size={100} />
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 带文字的加载
|
|
71
|
+
|
|
72
|
+
```jsx
|
|
73
|
+
<Loading text="正在加载中..." />
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 区域块加载(LoadingChunk)
|
|
77
|
+
|
|
78
|
+
```jsx
|
|
79
|
+
<LoadingChunk loading size={60}>
|
|
80
|
+
<div style={{ height: '100px' }}>
|
|
81
|
+
这是被遮罩的内容区域
|
|
82
|
+
</div>
|
|
83
|
+
</LoadingChunk>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 区域块加载带文字
|
|
87
|
+
|
|
88
|
+
```jsx
|
|
89
|
+
<LoadingChunk loading size={60} text="拼命加载中...">
|
|
90
|
+
<div style={{ height: '100px' }}>
|
|
91
|
+
被遮罩的内容
|
|
92
|
+
</div>
|
|
93
|
+
</LoadingChunk>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 全屏加载
|
|
97
|
+
|
|
98
|
+
```jsx
|
|
99
|
+
// 显示全屏加载
|
|
100
|
+
LoadingFullScreen.render({
|
|
101
|
+
text: '拼命加载中...'
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
// 3秒后自动关闭
|
|
105
|
+
setTimeout(() => {
|
|
106
|
+
LoadingFullScreen.hide()
|
|
107
|
+
}, 3000)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 注意事项
|
|
111
|
+
|
|
112
|
+
- `Loading` 是基础的旋转加载图标组件,可嵌入到任何容器中。
|
|
113
|
+
- `LoadingChunk` 在内容区域上叠加一层遮罩和加载图标,适合包裹在卡片、表格等局部区域使用。不传 `children` 时会自动生成一个高度为 `size` 的占位区域。
|
|
114
|
+
- `LoadingFullScreen` 使用命令式调用,显示全屏加载遮罩时会自动在 `document.body` 上添加 `gm-loading-body-overflow` 类以禁止页面滚动,隐藏时自动移除。
|
|
115
|
+
- 全屏加载默认图标尺寸为 50px,大于基础 Loading 的默认 40px。
|
|
116
|
+
- `LoadingChunk` 的 `loading` 属性默认为 `false`,需要手动设置为 `true` 才会显示加载状态。
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Mask
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
遮罩层组件 - 提供可自定义透明度的半透明黑色遮罩层,适用于覆盖在内容上方
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
已包含在 `@gmfe/react` 中,无需额外安装。
|
|
8
|
+
|
|
9
|
+
## 使用
|
|
10
|
+
```jsx
|
|
11
|
+
import { Mask } from '@gmfe/react'
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## API
|
|
15
|
+
|
|
16
|
+
### Props
|
|
17
|
+
|
|
18
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
19
|
+
|------|------|------|--------|------|
|
|
20
|
+
| opacity | 遮罩透明度,取值范围 0~1 | `number` | `0.5` | 否 |
|
|
21
|
+
| className | 自定义类名 | `string` | - | 否 |
|
|
22
|
+
| style | 自定义样式 | `object` | - | 否 |
|
|
23
|
+
|
|
24
|
+
## 示例
|
|
25
|
+
|
|
26
|
+
### 基础用法
|
|
27
|
+
|
|
28
|
+
```jsx
|
|
29
|
+
<Mask />
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 自定义透明度
|
|
33
|
+
|
|
34
|
+
```jsx
|
|
35
|
+
// 较浅的遮罩
|
|
36
|
+
<Mask opacity={0.2} />
|
|
37
|
+
|
|
38
|
+
// 较深的遮罩
|
|
39
|
+
<Mask opacity={0.8} />
|
|
40
|
+
|
|
41
|
+
// 完全透明(仅作为覆盖层)
|
|
42
|
+
<Mask opacity={0} />
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 配合定位使用
|
|
46
|
+
|
|
47
|
+
```jsx
|
|
48
|
+
<div style={{ position: 'relative' }}>
|
|
49
|
+
<div>被遮罩的内容</div>
|
|
50
|
+
<Mask
|
|
51
|
+
style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 }}
|
|
52
|
+
opacity={0.6}
|
|
53
|
+
/>
|
|
54
|
+
</div>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 注意事项
|
|
58
|
+
|
|
59
|
+
- Mask 组件仅渲染一个 `div` 元素,不会自动铺满父容器,需要通过 CSS 定位(如 `position: absolute`)来控制覆盖范围。
|
|
60
|
+
- `opacity` 通过 `rgba(0,0,0, opacity)` 设置背景色,值越大遮罩越深。
|
|
61
|
+
- 遮罩层会透传其他 HTML 属性(通过 `...rest`),可以绑定 `onClick` 等事件。
|
|
62
|
+
- 如需带关闭功能的遮罩层,建议使用 Modal 或 Drawer 组件。
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Modal
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
模态框组件 - 用于在页面中显示模态对话框,支持多种尺寸和展示样式,包含标准模态框、右侧抽屉式模态框和简洁模态框三种变体
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
已包含在 `@gmfe/react` 中,无需额外安装。
|
|
8
|
+
|
|
9
|
+
## 使用
|
|
10
|
+
```jsx
|
|
11
|
+
import { Modal, RightSideModal, CleanModal } from '@gmfe/react'
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## API
|
|
15
|
+
|
|
16
|
+
### Modal 组件 Props
|
|
17
|
+
|
|
18
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
19
|
+
|------|------|------|--------|------|
|
|
20
|
+
| show | 是否显示 | `bool` | - | 是 |
|
|
21
|
+
| type | 模态框类型,设置后使用简化样式,不设置则为标准模态框 | `string` | - | 否 |
|
|
22
|
+
| title | 标题 | `string` | - | 否 |
|
|
23
|
+
| size | 尺寸 | `'lg' \| 'md' \| 'sm'` | `'md'` | 否 |
|
|
24
|
+
| children | 内容 | `any` | - | 否 |
|
|
25
|
+
| onHide | 关闭回调 | `func` | `_.noop` | 否 |
|
|
26
|
+
| onOk | 确认回调(type 模式下使用) | `func` | - | 否 |
|
|
27
|
+
| onCancel | 取消回调(type 模式下使用) | `func` | - | 否 |
|
|
28
|
+
| disableMaskClose | 是否禁止点击遮罩关闭 | `bool` | `false` | 否 |
|
|
29
|
+
| opacityMask | 是否使用半透明遮罩 | `bool` | `false` | 否 |
|
|
30
|
+
| noContentPadding | 是否取消内容区内边距 | `bool` | `false` | 否 |
|
|
31
|
+
| noCloseBtn | 是否隐藏关闭按钮 | `bool` | `false` | 否 |
|
|
32
|
+
| okBtnClassName | 确认按钮的自定义 className(type 模式下使用) | `string` | - | 否 |
|
|
33
|
+
| className | 自定义类名 | `string` | - | 否 |
|
|
34
|
+
| style | 自定义样式 | `object` | - | 否 |
|
|
35
|
+
|
|
36
|
+
### Modal 静态方法
|
|
37
|
+
|
|
38
|
+
| 方法 | 说明 | 参数 | 返回值 |
|
|
39
|
+
|------|------|------|--------|
|
|
40
|
+
| `Modal.render(props)` | 通过命令式渲染模态框 | `props: Object` | - |
|
|
41
|
+
| `Modal.hide()` | 隐藏命令式渲染的模态框 | - | - |
|
|
42
|
+
|
|
43
|
+
> 注意:`Modal.confirm`、`Modal.info`、`Modal.success`、`Modal.warning` 已废弃,请使用 `Dialog` 组件替代。
|
|
44
|
+
|
|
45
|
+
### RightSideModal 静态方法
|
|
46
|
+
|
|
47
|
+
| 方法 | 说明 | 参数 | 返回值 |
|
|
48
|
+
|------|------|------|--------|
|
|
49
|
+
| `RightSideModal.render(props)` | 从右侧滑入显示模态框 | `props: Object` | - |
|
|
50
|
+
| `RightSideModal.hide()` | 隐藏右侧模态框 | - | - |
|
|
51
|
+
|
|
52
|
+
#### RightSideModal Props
|
|
53
|
+
|
|
54
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
55
|
+
|------|------|------|--------|------|
|
|
56
|
+
| show | 是否显示 | `bool` | - | 是 |
|
|
57
|
+
| onHide | 关闭回调 | `func` | `_.noop` | 否 |
|
|
58
|
+
| disableMaskClose | 是否禁止点击遮罩关闭 | `bool` | `false` | 否 |
|
|
59
|
+
| size | 尺寸 | `'lg' \| 'md' \| 'sm'` | `'md'` | 否 |
|
|
60
|
+
| title | 标题 | `string` | - | 否 |
|
|
61
|
+
| okBtnClassName | 确认按钮的自定义 className | `string` | - | 否 |
|
|
62
|
+
| noContentPadding | 是否取消内容区内边距 | `bool` | `false` | 否 |
|
|
63
|
+
|
|
64
|
+
### CleanModal 静态方法
|
|
65
|
+
|
|
66
|
+
| 方法 | 说明 | 参数 | 返回值 |
|
|
67
|
+
|------|------|------|--------|
|
|
68
|
+
| `CleanModal.render(props)` | 显示简洁样式的模态框(无阴影边框) | `props: Object` | - |
|
|
69
|
+
| `CleanModal.hide()` | 隐藏简洁模态框 | - | - |
|
|
70
|
+
|
|
71
|
+
#### CleanModal Props
|
|
72
|
+
|
|
73
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
74
|
+
|------|------|------|--------|------|
|
|
75
|
+
| show | 是否显示 | `bool` | - | 是 |
|
|
76
|
+
| onHide | 关闭回调 | `func` | `_.noop` | 否 |
|
|
77
|
+
| disableMaskClose | 是否禁止点击遮罩关闭 | `bool` | `false` | 否 |
|
|
78
|
+
| size | 尺寸 | `'lg' \| 'md' \| 'sm'` | `'md'` | 否 |
|
|
79
|
+
| title | 标题 | `string` | - | 否 |
|
|
80
|
+
| okBtnClassName | 确认按钮的自定义 className | `string` | - | 否 |
|
|
81
|
+
| noContentPadding | 是否取消内容区内边距 | `bool` | `false` | 否 |
|
|
82
|
+
|
|
83
|
+
## 示例
|
|
84
|
+
|
|
85
|
+
### 标准模态框 - 命令式渲染
|
|
86
|
+
|
|
87
|
+
```jsx
|
|
88
|
+
// 显示
|
|
89
|
+
Modal.render({
|
|
90
|
+
show: true,
|
|
91
|
+
title: '标题',
|
|
92
|
+
children: <div>模态框内容</div>,
|
|
93
|
+
onHide: () => {
|
|
94
|
+
Modal.hide()
|
|
95
|
+
}
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
// 隐藏
|
|
99
|
+
Modal.hide()
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 右侧抽屉式模态框
|
|
103
|
+
|
|
104
|
+
```jsx
|
|
105
|
+
// 显示
|
|
106
|
+
RightSideModal.render({
|
|
107
|
+
show: true,
|
|
108
|
+
title: '详情',
|
|
109
|
+
children: <div>右侧抽屉内容</div>,
|
|
110
|
+
onHide: () => {
|
|
111
|
+
RightSideModal.hide()
|
|
112
|
+
}
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
// 隐藏
|
|
116
|
+
RightSideModal.hide()
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 简洁模态框
|
|
120
|
+
|
|
121
|
+
```jsx
|
|
122
|
+
// 显示
|
|
123
|
+
CleanModal.render({
|
|
124
|
+
show: true,
|
|
125
|
+
title: '编辑信息',
|
|
126
|
+
children: <div>简洁模态框内容</div>,
|
|
127
|
+
onHide: () => {
|
|
128
|
+
CleanModal.hide()
|
|
129
|
+
}
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
// 隐藏
|
|
133
|
+
CleanModal.hide()
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 禁止遮罩关闭
|
|
137
|
+
|
|
138
|
+
```jsx
|
|
139
|
+
Modal.render({
|
|
140
|
+
show: true,
|
|
141
|
+
disableMaskClose: true,
|
|
142
|
+
title: '不可关闭',
|
|
143
|
+
children: <div>点击遮罩不会关闭</div>,
|
|
144
|
+
onHide: () => Modal.hide()
|
|
145
|
+
})
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## 注意事项
|
|
149
|
+
|
|
150
|
+
- Modal 是 Dialog 组件的底层依赖,一般情况下建议优先使用 `Dialog` 组件的静态方法。
|
|
151
|
+
- Modal 的静态方法 `confirm`、`info`、`success`、`warning` 已被标记为废弃(Deprecated),调用时会在控制台输出警告。
|
|
152
|
+
- 按下 `Esc` 键可以关闭模态框(通过 `onHide` 回调)。
|
|
153
|
+
- `RightSideModal` 使用 `fade-in-left` 动画从右侧滑入。
|
|
154
|
+
- `CleanModal` 提供无阴影、无边框的简洁展示风格。
|
|
155
|
+
- `opacityMask` 设置为 `true` 时,遮罩将变为半透明样式,同时模态框会显示边框和底部阴影。
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# MoreSelect
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
增强选择组件 - 支持单选、多选、分组列表、搜索过滤(含拼音搜索)和远程搜索等功能。
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
已包含在 `@gmfe/react` 中,无需额外安装。
|
|
8
|
+
|
|
9
|
+
## 使用
|
|
10
|
+
```jsx
|
|
11
|
+
import { MoreSelect } from '@gmfe/react'
|
|
12
|
+
|
|
13
|
+
const list = [
|
|
14
|
+
{ value: 1, text: '南山' },
|
|
15
|
+
{ value: 2, text: '福田' },
|
|
16
|
+
{ value: 3, text: '罗湖' }
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
<MoreSelect
|
|
20
|
+
data={list}
|
|
21
|
+
selected={selected}
|
|
22
|
+
onSelect={item => setSelected(item)}
|
|
23
|
+
/>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## API
|
|
27
|
+
|
|
28
|
+
### Props
|
|
29
|
+
| 属性 | 说明 | 类型 | 默认值 | 必填 |
|
|
30
|
+
|------|------|------|--------|------|
|
|
31
|
+
| data | 选项数据,格式 `[{value, text}]` | `array` | - | 是 |
|
|
32
|
+
| selected | 当前选中的项(单选为 item 对象,多选为 item 数组) | `object \| array` | - | 否 |
|
|
33
|
+
| onSelect | 选择回调,单选返回 item,多选返回 item 数组 | `func` | - | 是 |
|
|
34
|
+
| multiple | 是否多选 | `bool` | - | 否 |
|
|
35
|
+
| disabled | 是否禁用 | `bool` | - | 否 |
|
|
36
|
+
| disabledClose | 单选时禁止显示清除按钮 | `bool` | - | 否 |
|
|
37
|
+
| placeholder | 占位文字 | `string` | - | 否 |
|
|
38
|
+
| searchPlaceholder | 搜索框占位文字 | `string` | - | 否 |
|
|
39
|
+
| onSearch | 搜索回调,支持同步(直接返回过滤后的数据)或异步(返回 Promise) | `func` | - | 否 |
|
|
40
|
+
| delay | 搜索防抖延迟(毫秒) | `number` | `500` | 否 |
|
|
41
|
+
| renderListFilter | 自定义过滤函数,参数为 (data, searchValue) | `func` | - | 否 |
|
|
42
|
+
| renderListFilterType | 过滤类型,default 为默认文本匹配,pinyin 为拼音匹配 | `'default' \| 'pinyin'` | `'default'` | 否 |
|
|
43
|
+
| renderSelected | 自定义已选项渲染函数,参数为 item | `func` | `item => item.text` | 否 |
|
|
44
|
+
| renderListItem | 自定义列表项渲染函数,参数为 item | `func` | `item => item.text` | 否 |
|
|
45
|
+
| listHeight | 列表高度 | `string` | `'180px'` | 否 |
|
|
46
|
+
| isGroupList | 是否分组列表 | `bool` | - | 否 |
|
|
47
|
+
| popoverType | 弹出层触发方式 | `'focus' \| 'realFocus'` | `'focus'` | 否 |
|
|
48
|
+
| isInPopup | 是否在弹出层中 | `bool` | - | 否 |
|
|
49
|
+
| isEnableChineseCheck | 是否开启中文输入检查 | `bool` | - | 否 |
|
|
50
|
+
| isKeyboard | 是否启用全键盘操作 | `bool` | - | 否 |
|
|
51
|
+
| onKeyDown | 键盘事件回调 | `func` | `_.noop` | 否 |
|
|
52
|
+
| className | 自定义类名 | `string` | - | 否 |
|
|
53
|
+
| style | 自定义样式 | `object` | - | 否 |
|
|
54
|
+
| popupClassName | 弹出层自定义类名 | `string` | - | 否 |
|
|
55
|
+
|
|
56
|
+
### 方法(通过 ref 调用)
|
|
57
|
+
| 方法 | 说明 |
|
|
58
|
+
|------|------|
|
|
59
|
+
| apiDoFocus | 聚焦到选择框 |
|
|
60
|
+
| apiDoSelectWillActive | 选择键盘高亮的当前项 |
|
|
61
|
+
|
|
62
|
+
## 示例
|
|
63
|
+
|
|
64
|
+
### 单选
|
|
65
|
+
```jsx
|
|
66
|
+
const list = [
|
|
67
|
+
{ value: 1, text: '南山' },
|
|
68
|
+
{ value: 2, text: '福田' },
|
|
69
|
+
{ value: 3, text: '罗湖' }
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
<MoreSelect
|
|
73
|
+
data={list}
|
|
74
|
+
selected={selected}
|
|
75
|
+
onSelect={selected => setSelected(selected)}
|
|
76
|
+
/>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 多选
|
|
80
|
+
```jsx
|
|
81
|
+
<MoreSelect
|
|
82
|
+
multiple
|
|
83
|
+
data={list}
|
|
84
|
+
selected={mulSelected}
|
|
85
|
+
onSelect={selected => setMulSelected(selected)}
|
|
86
|
+
/>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 禁用状态
|
|
90
|
+
```jsx
|
|
91
|
+
<MoreSelect
|
|
92
|
+
disabled
|
|
93
|
+
data={list}
|
|
94
|
+
selected={selected}
|
|
95
|
+
onSelect={selected => setSelected(selected)}
|
|
96
|
+
/>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 拼音搜索
|
|
100
|
+
```jsx
|
|
101
|
+
<MoreSelect
|
|
102
|
+
data={list}
|
|
103
|
+
selected={selected}
|
|
104
|
+
onSelect={selected => setSelected(selected)}
|
|
105
|
+
renderListFilterType='pinyin'
|
|
106
|
+
/>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 远程搜索(异步)
|
|
110
|
+
```jsx
|
|
111
|
+
<MoreSelect
|
|
112
|
+
data={list}
|
|
113
|
+
selected={selected}
|
|
114
|
+
onSelect={selected => setSelected(selected)}
|
|
115
|
+
onSearch={searchValue => {
|
|
116
|
+
return new Promise(resolve => {
|
|
117
|
+
setTimeout(() => {
|
|
118
|
+
resolve(list.filter(item => item.text.includes(searchValue)))
|
|
119
|
+
}, 1000)
|
|
120
|
+
})
|
|
121
|
+
}}
|
|
122
|
+
/>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### 远程搜索(同步)
|
|
126
|
+
```jsx
|
|
127
|
+
<MoreSelect
|
|
128
|
+
data={list}
|
|
129
|
+
selected={selected}
|
|
130
|
+
onSelect={selected => setSelected(selected)}
|
|
131
|
+
onSearch={searchValue => {
|
|
132
|
+
// 同步直接返回过滤后的数据
|
|
133
|
+
return list.filter(item => item.text.includes(searchValue))
|
|
134
|
+
}}
|
|
135
|
+
/>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 分组列表
|
|
139
|
+
```jsx
|
|
140
|
+
const groupData = [
|
|
141
|
+
{
|
|
142
|
+
label: '南山',
|
|
143
|
+
children: [
|
|
144
|
+
{ value: 1, text: '科技园' },
|
|
145
|
+
{ value: 2, text: '大冲' }
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
label: '宝安',
|
|
150
|
+
children: [
|
|
151
|
+
{ value: 21, text: '西乡' },
|
|
152
|
+
{ value: 22, text: '固戍' }
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
|
|
157
|
+
<MoreSelect
|
|
158
|
+
isGroupList
|
|
159
|
+
data={groupData}
|
|
160
|
+
selected={selected}
|
|
161
|
+
onSelect={selected => setSelected(selected)}
|
|
162
|
+
/>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 自定义占位文字
|
|
166
|
+
```jsx
|
|
167
|
+
<MoreSelect
|
|
168
|
+
data={list}
|
|
169
|
+
selected={selected}
|
|
170
|
+
onSelect={selected => setSelected(selected)}
|
|
171
|
+
placeholder='请选择'
|
|
172
|
+
searchPlaceholder='搜索...'
|
|
173
|
+
/>
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## 注意事项
|
|
177
|
+
- `selected` 传入的是 item 对象(包含 value 和 text),而非 value 值,这是为了解耦 selected 和 data 的关系
|
|
178
|
+
- `onSelect` 回调单选时返回单个 item 对象,多选时返回 item 数组
|
|
179
|
+
- `onSearch` 支持同步和异步两种模式:直接返回数组为同步,返回 Promise 为异步
|
|
180
|
+
- `renderListFilterType='pinyin'` 时支持中文拼音搜索(全拼和首字母)
|
|
181
|
+
- `isEnableChineseCheck` 开启后会监听中文输入法的 composition 事件,避免拼音输入时触发搜索
|
|
182
|
+
- 默认搜索防抖延迟为 500ms,可通过 `delay` 属性调整
|
|
183
|
+
- 分组列表数据格式为 `[{ label, children: [{value, text}] }]`
|
|
184
|
+
- `disabledClose` 仅在单选模式下有效,用于隐藏清除按钮
|
|
185
|
+
- 列表打开时会自动滚动到当前选中项
|