Skip to content

Commit b2ae59a

Browse files
committed
fix: 修复single类型,标题undefined的问题
1 parent 44170dc commit b2ae59a

File tree

1 file changed

+93
-62
lines changed

1 file changed

+93
-62
lines changed

src/calendar/Calendar.tsx

+93-62
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ export default defineComponent({
118118

119119
setup(props, { emit, slots }) {
120120
const calendarRef = ref<CalendarDateInstance>();
121-
const checkedDate = ref<CalendarDateType>({
121+
const checkedDate = ref<CalendarDateType | CalendarDateType[]>({
122122
year: new Date().getFullYear(),
123123
month: new Date().getMonth(),
124124
day: new Date().getDate(),
@@ -178,6 +178,12 @@ export default defineComponent({
178178
if (!defaultDatetime || Array.isArray(defaultDatetime)) {
179179
defaultDatetime = nowDatetime;
180180
}
181+
182+
console.log(
183+
'limitDateRange(defaultDatetime)',
184+
limitDateRange(defaultDatetime)
185+
);
186+
console.log('defaultDatetime', defaultDatetime);
181187
return limitDateRange(defaultDatetime);
182188
};
183189

@@ -245,48 +251,56 @@ export default defineComponent({
245251
calendarRef.value?.changeWeekView({ isNext: true });
246252
};
247253

248-
const dateChange = (date: CalendarDateType) => {
249-
date.hours = checkedDate.value.hours;
250-
date.minutes = checkedDate.value.minutes;
251-
checkedDate.value = date;
254+
const dateChange = (date: CalendarDateType[]) => {
255+
if (props.selectType === 'single') {
256+
checkedDate.value = {
257+
...checkedDate.value,
258+
...date[0],
259+
};
260+
}
252261
};
253262

254-
const dateClick = (date: CalendarDateType, type?: CalendarPanelType) => {
255-
date.hours = checkedDate.value.hours;
256-
date.minutes = checkedDate.value.minutes;
257-
checkedDate.value = date;
263+
const dateClick = (date: CalendarDateType[], type?: CalendarPanelType) => {
264+
if (props.selectType === 'single') {
265+
checkedDate.value = {
266+
...checkedDate.value,
267+
...date[0],
268+
} as CalendarDateType;
258269

259-
let fDate: EmitDateType = new Date(
260-
`${checkedDate.value.year}/${checkedDate.value.month + 1}/${
261-
checkedDate.value.day
262-
} ${checkedDate.value.hours}:${checkedDate.value.minutes}`
263-
);
264-
if (props.format) {
265-
fDate = formatDate(fDate, props.format, props.lang);
266-
}
270+
let fDate: EmitDateType = new Date(
271+
`${checkedDate.value.year}/${checkedDate.value.month + 1}/${
272+
checkedDate.value.day
273+
} ${checkedDate.value.hours}:${checkedDate.value.minutes}`
274+
);
275+
if (props.format) {
276+
fDate = formatDate(fDate, props.format, props.lang);
277+
}
267278

268-
// 控制点击之后进入下一选择面板
269-
if (type) {
270-
switch (type) {
271-
case 'yearRange':
272-
yearMonthType.value = 'year';
273-
break;
274-
case 'year':
275-
yearMonthType.value = 'month';
276-
break;
277-
case 'month':
278-
currDateTime.value = new Date(fDate);
279-
yearMonthType.value = 'date';
280-
break;
279+
// 控制点击之后进入下一选择面板
280+
if (type) {
281+
switch (type) {
282+
case 'yearRange':
283+
yearMonthType.value = 'year';
284+
break;
285+
case 'year':
286+
yearMonthType.value = 'month';
287+
break;
288+
case 'month':
289+
currDateTime.value = new Date(fDate);
290+
yearMonthType.value = 'date';
291+
break;
292+
}
293+
294+
emit('calendarTypeChange', yearMonthType.value);
281295
}
282296

283-
emit('calendarTypeChange', yearMonthType.value);
297+
emit('click', fDate);
284298
}
285-
286-
emit('click', fDate);
287299
};
288300

289301
const timeChange = (date: CalendarDateType) => {
302+
if (Array.isArray(checkedDate.value)) return;
303+
290304
date.year = checkedDate.value.year;
291305
date.month = checkedDate.value.month;
292306
date.day = checkedDate.value.day;
@@ -299,6 +313,8 @@ export default defineComponent({
299313

300314
// 确认选择时间
301315
const confirm = () => {
316+
if (Array.isArray(checkedDate.value)) return;
317+
302318
let date: EmitDateType = new Date(
303319
`${checkedDate.value.year}/${checkedDate.value.month + 1}/${
304320
checkedDate.value.day
@@ -396,6 +412,8 @@ export default defineComponent({
396412
watch(
397413
checkedDate,
398414
() => {
415+
if (Array.isArray(checkedDate.value)) return;
416+
399417
let date: EmitDateType = new Date(
400418
`${checkedDate.value.year}/${checkedDate.value.month + 1}/${
401419
checkedDate.value.day
@@ -476,6 +494,8 @@ export default defineComponent({
476494
};
477495

478496
const renderAction = () => {
497+
if (Array.isArray(checkedDate.value)) return;
498+
479499
if (props.showAction) {
480500
return (
481501
<div
@@ -503,16 +523,21 @@ export default defineComponent({
503523
}`}
504524
onClick={showCalendar}
505525
>
506-
{formatDatetime(
507-
`${checkedDate.value.year}/${
508-
checkedDate.value.month + 1
509-
}/${checkedDate.value.day}`,
510-
languageUtil[props.lang].DEFAULT_DATE_FORMAT
511-
)}
526+
{props.selectType === 'single'
527+
? formatDatetime(
528+
`${checkedDate.value.year}/${
529+
checkedDate.value.month + 1
530+
}/${checkedDate.value.day}`,
531+
languageUtil[props.lang].DEFAULT_DATE_FORMAT
532+
)
533+
: `${checkedDate.value.year}${
534+
checkedDate.value.month + 1
535+
}月`}
512536
</span>
513537
) : null}
514538

515-
{props.pickerType !== 'date' ? (
539+
{props.pickerType !== 'date' &&
540+
props.selectType === 'single' ? (
516541
<span
517542
class={`calendar_title_date_time ${
518543
!isShowCalendar.value
@@ -591,6 +616,8 @@ export default defineComponent({
591616
);
592617

593618
const renderTimePicker = () => {
619+
if (Array.isArray(checkedDate.value)) return;
620+
594621
if (props.pickerType === 'datetime' || props.pickerType === 'time') {
595622
return (
596623
<CalendarTime
@@ -604,28 +631,32 @@ export default defineComponent({
604631
}
605632
};
606633

607-
const renderYearMonthPicker = () => (
608-
<CalendarYearMonth
609-
calendarContentHeight={calendarContentHeight.value}
610-
calendarDate={checkedDate.value}
611-
type={yearMonthType.value}
612-
onTouchstart={touchStart}
613-
onTouchmove={touchMove}
614-
onTouchend={touchEnd}
615-
onSlidechange={slideChange}
616-
onClick={dateClick}
617-
{...pick(props, [
618-
'minDate',
619-
'maxDate',
620-
'disabledDate',
621-
'lang',
622-
'disabledScroll',
623-
'checkedDayClassName',
624-
'notCurrentMonthDayClassName',
625-
'disabledClassName',
626-
])}
627-
/>
628-
);
634+
const renderYearMonthPicker = () => {
635+
if (Array.isArray(checkedDate.value)) return;
636+
637+
return (
638+
<CalendarYearMonth
639+
calendarContentHeight={calendarContentHeight.value}
640+
calendarDate={checkedDate.value}
641+
type={yearMonthType.value}
642+
onTouchstart={touchStart}
643+
onTouchmove={touchMove}
644+
onTouchend={touchEnd}
645+
onSlidechange={slideChange}
646+
onClick={dateClick}
647+
{...pick(props, [
648+
'minDate',
649+
'maxDate',
650+
'disabledDate',
651+
'lang',
652+
'disabledScroll',
653+
'checkedDayClassName',
654+
'notCurrentMonthDayClassName',
655+
'disabledClassName',
656+
])}
657+
/>
658+
);
659+
};
629660

630661
const renderCtrlImg = () => {
631662
let confirmEle: any = (

0 commit comments

Comments
 (0)