@ticatec/uniface-element 0.2.4 → 0.3.0
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/dist/accordion/README.md +169 -0
- package/dist/accordion/README_CN.md +176 -0
- package/dist/action-bar/README.md +275 -0
- package/dist/action-bar/README_CN.md +285 -0
- package/dist/app-layout/README.md +374 -0
- package/dist/app-layout/README_CN.md +381 -0
- package/dist/app-top-bar/README.md +357 -0
- package/dist/app-top-bar/README_CN.md +365 -0
- package/dist/attachment-files/AttachmentFilesField.svelte +67 -1
- package/dist/attachment-files/AttachmentFilesField.svelte.d.ts +8 -1
- package/dist/base-calendar/CalendarBase.svelte +0 -3
- package/dist/box/README.md +385 -0
- package/dist/box/README_CN.md +393 -0
- package/dist/breadcrumbs/README.md +442 -0
- package/dist/breadcrumbs/README_CN.md +442 -0
- package/dist/button/Button.svelte +27 -7
- package/dist/button/Button.svelte.d.ts +3 -1
- package/dist/button/IconButton.svelte +26 -6
- package/dist/button/IconButton.svelte.d.ts +3 -1
- package/dist/button/IconButton_README.md +513 -0
- package/dist/button/IconButton_README_CN.md +513 -0
- package/dist/button/README.md +428 -0
- package/dist/button/README_CN.md +428 -0
- package/dist/button/TextButton.svelte +26 -6
- package/dist/button/TextButton.svelte.d.ts +3 -1
- package/dist/button/TextButton_README.md +571 -0
- package/dist/button/TextButton_README_CN.md +571 -0
- package/dist/card/README.md +666 -0
- package/dist/card/README_CN.md +666 -0
- package/dist/cascade-options-select/CascadeOptionSelect.svelte +43 -7
- package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +3 -4
- package/dist/cascade-options-select/README.md +663 -2
- package/dist/cascade-options-select/README_CN.md +664 -0
- package/dist/checkbox/CheckBox.svelte +20 -6
- package/dist/checkbox/CheckBox.svelte.d.ts +4 -2
- package/dist/checkbox/README.md +562 -0
- package/dist/checkbox/README_CN.md +727 -0
- package/dist/common-editor/NumberInput.svelte +39 -26
- package/dist/common-editor/NumberInput.svelte.d.ts +5 -1
- package/dist/concise-data-table/ConciseListTable.svelte +133 -36
- package/dist/concise-data-table/ConciseListTable.svelte.d.ts +8 -1
- package/dist/concise-data-table/DataCell.svelte +5 -6
- package/dist/concise-data-table/DataRow.svelte +22 -2
- package/dist/concise-data-table/DataRow.svelte.d.ts +1 -0
- package/dist/concise-data-table/README.md +606 -0
- package/dist/concise-data-table/README_CN.md +611 -0
- package/dist/context-menu/ContextMenu.svelte +138 -21
- package/dist/context-menu/ContextMenu.svelte.d.ts +5 -0
- package/dist/context-menu/ContextMenuItem.d.ts +20 -4
- package/dist/context-menu/README.md +551 -0
- package/dist/context-menu/README_CN.md +551 -0
- package/dist/criteria-field/CriteriaField.svelte +3 -5
- package/dist/criteria-field/README.md +532 -0
- package/dist/criteria-field/README_CN.md +532 -0
- package/dist/data-table/README.md +712 -0
- package/dist/data-table/README_CN.md +712 -0
- package/dist/date-picker/DatePicker.svelte +44 -7
- package/dist/date-picker/DatePicker.svelte.d.ts +3 -4
- package/dist/date-picker/DateTimePicker.svelte +32 -8
- package/dist/date-picker/DateTimePicker.svelte.d.ts +3 -4
- package/dist/date-picker/README.md +326 -0
- package/dist/date-picker/README_CN.md +316 -0
- package/dist/date-picker/ScrollBar.svelte +18 -8
- package/dist/date-picker/ScrollBar.svelte.d.ts +1 -1
- package/dist/date-picker/TimePanel.svelte +5 -5
- package/dist/date-picker/TimePanel.svelte.d.ts +1 -1
- package/dist/date-range/README.md +374 -0
- package/dist/date-range/README_CN.md +374 -0
- package/dist/dialog/README.md +596 -0
- package/dist/dialog/README_CN.md +596 -0
- package/dist/drawer/README.md +679 -1
- package/dist/drawer/README_CN.md +679 -0
- package/dist/group-box/group-check-box/GroupCheckBox.svelte +62 -5
- package/dist/group-box/group-check-box/GroupCheckBox.svelte.d.ts +7 -2
- package/dist/group-box/group-check-box/README.md +749 -0
- package/dist/group-box/group-check-box/README_CN.md +750 -0
- package/dist/group-box/group-radio-box/GroupRadioBox.svelte +69 -4
- package/dist/group-box/group-radio-box/GroupRadioBox.svelte.d.ts +8 -2
- package/dist/group-box/group-radio-box/README.md +920 -0
- package/dist/group-box/group-radio-box/README_CN.md +920 -0
- package/dist/image-files/README.md +1346 -0
- package/dist/image-files/README_CN.md +1346 -0
- package/dist/input-options-select/InputOptionsSelect.svelte +161 -65
- package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +4 -1
- package/dist/lib/forwardAllEvents.d.ts +3 -0
- package/dist/lib/forwardAllEvents.js +24 -0
- package/dist/list-box/README.md +579 -0
- package/dist/list-box/README_CN.md +682 -0
- package/dist/lookup-editor/LookupEditor.svelte +15 -3
- package/dist/lookup-editor/LookupEditor.svelte.d.ts +3 -4
- package/dist/lookup-editor/README.md +684 -0
- package/dist/lookup-editor/README_CN.md +684 -0
- package/dist/memo-editor/MemoEditor.svelte +77 -27
- package/dist/memo-editor/MemoEditor.svelte.d.ts +6 -3
- package/dist/memo-editor/README.md +819 -0
- package/dist/memo-editor/README_CN.md +819 -0
- package/dist/message-box/README.md +398 -0
- package/dist/message-box/README_CN.md +398 -0
- package/dist/number-editor/NumberEditor.svelte +2 -2
- package/dist/number-editor/NumberEditor.svelte.d.ts +1 -1
- package/dist/number-editor/README.md +353 -22
- package/dist/number-editor/README_CN.md +357 -0
- package/dist/number-range/README.md +443 -0
- package/dist/number-range/README_CN.md +443 -0
- package/dist/options-multi-select/OptionsMultiSelect.svelte +87 -12
- package/dist/options-multi-select/OptionsMultiSelect.svelte.d.ts +3 -1
- package/dist/options-multi-select/README.md +480 -0
- package/dist/options-multi-select/README_CN.md +480 -0
- package/dist/options-select/OptionsSelect.svelte +36 -5
- package/dist/options-select/OptionsSelect.svelte.d.ts +3 -4
- package/dist/options-select/README.md +632 -0
- package/dist/options-select/README_CN.md +632 -0
- package/dist/page/README.md +605 -0
- package/dist/page/README_CN.md +605 -0
- package/dist/pagination/README.md +946 -0
- package/dist/pagination/README_CN.md +946 -0
- package/dist/pagination-panel/README.md +1075 -0
- package/dist/pagination-panel/README_CN.md +1075 -0
- package/dist/popup-hint/README.md +841 -0
- package/dist/popup-hint/README_CN.md +840 -0
- package/dist/progress-bar/README.md +242 -0
- package/dist/progress-bar/README_CN.md +242 -0
- package/dist/progress-step-bar/README.md +316 -0
- package/dist/progress-step-bar/README_CN.md +316 -0
- package/dist/prompts-text-editor/PromptsTextEditor.svelte +6 -3
- package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +3 -1
- package/dist/prompts-text-editor/README.md +329 -0
- package/dist/prompts-text-editor/README_CN.md +329 -0
- package/dist/property-editor/README.md +969 -0
- package/dist/property-editor/README_CN.md +969 -0
- package/dist/radio-button/README.md +372 -0
- package/dist/radio-button/README_CN.md +372 -0
- package/dist/radio-button/RadioButton.svelte +32 -3
- package/dist/radio-button/RadioButton.svelte.d.ts +12 -1
- package/dist/search-box/README.md +425 -0
- package/dist/search-box/README_CN.md +424 -0
- package/dist/search-box/SearchBox.svelte +22 -6
- package/dist/search-box/SearchBox.svelte.d.ts +4 -1
- package/dist/tabs/README.md +919 -0
- package/dist/tabs/README_CN.md +920 -0
- package/dist/tag/README.md +922 -0
- package/dist/tag/README_CN.md +922 -0
- package/dist/text-editor/PasswordEditor.svelte +17 -2
- package/dist/text-editor/PasswordEditor.svelte.d.ts +3 -3
- package/dist/text-editor/PasswordEditor_README.md +551 -0
- package/dist/text-editor/PasswordEditor_README_CN.md +551 -0
- package/dist/text-editor/README.md +466 -0
- package/dist/text-editor/README_CN.md +466 -0
- package/dist/text-editor/TextEditor.svelte +51 -19
- package/dist/text-editor/TextEditor.svelte.d.ts +0 -1
- package/dist/time-editor/README.md +498 -24
- package/dist/time-editor/README_CN.md +498 -0
- package/dist/time-editor/TimeEditor.svelte +7 -3
- package/dist/time-editor/TimeEditor.svelte.d.ts +3 -1
- package/dist/toast/README.md +667 -0
- package/dist/toast/README_CN.md +667 -0
- package/dist/transfer/README.md +795 -0
- package/dist/transfer/Transfer.svelte +6 -4
- package/dist/transfer/Transfer.svelte.d.ts +3 -1
- package/dist/tree-view/README.md +761 -0
- package/dist/tree-view/README_CN.md +761 -0
- package/dist/tree-view/TreeView.svelte +5 -3
- package/dist/tree-view/TreeView.svelte.d.ts +3 -1
- package/dist/unit-number-editor/README.md +546 -20
- package/dist/unit-number-editor/README_CN.md +525 -0
- package/dist/unit-number-editor/UnitNumberEditor.svelte +62 -8
- package/dist/unit-number-editor/UnitNumberEditor.svelte.d.ts +5 -1
- package/docs/form-field/cn/README_CN.md +364 -0
- package/docs/form-field/en/README.md +364 -0
- package/docs/form-panel/flex-form/cn/README_CN.md +586 -0
- package/docs/form-panel/flex-form/en/README.md +586 -0
- package/docs/form-panel/flex-row-form/cn/README_CN.md +787 -0
- package/docs/form-panel/flex-row-form/en/README.md +787 -0
- package/docs/form-panel/grid-form/en/README.md +744 -0
- package/package.json +1 -1
- package/dist/drawer/README-CN.md +0 -1
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
# DateRangeEditor 组件
|
|
2
|
+
|
|
3
|
+
一个基于 Svelte 构建的全面日期范围选择组件,提供直观的界面来选择开始和结束日期,具有双日历弹出功能。
|
|
4
|
+
|
|
5
|
+
## 特性
|
|
6
|
+
|
|
7
|
+
- **双日历界面**:并排显示的日历用于开始/结束日期选择
|
|
8
|
+
- **智能日期约束**:开始和结束日期之间的自动最小/最大值验证
|
|
9
|
+
- **多种视觉变体**:支持 plain、outlined、filled 和 compact 样式
|
|
10
|
+
- **只读输入字段**:防止手动文本输入,确保数据完整性
|
|
11
|
+
- **灵活的日期格式**:可自定义日期显示格式
|
|
12
|
+
- **清除功能**:集成清除按钮,轻松重置范围
|
|
13
|
+
- **弹窗管理**:点击外部关闭的行为
|
|
14
|
+
- **响应式设计**:自动调整弹窗容器大小
|
|
15
|
+
- **集成就绪**:与表单布局无缝协作
|
|
16
|
+
|
|
17
|
+
## 安装
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @ticatec/uniface-element
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import DateRangeEditor from '@ticatec/uniface-element/DateRange';
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
或者在同一项目中使用:
|
|
28
|
+
```typescript
|
|
29
|
+
import DateRangeEditor from '$lib/date-range';
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 基本用法
|
|
33
|
+
|
|
34
|
+
```svelte
|
|
35
|
+
<script>
|
|
36
|
+
import DateRangeEditor from '$lib/date-range';
|
|
37
|
+
|
|
38
|
+
let fromDate = null;
|
|
39
|
+
let toDate = null;
|
|
40
|
+
</script>
|
|
41
|
+
|
|
42
|
+
<DateRangeEditor
|
|
43
|
+
bind:fromValue={fromDate}
|
|
44
|
+
bind:toValue={toDate}
|
|
45
|
+
placeholder="选择日期范围"
|
|
46
|
+
/>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## 属性
|
|
50
|
+
|
|
51
|
+
| 属性 | 类型 | 默认值 | 描述 |
|
|
52
|
+
|------|------|---------|-------------|
|
|
53
|
+
| `fromValue` | `UniDate` | `null` | 范围的开始日期 |
|
|
54
|
+
| `toValue` | `UniDate` | `null` | 范围的结束日期 |
|
|
55
|
+
| `variant` | `'' \| 'plain' \| 'outlined' \| 'filled'` | `''` | 视觉样式变体 |
|
|
56
|
+
| `compact` | `boolean` | `false` | 紧凑显示模式 |
|
|
57
|
+
| `style` | `string` | `''` | 自定义 CSS 样式 |
|
|
58
|
+
| `class` | `string` | `''` | 附加的 CSS 类 |
|
|
59
|
+
| `format` | `string` | `'YYYY-MM-DD'` | 日期显示格式 |
|
|
60
|
+
| `min` | `string \| Date \| null` | `null` | 最小可选日期 |
|
|
61
|
+
| `max` | `string \| Date \| null` | `null` | 最大可选日期 |
|
|
62
|
+
|
|
63
|
+
## 示例
|
|
64
|
+
|
|
65
|
+
### 基本日期范围选择器
|
|
66
|
+
|
|
67
|
+
```svelte
|
|
68
|
+
<script>
|
|
69
|
+
import DateRangeEditor from '$lib/date-range';
|
|
70
|
+
|
|
71
|
+
let startDate = null;
|
|
72
|
+
let endDate = null;
|
|
73
|
+
</script>
|
|
74
|
+
|
|
75
|
+
<DateRangeEditor
|
|
76
|
+
bind:fromValue={startDate}
|
|
77
|
+
bind:toValue={endDate}
|
|
78
|
+
/>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 带自定义格式的轮廓日期范围
|
|
82
|
+
|
|
83
|
+
```svelte
|
|
84
|
+
<DateRangeEditor
|
|
85
|
+
variant="outlined"
|
|
86
|
+
bind:fromValue={projectStart}
|
|
87
|
+
bind:toValue={projectEnd}
|
|
88
|
+
format="DD/MM/YYYY"
|
|
89
|
+
/>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 填充紧凑日期范围
|
|
93
|
+
|
|
94
|
+
```svelte
|
|
95
|
+
<DateRangeEditor
|
|
96
|
+
variant="filled"
|
|
97
|
+
compact
|
|
98
|
+
bind:fromValue={reportFrom}
|
|
99
|
+
bind:toValue={reportTo}
|
|
100
|
+
/>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 带最小/最大约束的日期范围
|
|
104
|
+
|
|
105
|
+
```svelte
|
|
106
|
+
<script>
|
|
107
|
+
// 只允许当前年份内的日期
|
|
108
|
+
const currentYear = new Date().getFullYear();
|
|
109
|
+
const yearStart = new Date(currentYear, 0, 1);
|
|
110
|
+
const yearEnd = new Date(currentYear, 11, 31);
|
|
111
|
+
</script>
|
|
112
|
+
|
|
113
|
+
<DateRangeEditor
|
|
114
|
+
variant="outlined"
|
|
115
|
+
bind:fromValue={periodStart}
|
|
116
|
+
bind:toValue={periodEnd}
|
|
117
|
+
min={yearStart}
|
|
118
|
+
max={yearEnd}
|
|
119
|
+
/>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 自定义样式的日期范围
|
|
123
|
+
|
|
124
|
+
```svelte
|
|
125
|
+
<DateRangeEditor
|
|
126
|
+
variant="filled"
|
|
127
|
+
style="width: 300px; margin: 10px;"
|
|
128
|
+
class="custom-date-range"
|
|
129
|
+
bind:fromValue={eventStart}
|
|
130
|
+
bind:toValue={eventEnd}
|
|
131
|
+
format="MMM DD, YYYY"
|
|
132
|
+
/>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## 智能日期验证
|
|
136
|
+
|
|
137
|
+
组件自动执行逻辑日期约束:
|
|
138
|
+
|
|
139
|
+
- **开始日期最大值**:不能超过选择的"结束"日期或全局 `max` 值
|
|
140
|
+
- **结束日期最小值**:不能早于选择的"开始"日期或全局 `min` 值
|
|
141
|
+
- **全局约束**:两个日期都遵守 `min` 和 `max` 属性
|
|
142
|
+
|
|
143
|
+
```svelte
|
|
144
|
+
<script>
|
|
145
|
+
let checkIn = new Date('2024-01-15');
|
|
146
|
+
let checkOut = null; // 将被约束为 checkIn 之后的日期
|
|
147
|
+
</script>
|
|
148
|
+
|
|
149
|
+
<DateRangeEditor
|
|
150
|
+
bind:fromValue={checkIn}
|
|
151
|
+
bind:toValue={checkOut}
|
|
152
|
+
min={new Date()} // 不允许过去的日期
|
|
153
|
+
/>
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## 日期格式
|
|
157
|
+
|
|
158
|
+
`format` 属性支持 Day.js 格式化标记:
|
|
159
|
+
|
|
160
|
+
| 格式 | 示例 | 描述 |
|
|
161
|
+
|--------|---------|-------------|
|
|
162
|
+
| `YYYY-MM-DD` | 2024-03-15 | ISO 格式(默认) |
|
|
163
|
+
| `DD/MM/YYYY` | 15/03/2024 | 欧洲格式 |
|
|
164
|
+
| `MM/DD/YYYY` | 03/15/2024 | 美国格式 |
|
|
165
|
+
| `MMM DD, YYYY` | Mar 15, 2024 | 长月份名称 |
|
|
166
|
+
| `DD MMM YYYY` | 15 Mar 2024 | 日-月-年 |
|
|
167
|
+
|
|
168
|
+
```svelte
|
|
169
|
+
<!-- 不同格式示例 -->
|
|
170
|
+
<DateRangeEditor format="DD/MM/YYYY" bind:fromValue={start} bind:toValue={end} />
|
|
171
|
+
<DateRangeEditor format="MMM DD, YYYY" bind:fromValue={start} bind:toValue={end} />
|
|
172
|
+
<DateRangeEditor format="DD MMM YYYY" bind:fromValue={start} bind:toValue={end} />
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## 日历交互
|
|
176
|
+
|
|
177
|
+
### 双日历布局
|
|
178
|
+
|
|
179
|
+
弹窗显示两个并排的日历:
|
|
180
|
+
- **左日历**:用于选择"开始"日期
|
|
181
|
+
- **右日历**:用于选择"结束"日期
|
|
182
|
+
- **智能约束**:每个日历根据另一个的选择来遵守约束
|
|
183
|
+
|
|
184
|
+
### 选择工作流程
|
|
185
|
+
|
|
186
|
+
1. 点击组件任何地方打开弹窗
|
|
187
|
+
2. 从左日历选择开始日期
|
|
188
|
+
3. 从右日历选择结束日期(自动关闭弹窗)
|
|
189
|
+
4. 使用清除按钮(×)重置两个日期
|
|
190
|
+
|
|
191
|
+
## 变体
|
|
192
|
+
|
|
193
|
+
### 默认(`''`)
|
|
194
|
+
标准边框和背景的基本样式。
|
|
195
|
+
|
|
196
|
+
```svelte
|
|
197
|
+
<DateRangeEditor bind:fromValue={start} bind:toValue={end} />
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### 简约(`'plain'`)
|
|
201
|
+
减少视觉元素的最小样式。
|
|
202
|
+
|
|
203
|
+
```svelte
|
|
204
|
+
<DateRangeEditor variant="plain" bind:fromValue={start} bind:toValue={end} />
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### 轮廓(`'outlined'`)
|
|
208
|
+
突出的边框样式以强调。
|
|
209
|
+
|
|
210
|
+
```svelte
|
|
211
|
+
<DateRangeEditor variant="outlined" bind:fromValue={start} bind:toValue={end} />
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### 填充(`'filled'`)
|
|
215
|
+
背景填充样式以提供更好的视觉层次。
|
|
216
|
+
|
|
217
|
+
```svelte
|
|
218
|
+
<DateRangeEditor variant="filled" bind:fromValue={start} bind:toValue={end} />
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## 与表单集成
|
|
222
|
+
|
|
223
|
+
DateRangeEditor 与表单布局和 FormField 组件无缝协作:
|
|
224
|
+
|
|
225
|
+
```svelte
|
|
226
|
+
<script>
|
|
227
|
+
import FormField from '$lib/form-field';
|
|
228
|
+
import DateRangeEditor from '$lib/date-range';
|
|
229
|
+
</script>
|
|
230
|
+
|
|
231
|
+
<FormField label="项目持续时间">
|
|
232
|
+
<DateRangeEditor
|
|
233
|
+
variant="outlined"
|
|
234
|
+
bind:fromValue={projectStart}
|
|
235
|
+
bind:toValue={projectEnd}
|
|
236
|
+
/>
|
|
237
|
+
</FormField>
|
|
238
|
+
|
|
239
|
+
<FormField label="报告期间">
|
|
240
|
+
<DateRangeEditor
|
|
241
|
+
variant="filled"
|
|
242
|
+
format="MMM DD, YYYY"
|
|
243
|
+
bind:fromValue={reportStart}
|
|
244
|
+
bind:toValue={reportEnd}
|
|
245
|
+
/>
|
|
246
|
+
</FormField>
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## 样式定制
|
|
250
|
+
|
|
251
|
+
组件继承 Uniface 设计系统的样式,可以自定义:
|
|
252
|
+
|
|
253
|
+
```css
|
|
254
|
+
.custom-date-range {
|
|
255
|
+
--uniface-inside-border-color: #e0e0e0;
|
|
256
|
+
--uniface-primary-color: #1976d2;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.uniface-range-editor {
|
|
260
|
+
/* 范围编辑器的自定义样式 */
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.date-popover {
|
|
264
|
+
/* 弹窗的自定义样式 */
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## 无障碍访问
|
|
269
|
+
|
|
270
|
+
- **键盘导航**:通过 Tab 在输入字段间切换,使用 Enter/Space 打开弹窗
|
|
271
|
+
- **ARIA 支持**:为屏幕阅读器提供适当的标签和描述
|
|
272
|
+
- **焦点管理**:逻辑焦点流和清晰的视觉指示器
|
|
273
|
+
- **只读输入**:防止无效的手动输入,同时保持无障碍访问
|
|
274
|
+
|
|
275
|
+
## 事件处理
|
|
276
|
+
|
|
277
|
+
```svelte
|
|
278
|
+
<script>
|
|
279
|
+
import DateRangeEditor from '$lib/date-range';
|
|
280
|
+
|
|
281
|
+
let fromDate = null;
|
|
282
|
+
let toDate = null;
|
|
283
|
+
|
|
284
|
+
// 响应变化
|
|
285
|
+
$: if (fromDate && toDate) {
|
|
286
|
+
console.log('选择的日期范围:', fromDate, '到', toDate);
|
|
287
|
+
calculateDateDifference();
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
function calculateDateDifference() {
|
|
291
|
+
if (fromDate && toDate) {
|
|
292
|
+
const diffTime = Math.abs(toDate - fromDate);
|
|
293
|
+
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
|
294
|
+
console.log(`持续时间:${diffDays} 天`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
</script>
|
|
298
|
+
|
|
299
|
+
<DateRangeEditor
|
|
300
|
+
bind:fromValue={fromDate}
|
|
301
|
+
bind:toValue={toDate}
|
|
302
|
+
on:blur={() => console.log('范围编辑器失去焦点')}
|
|
303
|
+
/>
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## 类型定义
|
|
307
|
+
|
|
308
|
+
```typescript
|
|
309
|
+
type UniDate = Date | dayjs.Dayjs | string | null;
|
|
310
|
+
|
|
311
|
+
interface DateRangeEditorProps {
|
|
312
|
+
fromValue: UniDate;
|
|
313
|
+
toValue: UniDate;
|
|
314
|
+
variant?: '' | 'plain' | 'outlined' | 'filled';
|
|
315
|
+
compact?: boolean;
|
|
316
|
+
style?: string;
|
|
317
|
+
class?: string;
|
|
318
|
+
format?: string;
|
|
319
|
+
min?: string | Date | null;
|
|
320
|
+
max?: string | Date | null;
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## 常见用例
|
|
325
|
+
|
|
326
|
+
### 项目时间线选择
|
|
327
|
+
```svelte
|
|
328
|
+
<DateRangeEditor
|
|
329
|
+
variant="outlined"
|
|
330
|
+
bind:fromValue={projectStart}
|
|
331
|
+
bind:toValue={projectEnd}
|
|
332
|
+
format="MMM DD, YYYY"
|
|
333
|
+
/>
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### 预订日期范围
|
|
337
|
+
```svelte
|
|
338
|
+
<DateRangeEditor
|
|
339
|
+
variant="filled"
|
|
340
|
+
bind:fromValue={checkIn}
|
|
341
|
+
bind:toValue={checkOut}
|
|
342
|
+
min={new Date()} // 不允许过去的日期
|
|
343
|
+
/>
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### 报告期间筛选
|
|
347
|
+
```svelte
|
|
348
|
+
<DateRangeEditor
|
|
349
|
+
compact
|
|
350
|
+
bind:fromValue={reportFrom}
|
|
351
|
+
bind:toValue={reportTo}
|
|
352
|
+
format="DD/MM/YYYY"
|
|
353
|
+
/>
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### 事件持续时间
|
|
357
|
+
```svelte
|
|
358
|
+
<DateRangeEditor
|
|
359
|
+
variant="outlined"
|
|
360
|
+
bind:fromValue={eventStart}
|
|
361
|
+
bind:toValue={eventEnd}
|
|
362
|
+
min={new Date()}
|
|
363
|
+
max={new Date(Date.now() + 365 * 24 * 60 * 60 * 1000)} // 最多提前1年
|
|
364
|
+
/>
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
## 注意事项
|
|
368
|
+
|
|
369
|
+
- 组件内部使用 Day.js 进行日期操作和格式化
|
|
370
|
+
- 输入字段为只读,防止无效的手动输入
|
|
371
|
+
- 弹窗自动定位以适应视口
|
|
372
|
+
- 只有当至少选择了一个日期时才显示清除功能
|
|
373
|
+
- 日期约束在选择时实时执行
|
|
374
|
+
- 组件维护弹窗可见性和约束的内部状态
|