Skip to content

Commit 1d9b3e2

Browse files
authored
fix(DatetimePicker): should update value when range changed (youzan#4676)
1 parent e4bdd50 commit 1d9b3e2

4 files changed

Lines changed: 45 additions & 12 deletions

File tree

src/datetime-picker/DatePicker.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ export default createComponent({
2929
},
3030

3131
watch: {
32+
filter: 'updateInnerValue',
33+
minDate: 'updateInnerValue',
34+
maxDate: 'updateInnerValue',
35+
3236
value(val) {
3337
val = this.formatValue(val);
3438

@@ -128,8 +132,8 @@ export default createComponent({
128132
};
129133
},
130134

131-
onChange(picker) {
132-
const indexes = picker.getIndexes();
135+
updateInnerValue() {
136+
const indexes = this.$refs.picker.getIndexes();
133137
const getValue = index => getTrueValue(this.originColumns[index].values[indexes[index]]);
134138

135139
const year = getValue(0);
@@ -156,6 +160,10 @@ export default createComponent({
156160
const value = new Date(year, month - 1, date, hour, minute);
157161

158162
this.innerValue = this.formatValue(value);
163+
},
164+
165+
onChange(picker) {
166+
this.updateInnerValue();
159167

160168
this.$nextTick(() => {
161169
this.$nextTick(() => {
@@ -164,8 +172,10 @@ export default createComponent({
164172
});
165173
},
166174

167-
updateColumnValue(value) {
175+
updateColumnValue() {
176+
const value = this.innerValue;
168177
const { formatter } = this;
178+
169179
let values = [
170180
formatter('year', `${value.getFullYear()}`),
171181
formatter('month', padZero(value.getMonth() + 1)),

src/datetime-picker/TimePicker.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ export default createComponent({
4444
},
4545

4646
watch: {
47+
filter: 'updateInnerValue',
48+
minHour: 'updateInnerValue',
49+
maxHour: 'updateInnerValue',
50+
minMinute: 'updateInnerValue',
51+
maxMinute: 'updateInnerValue',
52+
4753
value(val) {
4854
val = this.formatValue(val);
4955

@@ -67,13 +73,17 @@ export default createComponent({
6773
return `${hour}:${minute}`;
6874
},
6975

70-
onChange(picker) {
71-
const indexes = picker.getIndexes();
76+
updateInnerValue() {
77+
const indexes = this.$refs.picker.getIndexes();
7278
const hour = this.originColumns[0].values[indexes[0]];
7379
const minute = this.originColumns[1].values[indexes[1]];
7480
const value = `${hour}:${minute}`;
7581

7682
this.innerValue = this.formatValue(value);
83+
},
84+
85+
onChange(picker) {
86+
this.updateInnerValue();
7787

7888
this.$nextTick(() => {
7989
this.$nextTick(() => {
@@ -82,9 +92,9 @@ export default createComponent({
8292
});
8393
},
8494

85-
updateColumnValue(value) {
95+
updateColumnValue() {
8696
const { formatter } = this;
87-
const pair = value.split(':');
97+
const pair = this.innerValue.split(':');
8898
const values = [formatter('hour', pair[0]), formatter('minute', pair[1])];
8999

90100
this.$nextTick(() => {

src/datetime-picker/shared.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,15 @@ export const TimePickerMixin = {
5151
},
5252

5353
watch: {
54+
columns: 'updateColumnValue',
55+
5456
innerValue(val) {
5557
this.$emit('input', val);
56-
},
57-
58-
columns() {
59-
this.updateColumnValue(this.innerValue);
6058
}
6159
},
6260

6361
mounted() {
64-
this.updateColumnValue(this.innerValue);
62+
this.updateColumnValue();
6563
},
6664

6765
methods: {

src/datetime-picker/test/time-picker.spec.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,18 @@ test('dynamic set value', () => {
9292
expect(wrapper.emitted('confirm')[0][0]).toEqual('00:00');
9393
expect(wrapper.emitted('confirm')[1][0]).toEqual('22:30');
9494
});
95+
96+
test('change min-minute and emit correct value', async () => {
97+
const wrapper = mount(TimePicker, {
98+
propsData: {
99+
value: '12:00',
100+
minMinute: 0
101+
}
102+
});
103+
104+
await later();
105+
106+
wrapper.setProps({ minMinute: 30 });
107+
wrapper.find('.van-picker__confirm').trigger('click');
108+
expect(wrapper.emitted('confirm')[0][0]).toEqual('12:30');
109+
});

0 commit comments

Comments
 (0)