From 882cc9efd6cf44976898c5f14787fb57c4d2c346 Mon Sep 17 00:00:00 2001 From: nemo-shen Date: Sat, 1 May 2021 15:48:40 +0800 Subject: [PATCH] fix(DatetimePicker): fixed show incorrect date time when dynamic set mindate or maxdate (#8640) --- src/datetime-picker/DatePicker.js | 6 +++- src/datetime-picker/TimePicker.js | 6 +++- src/datetime-picker/test/date-picker.spec.js | 30 ++++++++++++++++++-- src/datetime-picker/test/time-picker.spec.js | 26 +++++++++++++++++ 4 files changed, 64 insertions(+), 4 deletions(-) diff --git a/src/datetime-picker/DatePicker.js b/src/datetime-picker/DatePicker.js index 1427f797e..31994cb87 100644 --- a/src/datetime-picker/DatePicker.js +++ b/src/datetime-picker/DatePicker.js @@ -30,7 +30,11 @@ export default createComponent({ watch: { filter: 'updateInnerValue', - minDate: 'updateInnerValue', + minDate() { + this.$nextTick(() => { + this.updateInnerValue(); + }); + }, maxDate: 'updateInnerValue', value(val) { diff --git a/src/datetime-picker/TimePicker.js b/src/datetime-picker/TimePicker.js index a283ac810..5d60f94c9 100644 --- a/src/datetime-picker/TimePicker.js +++ b/src/datetime-picker/TimePicker.js @@ -45,7 +45,11 @@ export default createComponent({ watch: { filter: 'updateInnerValue', - minHour: 'updateInnerValue', + minHour() { + this.$nextTick(() => { + this.updateInnerValue(); + }); + }, maxHour: 'updateInnerValue', minMinute: 'updateInnerValue', maxMinute: 'updateInnerValue', diff --git a/src/datetime-picker/test/date-picker.spec.js b/src/datetime-picker/test/date-picker.spec.js index 69178b395..e6b345031 100644 --- a/src/datetime-picker/test/date-picker.spec.js +++ b/src/datetime-picker/test/date-picker.spec.js @@ -215,7 +215,7 @@ test('use min-date with filter', async () => { test('v-model', async () => { const minDate = new Date(2030, 0, 0, 0, 3); - + const wrapper = mount({ template: ` { }); await later(); - + wrapper.find('.van-picker__confirm').trigger('click'); expect(wrapper.vm.date).toEqual(minDate); }); @@ -248,3 +248,29 @@ test('value has an inital value', () => { wrapper.find('.van-picker__confirm').trigger('click'); expect(wrapper.emitted('confirm')[0][0]).toEqual(defaultValue); }); + +test('change min-date and emit correct value', async () => { + const defaultValue = new Date(2020, 10, 2, 10, 30); + const wrapper = mount({ + template: ` + + `, + data() { + return { + date: defaultValue, + minDate: new Date(2010, 0, 1, 10, 30), + } + }, + mounted() { + this.minDate = defaultValue; + }, + }) + + await later(); + wrapper.find('.van-picker__confirm').trigger('click'); + expect(wrapper.emitted('confirm')[0][0]).toEqual(defaultValue); +}); diff --git a/src/datetime-picker/test/time-picker.spec.js b/src/datetime-picker/test/time-picker.spec.js index 989b2e00c..1ca909bf8 100644 --- a/src/datetime-picker/test/time-picker.spec.js +++ b/src/datetime-picker/test/time-picker.spec.js @@ -150,3 +150,29 @@ test('set min-minute dynamically', async () => { wrapper.find('.van-picker__confirm').trigger('click'); expect(wrapper.emitted('confirm')[0][0]).toEqual('13:00'); }); + +test('change min-hour and emit correct value', async () => { + const wrapper = mount({ + template: ` + + `, + data() { + return { + time: '10:30', + minHour: 1, + } + }, + mounted() { + this.minHour = 11; + }, + }) + + await later(); + wrapper.find('.van-picker__confirm').trigger('click'); + expect(wrapper.emitted('confirm')[0][0]).toEqual('11:30'); +});