@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.
Files changed (72) hide show
  1. package/README.md +179 -0
  2. package/package.json +4 -4
  3. package/src/component/affix/README.md +54 -0
  4. package/src/component/box/README.md +142 -0
  5. package/src/component/box/box_table.js +11 -18
  6. package/src/component/button/README.md +90 -0
  7. package/src/component/calendar/README.md +98 -0
  8. package/src/component/carousel/README.md +51 -0
  9. package/src/component/cascader/README.md +139 -0
  10. package/src/component/checkbox/README.md +120 -0
  11. package/src/component/collapse/README.md +80 -0
  12. package/src/component/color_picker/README.md +50 -0
  13. package/src/component/date_picker/README.md +144 -0
  14. package/src/component/date_range_picker/README.md +126 -0
  15. package/src/component/dialog/README.md +149 -0
  16. package/src/component/divider/README.md +41 -0
  17. package/src/component/drawer/README.md +83 -0
  18. package/src/component/drop_down/README.md +105 -0
  19. package/src/component/drop_select/README.md +146 -0
  20. package/src/component/dropper/README.md +55 -0
  21. package/src/component/editable_text/README.md +68 -0
  22. package/src/component/filter_select/README.md +104 -0
  23. package/src/component/flex/README.md +88 -0
  24. package/src/component/flip_number/README.md +53 -0
  25. package/src/component/form/README.md +199 -0
  26. package/src/component/function_set/README.md +93 -0
  27. package/src/component/grid/README.md +93 -0
  28. package/src/component/icon_down_up/README.md +43 -0
  29. package/src/component/image_preview/README.md +57 -0
  30. package/src/component/img_uploader/README.md +91 -0
  31. package/src/component/input/README.md +49 -0
  32. package/src/component/input_number/README.md +93 -0
  33. package/src/component/layout_root/README.md +181 -0
  34. package/src/component/lazy_img/README.md +59 -0
  35. package/src/component/level_list/README.md +75 -0
  36. package/src/component/level_select/README.md +78 -0
  37. package/src/component/list/README.md +96 -0
  38. package/src/component/loading/README.md +116 -0
  39. package/src/component/mask/README.md +62 -0
  40. package/src/component/modal/README.md +155 -0
  41. package/src/component/more_select/README.md +185 -0
  42. package/src/component/nav/README.md +101 -0
  43. package/src/component/nprogress/README.md +135 -0
  44. package/src/component/pagination/README.md +87 -0
  45. package/src/component/picture_preview/README.md +50 -0
  46. package/src/component/popover/README.md +146 -0
  47. package/src/component/popup/README.md +121 -0
  48. package/src/component/price/README.md +72 -0
  49. package/src/component/progress/README.md +98 -0
  50. package/src/component/progress_circle/README.md +92 -0
  51. package/src/component/radio/README.md +101 -0
  52. package/src/component/recommend_input/README.md +75 -0
  53. package/src/component/select/README.md +120 -0
  54. package/src/component/selection/README.md +87 -0
  55. package/src/component/sheet/README.md +176 -0
  56. package/src/component/steps/README.md +55 -0
  57. package/src/component/storage/README.md +83 -0
  58. package/src/component/switch/README.md +85 -0
  59. package/src/component/table_select/README.md +92 -0
  60. package/src/component/tabs/README.md +85 -0
  61. package/src/component/time_span/README.md +112 -0
  62. package/src/component/tip/README.md +105 -0
  63. package/src/component/tool_tip/README.md +84 -0
  64. package/src/component/transfer/README.md +98 -0
  65. package/src/component/transfer_v2/README.md +85 -0
  66. package/src/component/tree/README.md +99 -0
  67. package/src/component/tree/index.js +1 -1
  68. package/src/component/tree_v2/README.md +99 -0
  69. package/src/component/uploader/README.md +104 -0
  70. package/src/index.js +1 -3
  71. package/LICENSE +0 -16
  72. package/src/hoc/sticky_layout.js +0 -157
@@ -0,0 +1,139 @@
1
+ # Cascader
2
+
3
+ ## 简介
4
+ 级联选择组件 - 支持多级数据联动选择,可搜索过滤,提供 Cascader(基础级联)和 CascaderSelect(可选多级值)两个组件。
5
+
6
+ ## 安装
7
+ 已包含在 `@gmfe/react` 中,无需额外安装。
8
+
9
+ ## 使用
10
+ ```jsx
11
+ import { Cascader } from '@gmfe/react'
12
+
13
+ const data = [
14
+ {
15
+ value: '110000',
16
+ name: '北京市',
17
+ children: [
18
+ {
19
+ value: '150600000000',
20
+ name: '东城区',
21
+ children: [
22
+ { value: '150600800000', name: '东单' },
23
+ { value: '150600900000', name: '东四' }
24
+ ]
25
+ }
26
+ ]
27
+ }
28
+ ]
29
+
30
+ <Cascader
31
+ data={data}
32
+ value={selected}
33
+ onChange={ids => setSelected(ids)}
34
+ />
35
+ ```
36
+
37
+ ## API
38
+
39
+ ### Cascader Props
40
+ | 属性 | 说明 | 类型 | 默认值 | 必填 |
41
+ |------|------|------|--------|------|
42
+ | data | 级联数据,格式 `[{value, name, children: [{...}]}]` | `array` | - | 是 |
43
+ | value | 当前选中的值数组,如 `[1, 2, 3]` | `array` | - | 否 |
44
+ | defaultValue | 默认选中的值数组 | `array` | - | 否 |
45
+ | onChange | 选择变化回调,参数为选中的值数组 | `func` | `_.noop` | 否 |
46
+ | inputProps | 传递给内部 input 的属性(没有 children 时有效) | `object` | `{}` | 否 |
47
+ | valueRender | 自定义显示值的渲染函数 | `func` | - | 否 |
48
+ | children | 自定义触发元素 | `any` | - | 否 |
49
+ | disabled | 是否禁用 | `bool` | `false` | 否 |
50
+ | filtrable | 是否可搜索 | `bool` | - | 否 |
51
+ | onlyChildSelectable | 是否只允许选择末级节点(有 children 则清空输入框) | `bool` | `false` | 否 |
52
+ | popoverStyle | 弹出层样式 | `object` | - | 否 |
53
+ | className | 弹出层自定义类名 | `string` | - | 否 |
54
+ | style | 弹出层自定义样式 | `object` | - | 否 |
55
+
56
+ ### CascaderSelect Props
57
+ | 属性 | 说明 | 类型 | 默认值 | 必填 |
58
+ |------|------|------|--------|------|
59
+ | data | 级联数据,格式同 Cascader | `array` | - | 是 |
60
+ | selected | 已选中的项数组(每项为完整的 value 对象数组) | `array` | - | 否 |
61
+ | onSelect | 选择回调,单选返回单个值,多选返回数组 | `func` | - | 是 |
62
+ | multiple | 是否多选 | `bool` | - | 否 |
63
+ | selectedRender | 自定义已选项渲染函数 | `func` | - | 否 |
64
+ | inputProps | 传递给内部 Cascader input 的属性 | `object` | `{}` | 否 |
65
+ | disabled | 是否禁用 | `bool` | `false` | 否 |
66
+ | valueRender | 自定义 Cascader 显示值渲染函数 | `func` | - | 否 |
67
+ | filtrable | 是否可搜索 | `bool` | `false` | 否 |
68
+ | onlyChildSelectable | 是否只允许选择末级节点 | `bool` | `false` | 否 |
69
+
70
+ ## 示例
71
+
72
+ ### 基础级联选择
73
+ ```jsx
74
+ const data = [
75
+ {
76
+ value: '110000',
77
+ name: '北京市',
78
+ children: [
79
+ {
80
+ value: '150600000000',
81
+ name: '东城区',
82
+ children: [
83
+ { value: '150600800000', name: '东单' },
84
+ { value: '150600900000', name: '东四' }
85
+ ]
86
+ }
87
+ ]
88
+ }
89
+ ]
90
+
91
+ <Cascader
92
+ data={data}
93
+ value={selected}
94
+ onChange={ids => setSelected(ids)}
95
+ />
96
+ ```
97
+
98
+ ### 可搜索级联
99
+ ```jsx
100
+ <Cascader
101
+ filtrable
102
+ data={data}
103
+ value={selected}
104
+ onChange={ids => setSelected(ids)}
105
+ />
106
+ ```
107
+
108
+ ### 只允许选择末级节点
109
+ ```jsx
110
+ <Cascader
111
+ filtrable
112
+ onlyChildSelectable
113
+ data={data}
114
+ value={selected}
115
+ onChange={ids => setSelected(ids)}
116
+ />
117
+ ```
118
+
119
+ ### CascaderSelect 多选
120
+ ```jsx
121
+ import { CascaderSelect } from '@gmfe/react'
122
+
123
+ <CascaderSelect
124
+ multiple
125
+ data={data}
126
+ selected={selectedItems}
127
+ onSelect={items => setSelectedItems(items)}
128
+ />
129
+ ```
130
+
131
+ ## 注意事项
132
+ - `data` 数据格式要求每项包含 `value`、`name`,子级数据放在 `children` 中
133
+ - `value` 属性为各级 value 组成的数组,如选中"北京市 > 东城区 > 东单"则为 `['110000', '150600000000', '150600800000']`
134
+ - 启用 `filtrable` 后支持中文搜索和拼音搜索(全拼、首字母)
135
+ - `onlyChildSelectable` 开启后,选择有 children 的节点会清空输入框
136
+ - CascaderSelect 支持单选和多选模式
137
+ - CascaderSelect 的 `selected` 是完整的值对象数组(每项为各级对象的数组),而非简单的 value
138
+ - 支持键盘上下键和回车键操作
139
+ - 组件会深拷贝传入的 `data` 并在内部维护 `_path` 属性
@@ -0,0 +1,120 @@
1
+ # Checkbox
2
+
3
+ ## 简介
4
+ 复选框组件 - 用于多选场景,支持单个使用和分组使用(CheckboxGroup)。
5
+
6
+ ## 安装
7
+ 已包含在 `@gmfe/react` 中,无需额外安装。
8
+
9
+ ## 使用
10
+ ```jsx
11
+ import { Checkbox, CheckboxGroup } from '@gmfe/react'
12
+
13
+ // 单个使用
14
+ <Checkbox checked onChange={onChange}>选项</Checkbox>
15
+
16
+ // 分组使用
17
+ <CheckboxGroup name='city' value={value} onChange={setValue}>
18
+ <Checkbox value={1}>广州</Checkbox>
19
+ <Checkbox value={2}>深圳</Checkbox>
20
+ <Checkbox value={3}>成都</Checkbox>
21
+ </CheckboxGroup>
22
+ ```
23
+
24
+ ## API
25
+
26
+ ### Checkbox Props
27
+ | 属性 | 说明 | 类型 | 默认值 | 必填 |
28
+ |------|------|------|--------|------|
29
+ | checked | 是否选中 | `bool` | - | 否 |
30
+ | onChange | 变化回调 | `func` | `_.noop` | 否 |
31
+ | value | 选项值,配合 CheckboxGroup 使用 | `any` | - | 否 |
32
+ | disabled | 是否禁用 | `bool` | - | 否 |
33
+ | children | 显示文本 | `any` | - | 否 |
34
+ | indeterminate | 半选状态(仅 checked 为 false 时有效,只控制样式) | `bool` | - | 否 |
35
+ | inline | 是否行内显示 | `bool` | - | 否 |
36
+ | block | 是否整行可点击 | `bool` | - | 否 |
37
+ | col | 配合 group 使用,设置列数下的宽度占比 | `number` | - | 否 |
38
+ | name | input name 属性 | `string` | - | 否 |
39
+ | className | 自定义类名 | `string` | - | 否 |
40
+ | style | 自定义样式 | `object` | - | 否 |
41
+
42
+ ### CheckboxGroup Props
43
+ | 属性 | 说明 | 类型 | 默认值 | 必填 |
44
+ |------|------|------|--------|------|
45
+ | name | 表单名称,必填 | `string` | - | 是 |
46
+ | value | 已选中的值数组 | `array` | - | 是 |
47
+ | onChange | 变化回调,参数为最新的值数组 | `func` | `_.noop` | 否 |
48
+ | inline | 是否行内显示 | `bool` | - | 否 |
49
+ | block | 是否整行可点击 | `bool` | - | 否 |
50
+ | col | 列数,子元素会按百分比分配宽度 | `number` | - | 否 |
51
+ | children | Checkbox 子组件 | `any` | - | 否 |
52
+ | className | 自定义类名 | `string` | - | 否 |
53
+ | style | 自定义样式 | `object` | - | 否 |
54
+
55
+ ## 示例
56
+
57
+ ### 基础用法
58
+ ```jsx
59
+ <Checkbox checked>选中状态</Checkbox>
60
+ <Checkbox>未选中状态</Checkbox>
61
+ <Checkbox indeterminate>半选状态</Checkbox>
62
+ ```
63
+
64
+ ### 禁用状态
65
+ ```jsx
66
+ <Checkbox checked disabled>选中禁用</Checkbox>
67
+ <Checkbox disabled>未选中禁用</Checkbox>
68
+ <Checkbox indeterminate disabled>半选禁用</Checkbox>
69
+ ```
70
+
71
+ ### 行内显示
72
+ ```jsx
73
+ <Checkbox checked inline>选项1</Checkbox>
74
+ <Checkbox inline>选项2</Checkbox>
75
+ ```
76
+
77
+ ### 整行可点击
78
+ ```jsx
79
+ <Checkbox block checked={checked} onChange={() => setChecked(!checked)}>
80
+ 整行都可以点击
81
+ </Checkbox>
82
+ ```
83
+
84
+ ### 分组使用
85
+ ```jsx
86
+ <CheckboxGroup
87
+ name='city'
88
+ value={[1, 4]}
89
+ onChange={value => console.log(value)}
90
+ >
91
+ <Checkbox value={1}>广州</Checkbox>
92
+ <Checkbox value={2} disabled>深圳</Checkbox>
93
+ <Checkbox value={3}>成都</Checkbox>
94
+ <Checkbox value={4} disabled>东莞</Checkbox>
95
+ </CheckboxGroup>
96
+ ```
97
+
98
+ ### 分组带列数
99
+ ```jsx
100
+ <CheckboxGroup
101
+ name='city'
102
+ value={value}
103
+ onChange={setValue}
104
+ col={2}
105
+ inline
106
+ >
107
+ <Checkbox value={1}>广州</Checkbox>
108
+ <Checkbox value={2}>深圳</Checkbox>
109
+ <Checkbox value={3}>成都</Checkbox>
110
+ <Checkbox value={4}>东莞</Checkbox>
111
+ </CheckboxGroup>
112
+ ```
113
+
114
+ ## 注意事项
115
+ - `CheckboxGroup` 的 `name` 属性为必填项
116
+ - `CheckboxGroup` 的 `value` 属性接收的是已选值的数组(非 Checkbox 的 value 对象)
117
+ - `indeterminate` 半选状态只影响样式,`checked` 为 `false` 时才生效
118
+ - `block` 模式下整行都可以触发选中/取消选中
119
+ - `col` 属性与 `CheckboxGroup` 配合使用,按百分比自动分配每列宽度
120
+ - 非行内模式下,每个 Checkbox 独占一行
@@ -0,0 +1,80 @@
1
+ # Collapse
2
+
3
+ ## 简介
4
+ 折叠面板组件 - 通过 `in` 属性控制内容的展开和折叠,带有高度和透明度的过渡动画效果。
5
+
6
+ ## 安装
7
+ 已包含在 `@gmfe/react` 中,无需额外安装。
8
+
9
+ ## 使用
10
+ ```jsx
11
+ import Collapse from '@gmfe/react/lib/collapse'
12
+
13
+ <Collapse in={true}>
14
+ <div>折叠的内容</div>
15
+ </Collapse>
16
+ ```
17
+
18
+ ## API
19
+
20
+ ### Props
21
+
22
+ | 属性 | 说明 | 类型 | 默认值 | 必填 |
23
+ |------|------|------|--------|------|
24
+ | in | 控制展开/折叠状态,`true` 为展开,`false` 为折叠 | `bool` | - | 是 |
25
+ | children | 折叠面板中的内容 | `any` | - | 否 |
26
+ | className | 自定义类名 | `string` | - | 否 |
27
+ | style | 自定义内联样式 | `object` | - | 否 |
28
+
29
+ ## 示例
30
+
31
+ ### 基础用法
32
+ ```jsx
33
+ import React, { useState } from 'react'
34
+ import Collapse from '@gmfe/react/lib/collapse'
35
+
36
+ const App = () => {
37
+ const [isExpanded, setIsExpanded] = useState(true)
38
+
39
+ return (
40
+ <div>
41
+ <button onClick={() => setIsExpanded(!isExpanded)}>
42
+ {isExpanded ? '收起' : '展开'}
43
+ </button>
44
+ <Collapse in={isExpanded}>
45
+ <div>这是可以折叠的内容区域</div>
46
+ </Collapse>
47
+ </div>
48
+ )
49
+ }
50
+ ```
51
+
52
+ ### 配合自定义样式
53
+ ```jsx
54
+ import React, { useState } from 'react'
55
+ import Collapse from '@gmfe/react/lib/collapse'
56
+
57
+ const App = () => {
58
+ const [isExpanded, setIsExpanded] = useState(false)
59
+
60
+ return (
61
+ <div>
62
+ <button onClick={() => setIsExpanded(!isExpanded)}>
63
+ {isExpanded ? '收起详情' : '查看详情'}
64
+ </button>
65
+ <Collapse in={isExpanded}>
66
+ <div style={{ padding: '12px', background: '#f5f5f5' }}>
67
+ 这里是详情内容,点击按钮可以切换展开和折叠状态。
68
+ </div>
69
+ </Collapse>
70
+ </div>
71
+ )
72
+ }
73
+ ```
74
+
75
+ ## 注意事项
76
+ - `in` 属性为必填项,必须由父组件手动控制展开/折叠状态
77
+ - 展开时过渡动画持续 0.5s,使用 ease 缓动曲线
78
+ - 折叠状态下 `overflow` 被设置为 `hidden`,高度为 0,透明度为 0
79
+ - 组件根节点会添加 `gm-collapse` 类名,可通过 `className` 进行覆盖或扩展
80
+ - `style` 属性会与组件内部的过渡样式进行合并,同名属性以 `style` 为准
@@ -0,0 +1,50 @@
1
+ # ColorPicker
2
+
3
+ ## 简介
4
+ 颜色选择器组件 - 提供预设颜色和自定义颜色选择的弹出式颜色选择器
5
+
6
+ ## 安装
7
+ 已包含在 `@gmfe/react` 中,无需额外安装。
8
+
9
+ ## 使用
10
+ ```jsx
11
+ import { ColorPicker } from '@gmfe/react'
12
+
13
+ <ColorPicker color={color} onChange={value => setColor(value)}>
14
+ <button>选择颜色</button>
15
+ </ColorPicker>
16
+ ```
17
+
18
+ ## API
19
+
20
+ ### Props
21
+ | 属性 | 说明 | 类型 | 默认值 | 必填 |
22
+ |------|------|------|--------|------|
23
+ | color | 当前选中的颜色值(十六进制格式) | `string` | - | 否 |
24
+ | onChange | 颜色变化回调,参数为十六进制颜色值 | `function` | `_.noop` | 否 |
25
+ | children | 触发器元素 | `any` | - | 是 |
26
+
27
+ ### 预设颜色
28
+ 组件内置以下预设颜色:
29
+ - 红色 `#e02020`
30
+ - 橙色 `#fa6400`
31
+ - 黄色 `#f7b500`
32
+ - 绿色 `#6dd400`
33
+ - 蓝色 `#0091ff`
34
+ - 紫色 `#b620e0`
35
+ - 灰色 `#6d7278`
36
+
37
+ ## 示例
38
+
39
+ ### 基础用法
40
+ ```jsx
41
+ <ColorPicker color="#ff0000" onChange={value => setColor(value)}>
42
+ <button>颜色选择器: {color}</button>
43
+ </ColorPicker>
44
+ ```
45
+
46
+ ## 注意事项
47
+ - 组件内部使用 `Popover` 以点击方式触发弹出
48
+ - 支持手动输入十六进制颜色值
49
+ - 支持通过系统取色器选择自定义颜色
50
+ - 点击"确定"后触发 `onChange`,点击"取消"关闭弹窗
@@ -0,0 +1,144 @@
1
+ # DatePicker
2
+
3
+ ## 简介
4
+ 日期选择组件 - 提供日历弹出层选择日期,支持日期范围限制、不可选日期设置、自定义展示格式和时间选择功能。
5
+
6
+ ## 安装
7
+ 已包含在 `@gmfe/react` 中,无需额外安装。
8
+
9
+ ## 使用
10
+ ```jsx
11
+ import { DatePicker } from '@gmfe/react'
12
+
13
+ <DatePicker
14
+ date={date}
15
+ placeholder='请选择日期'
16
+ onChange={date => setDate(date)}
17
+ />
18
+ ```
19
+
20
+ ## API
21
+
22
+ ### Props
23
+ | 属性 | 说明 | 类型 | 默认值 | 必填 |
24
+ |------|------|------|--------|------|
25
+ | date | 当前选中的日期,Date 对象 | `object` | - | 否 |
26
+ | onChange | 日期选择回调,参数为 Date 对象 | `func` | - | 是 |
27
+ | placeholder | 占位文字 | `string` | - | 否 |
28
+ | disabled | 是否禁用 | `bool` | - | 否 |
29
+ | min | 可选的最小日期,Date 对象 | `object` | - | 否 |
30
+ | max | 可选的最大日期,Date 对象 | `object` | - | 否 |
31
+ | disabledDate | 定义不可选择的日期,参数为 Date 对象,返回 true 不可选 | `func` | - | 否 |
32
+ | renderDate | 自定义日期显示格式,参数为 Date 对象,返回展示内容 | `func` | - | 否 |
33
+ | renderBottom | 添加底部自定义组件 | `element` | - | 否 |
34
+ | popoverType | 弹出层触发方式 | `'focus' \| 'realFocus'` | - | 否 |
35
+ | enabledTimeSelect | 是否启用时间选择 | `bool` | `false` | 否 |
36
+ | timeLimit | 时间选择限制配置 | `object` | - | 否 |
37
+ | timeLimit.defaultTime | 默认时间,HH:mm 格式 | `object` | - | 否 |
38
+ | timeLimit.disabledSpan | 禁用时间段函数,参数为 Date 对象,返回 bool | `func` | - | 否 |
39
+ | timeLimit.timeSpan | 时间间隔,默认 30 分钟 | `number` | `1800000`(30分钟) | 否 |
40
+ | onKeyDown | 键盘事件回调 | `func` | `_.noop` | 否 |
41
+ | className | 自定义类名 | `string` | - | 否 |
42
+ | style | 自定义样式 | `object` | - | 否 |
43
+ | children | 自定义触发元素 | `any` | - | 否 |
44
+
45
+ ### 方法(通过 ref 调用)
46
+ | 方法 | 说明 |
47
+ |------|------|
48
+ | apiDoFocus | 聚焦到日期选择框 |
49
+ | apiDoSelectWillActive | 选择键盘高亮的当前日期 |
50
+
51
+ ## 示例
52
+
53
+ ### 基础用法
54
+ ```jsx
55
+ <DatePicker
56
+ date={date}
57
+ placeholder='请选择日期'
58
+ onChange={date => setDate(date)}
59
+ />
60
+ ```
61
+
62
+ ### 自定义显示格式
63
+ ```jsx
64
+ <DatePicker
65
+ date={date}
66
+ placeholder='请选择日期'
67
+ onChange={date => setDate(date)}
68
+ renderDate={date => `${date.getMonth() + 1}月-${date.getDate()}日`}
69
+ />
70
+ ```
71
+
72
+ ### 禁用日期选择
73
+ ```jsx
74
+ <DatePicker
75
+ date={date}
76
+ placeholder='请选择日期'
77
+ disabled
78
+ onChange={date => setDate(date)}
79
+ />
80
+ ```
81
+
82
+ ### 限制可选日期范围
83
+ ```jsx
84
+ // 只能选择今天之后
85
+ <DatePicker
86
+ date={date}
87
+ placeholder='选今天之后的'
88
+ min={new Date()}
89
+ onChange={date => setDate(date)}
90
+ />
91
+ ```
92
+
93
+ ### 自定义禁用日期
94
+ ```jsx
95
+ // 只能选择非周五的日期
96
+ <DatePicker
97
+ date={date}
98
+ placeholder='非周五'
99
+ disabledDate={m => moment(m).get('day') === 5}
100
+ onChange={date => setDate(date)}
101
+ />
102
+ ```
103
+
104
+ ### 带时间选择
105
+ ```jsx
106
+ <DatePicker
107
+ date={date}
108
+ placeholder='请选择日期'
109
+ onChange={date => setDate(date)}
110
+ enabledTimeSelect
111
+ />
112
+ ```
113
+
114
+ ### 自定义底部内容
115
+ ```jsx
116
+ <DatePicker
117
+ date={date}
118
+ placeholder='请选择日期'
119
+ onChange={date => setDate(date)}
120
+ renderBottom={
121
+ <div className='gm-border-top text-center gm-padding-10'>
122
+ 说明:请随便输入时间
123
+ </div>
124
+ }
125
+ />
126
+ ```
127
+
128
+ ### 自定义触发元素
129
+ ```jsx
130
+ <DatePicker date={date} onChange={date => setDate(date)}>
131
+ <span>
132
+ {date ? moment(date).format('YYYY-MM-DD') : '请点击选择'}
133
+ </span>
134
+ </DatePicker>
135
+ ```
136
+
137
+ ## 注意事项
138
+ - `date` 属性接收的是 JavaScript 原生 `Date` 对象
139
+ - 不设置 `renderDate` 时,默认展示格式为 `YYYY-MM-DD`;启用 `enabledTimeSelect` 时为 `YYYY-MM-DD HH:mm`
140
+ - `disabledDate` 的优先级高于 `min` 和 `max`
141
+ - `renderDate` 用于自定义已选日期在输入框中的显示格式
142
+ - 启用 `enabledTimeSelect` 后,`renderDate` 需要手动带上时间部分
143
+ - 支持键盘上下键切换日期
144
+ - `timeLimit.timeSpan` 的单位为毫秒,默认 30 分钟(30 * 60 * 1000)
@@ -0,0 +1,126 @@
1
+ # DateRangePicker
2
+
3
+ ## 简介
4
+ 日期范围选择组件 - 提供双日历弹出层选择日期段,支持日期范围限制、时间选择、快速选择列表等功能。
5
+
6
+ ## 安装
7
+ 已包含在 `@gmfe/react` 中,无需额外安装。
8
+
9
+ ## 使用
10
+ ```jsx
11
+ import { DateRangePicker } from '@gmfe/react'
12
+
13
+ <DateRangePicker
14
+ begin={beginDate}
15
+ end={endDate}
16
+ onChange={(begin, end) => {
17
+ setBeginDate(begin)
18
+ setEndDate(end)
19
+ }}
20
+ />
21
+ ```
22
+
23
+ ## API
24
+
25
+ ### Props
26
+ | 属性 | 说明 | 类型 | 默认值 | 必填 |
27
+ |------|------|------|--------|------|
28
+ | begin | 开始日期,Date 对象 | `object` | - | 否 |
29
+ | end | 结束日期,Date 对象 | `object` | - | 否 |
30
+ | onChange | 日期变化回调,参数为 (begin, end) | `func` | `_.noop` | 否 |
31
+ | disabled | 是否禁用 | `bool` | - | 否 |
32
+ | min | 可选的最小日期,Date 对象 | `object` | - | 否 |
33
+ | max | 可选的最大日期,Date 对象 | `object` | - | 否 |
34
+ | disabledDate | 自定义日期是否可选,参数为 Date 对象,返回 bool。设置后 min/max 无效 | `func` | - | 否 |
35
+ | renderDate | 自定义日期展示格式,参数为 (begin, end) 两个 Date 对象 | `func` | - | 否 |
36
+ | canClear | 是否可清除已选日期 | `bool` | - | 否 |
37
+ | className | 自定义类名 | `string` | - | 否 |
38
+ | enabledTimeSelect | 是否启用时间选择 | `bool` | `false` | 否 |
39
+ | timeSpan | 时间间隔,默认 30 分钟 | `number` | `1800000`(30分钟) | 否 |
40
+ | beginTimeSelect | 开始时间选择限制配置 | `object` | - | 否 |
41
+ | beginTimeSelect.defaultTime | 默认开始时间,HH:mm 格式 | `object` | - | 否 |
42
+ | beginTimeSelect.disabledSpan | 禁用时间段函数,参数为 Date 对象,返回时间段 | `func` | - | 否 |
43
+ | endTimeSelect | 结束时间选择限制配置 | `object` | - | 否 |
44
+ | endTimeSelect.defaultTime | 默认结束时间 | `object` | - | 否 |
45
+ | endTimeSelect.disabledSpan | 禁用时间段函数 | `func` | - | 否 |
46
+ | customQuickSelectList | 自定义左侧快速选择列表 | `array` | - | 否 |
47
+ | children | 自定义触发元素 | `any` | - | 否 |
48
+
49
+ ### 方法(通过 ref 调用)
50
+ | 方法 | 说明 |
51
+ |------|------|
52
+ | apiDoFocus | 聚焦到日期范围选择框 |
53
+
54
+ ## 示例
55
+
56
+ ### 基础用法
57
+ ```jsx
58
+ <DateRangePicker
59
+ begin={beginDate}
60
+ end={endDate}
61
+ onChange={(begin, end) => {
62
+ setBeginDate(begin)
63
+ setEndDate(end)
64
+ }}
65
+ />
66
+ ```
67
+
68
+ ### 带清除功能
69
+ ```jsx
70
+ <DateRangePicker
71
+ begin={beginDate}
72
+ end={endDate}
73
+ canClear
74
+ onChange={(begin, end) => {
75
+ setBeginDate(begin)
76
+ setEndDate(end)
77
+ }}
78
+ />
79
+ ```
80
+
81
+ ### 启用时间选择
82
+ ```jsx
83
+ <DateRangePicker
84
+ begin={beginDate}
85
+ end={endDate}
86
+ enabledTimeSelect
87
+ onChange={(begin, end) => {
88
+ setBeginDate(begin)
89
+ setEndDate(end)
90
+ }}
91
+ />
92
+ ```
93
+
94
+ ### 自定义快速选择列表
95
+ ```jsx
96
+ const quickList = [
97
+ {
98
+ range: [[0, 'day'], [0, 'day']],
99
+ text: '今天'
100
+ },
101
+ {
102
+ range: [[-7, 'day'], [0, 'day']],
103
+ text: '最近7天'
104
+ }
105
+ ]
106
+
107
+ <DateRangePicker
108
+ begin={beginDate}
109
+ end={endDate}
110
+ customQuickSelectList={quickList}
111
+ onChange={(begin, end) => {
112
+ setBeginDate(begin)
113
+ setEndDate(end)
114
+ }}
115
+ />
116
+ ```
117
+
118
+ ## 注意事项
119
+ - `begin` 和 `end` 属性接收 JavaScript 原生 `Date` 对象
120
+ - 不设置 `renderDate` 时,默认展示格式为 `YYYY-MM-DD ~ YYYY-MM-DD`
121
+ - 启用 `enabledTimeSelect` 时,展示格式自动带上时间部分
122
+ - `disabledDate` 设置后,`min` 和 `max` 将失效
123
+ - `customQuickSelectList` 的 `range` 数组项格式为 `[距离天数, 'day']`,从当前日期推算
124
+ - 选择日期后需要点击"确定"按钮才会触发 `onChange`
125
+ - 点击"取消"会关闭弹窗且不触发回调
126
+ - `canClear` 为 true 时,选中状态下可以通过清除按钮清空日期范围