From ffa671791f15c374036985d10f3d5b06db29e80d Mon Sep 17 00:00:00 2001 From: chenjiahan Date: Sun, 8 Nov 2020 17:28:19 +0800 Subject: [PATCH] fix(Calendar): incorrect initial date #7412 --- src/calendar/index.js | 46 +++++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/src/calendar/index.js b/src/calendar/index.js index 57e348490..c4c666913 100644 --- a/src/calendar/index.js +++ b/src/calendar/index.js @@ -118,6 +118,20 @@ export default createComponent({ emits: ['select', 'confirm', 'unselect', 'month-show', 'update:show'], setup(props, { emit, slots }) { + const limitDateRange = ( + date, + minDate = props.minDate, + maxDate = props.maxDate + ) => { + if (compareDay(date, minDate) === -1) { + return minDate; + } + if (compareDay(date, maxDate) === 1) { + return maxDate; + } + return date; + }; + const getInitialDate = (defaultDate = props.defaultDate) => { const { type, minDate, maxDate } = props; @@ -125,26 +139,32 @@ export default createComponent({ return defaultDate; } - let defaultVal = new Date(); - - if (compareDay(defaultVal, minDate) === -1) { - defaultVal = minDate; - } else if (compareDay(defaultVal, maxDate) === 1) { - defaultVal = type === 'range' ? getPrevDay(maxDate) : maxDate; - } - - const defaultIsArray = Array.isArray(defaultDate); + const now = new Date(); if (type === 'range') { - const [startDay, endDay] = defaultIsArray ? defaultDate : []; - return [startDay || defaultVal, endDay || getNextDay(defaultVal)]; + if (!Array.isArray(defaultDate)) { + defaultDate = []; + } + const start = limitDateRange( + defaultDate[0] || now, + minDate, + getPrevDay(maxDate) + ); + const end = limitDateRange(defaultDate[1] || now, getNextDay(minDate)); + return [start, end]; } if (type === 'multiple') { - return defaultIsArray ? defaultDate : [defaultVal]; + if (Array.isArray(defaultDate)) { + return defaultDate.map((date) => limitDateRange(date)); + } + return [limitDateRange(now)]; } - return defaultIsArray ? defaultVal : defaultDate; + if (!defaultDate || Array.isArray(defaultDate)) { + defaultDate = now; + } + return limitDateRange(defaultDate); }; let bodyHeight;