2
0
mirror of https://github.com/tenrok/vue2-datepicker.git synced 2026-06-20 06:50:36 +03:00

fix: defaultValue should be used in datetime mode (#384)

When switching date causes time is disabled, the time of `defaultValue` should be used by default.
This commit is contained in:
mengxiong10
2019-12-02 17:10:27 +08:00
parent d7e7f49c95
commit 309a1bff70
9 changed files with 50 additions and 27 deletions
+3 -1
View File
@@ -118,7 +118,9 @@ export default {
props: {
value: {},
defaultValue: {
type: [Date, Number],
validator(value) {
return !isNaN(new Date(value).getTime());
},
default() {
const date = new Date();
date.setHours(0, 0, 0, 0);
+10 -7
View File
@@ -1,6 +1,6 @@
import CalendarPanel from '../calendar/calendar-panel';
import TimePanel from '../time/time-panel.vue';
import { isValidDate } from '../util/date';
import { assignTime, getValidDate } from '../util/date';
import { pick } from '../util/base';
export default {
@@ -43,14 +43,17 @@ export default {
if (type === 'date') {
this.openTimePanel();
}
const time = isValidDate(this.value) ? this.value : new Date(this.defaultValue);
const datetime = new Date(date);
datetime.setHours(time.getHours(), time.getMinutes(), time.getSeconds());
let datetime = assignTime(date, getValidDate(this.value, this.defaultValue));
if (this.disabledTime(new Date(datetime))) {
this.currentValue = date;
} else {
this.emitDate(datetime, type);
// set the time of defalutValue;
datetime = assignTime(date, this.defaultValue);
if (this.disabledTime(new Date(datetime))) {
// if disabled don't emit date
this.currentValue = datetime;
return;
}
}
this.emitDate(datetime, type);
},
},
render() {
+10 -9
View File
@@ -1,7 +1,7 @@
import CalendarRange from '../calendar/calendar-range';
import TimeRange from '../time/time-range';
import { pick } from '../util/base';
import { isValidRangeDate } from '../util/date';
import { isValidRangeDate, assignTime } from '../util/date';
export default {
name: 'DatetimeRange',
@@ -43,20 +43,21 @@ export default {
if (type === 'date') {
this.openTimePanel();
}
let datetimes = dates.map((v, i) => {
const datetime = new Date(v);
const time = isValidRangeDate(this.value) ? this.value[i] : new Date(this.defaultValue);
datetime.setHours(time.getHours(), time.getMinutes(), time.getSeconds());
return datetime;
let datetimes = dates.map((date, i) => {
const time = isValidRangeDate(this.value) ? this.value[i] : this.defaultValue;
return assignTime(date, time);
});
if (datetimes[1].getTime() < datetimes[0].getTime()) {
datetimes = [datetimes[0], datetimes[0]];
}
if (datetimes.some(this.disabledTime)) {
this.currentValue = dates;
} else {
this.emitDate(datetimes, type);
datetimes = dates.map(date => assignTime(date, this.defaultValue));
if (datetimes.some(this.disabledTime)) {
this.currentValue = datetimes;
return;
}
}
this.emitDate(datetimes, type);
},
},
render() {
+4 -2
View File
@@ -45,7 +45,9 @@ export default {
props: {
value: {},
defaultValue: {
type: [Date, Number],
validator(value) {
return !isNaN(new Date(value).getTime());
},
default() {
const date = new Date();
date.setHours(0, 0, 0, 0);
@@ -134,7 +136,7 @@ export default {
},
methods: {
isDisabled(date) {
return this.disabledTime(new Date(date), this.innerValue);
return this.disabledTime(new Date(date));
},
handleSelect(value, type) {
const date = new Date(value);
+2 -5
View File
@@ -49,13 +49,10 @@ export default {
this.emitChange(type, 1);
},
disabledStartTime(date) {
return this.disabledTime(date, [this.startValue, this.endValue], 0);
return this.disabledTime(date, 0);
},
disabledEndTime(date) {
return (
date.getTime() < this.startValue.getTime() ||
this.disabledTime(date, [this.startValue, this.endValue], 1)
);
return date.getTime() < this.startValue.getTime() || this.disabledTime(date, 1);
},
},
render() {
+7
View File
@@ -19,3 +19,10 @@ export function getValidDate(value, ...backup) {
const date = new Date(value);
return isValidDate(date) ? date : getValidDate(...backup);
}
export function assignTime(target, source) {
const date = new Date(target);
const time = new Date(source);
date.setHours(time.getHours(), time.getMinutes(), time.getSeconds());
return date;
}