Skip to content

Commit 3c45ab3

Browse files
committed
feat: 日期选择添加multiple支持
1 parent 9f1afba commit 3c45ab3

File tree

7 files changed

+2307
-8
lines changed

7 files changed

+2307
-8
lines changed

src/calendar/Calendar.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -777,7 +777,7 @@ export default defineComponent({
777777
}}
778778
>
779779
{props.pickerType !== 'time' ? renderCalendar() : ''}
780-
{renderTimePicker()}
780+
{props.selectType === 'single' && renderTimePicker()}
781781
{props.changeYearFast ? renderYearMonthPicker() : ''}
782782
</div>
783783
{renderCtrlImg()}

src/calendar/CalendarDate.tsx

+21-7
Original file line numberDiff line numberDiff line change
@@ -419,8 +419,7 @@ export default defineComponent({
419419
const day = new Date().getDate();
420420

421421
if (props.selectType === 'single') {
422-
const date = checkedDate.value[0];
423-
checkedDate.value = [{ ...date, day }];
422+
checkedDate.value = [{ year, month, day }];
424423
}
425424

426425
currentYearMonth.value = { year, month };
@@ -488,16 +487,31 @@ export default defineComponent({
488487
calculateCalendarOfThreeMonth();
489488
};
490489

490+
const dealCheckedDate = (date: CalendarMonthType) => {
491+
const { selectType } = props;
492+
const { year, month, day } = date;
493+
if (selectType === 'single') {
494+
checkedDate.value = [{ year, month, day }];
495+
} else if (selectType === 'multiple') {
496+
const existIndex = checkedDate.value.findIndex(
497+
(item) =>
498+
item.year === year && item.month === month && item.day === day
499+
);
500+
if (existIndex > -1) {
501+
checkedDate.value.splice(existIndex, 1);
502+
} else {
503+
checkedDate.value = [...checkedDate.value, date];
504+
}
505+
}
506+
};
507+
491508
// 点击日历上的日期
492509
const clickCalendarDay = (date: CalendarMonthType) => {
493-
const { year, month, day } = date;
494-
if (!day) return;
510+
if (!date.day) return;
495511

496512
if (formatDisabledDate(date)) return;
497513

498-
if (props.selectType === 'single') {
499-
checkedDate.value = [{ year, month, day }];
500-
}
514+
dealCheckedDate(date);
501515

502516
if (date.month === lastMonth.value && date.year === lastMonthYear.value) {
503517
getLastMonth();

src/select-type/README.md

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# picker-type
2+
3+
### 介绍
4+
5+
选择器类型
6+
7+
single:单选
8+
9+
range:范围选择
10+
11+
multiple:多选
12+
13+
### single
14+
15+
```html
16+
<template>
17+
<vue-hash-calendar select-type="single" />
18+
</template>
19+
```
20+
21+
### range
22+
23+
```html
24+
<template>
25+
<vue-hash-calendar select-type="range" />
26+
</template>
27+
```
28+
29+
### multiple
30+
31+
```html
32+
<template>
33+
<vue-hash-calendar select-type="multiple" />
34+
</template>
35+
```

src/select-type/demo/index.vue

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<template>
2+
<h1 class="hash-demo-title">single</h1>
3+
<vue-hash-calendar
4+
:default-datetime="new Date(2022, 0, 1, 1, 1)"
5+
select-type="single"
6+
/>
7+
8+
<h1 class="hash-demo-title">range</h1>
9+
<vue-hash-calendar
10+
:default-datetime="new Date(2022, 0, 1, 1, 1)"
11+
select-type="range"
12+
/>
13+
14+
<h1 class="hash-demo-title">multiple</h1>
15+
<vue-hash-calendar
16+
:default-datetime="new Date(2022, 0, 1, 1, 1)"
17+
select-type="multiple"
18+
/>
19+
</template>
20+
21+
<script setup>
22+
import VueHashCalendar from '../../calendar';
23+
</script>

0 commit comments

Comments
 (0)