mirror of
https://github.com/tenrok/vue2-datepicker.git
synced 2026-06-24 22:50:36 +03:00
feat: improve the boundary of disabledtime (#597)
This commit is contained in:
@@ -70,19 +70,19 @@ describe('TimePanel', () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
const hour = wrapper.find('[data-type=hour] li:nth-child(2)');
|
const hour = wrapper.find('[data-type=hour] li:nth-child(2)');
|
||||||
hour.trigger('click');
|
await hour.trigger('click');
|
||||||
expect(wrapper.emitted().select[0][0]).toEqual(new Date(2019, 9, 10, 1));
|
expect(wrapper.emitted().select[0][0]).toEqual(new Date(2019, 9, 10, 1));
|
||||||
await wrapper.setProps({ value: new Date(2019, 9, 10, 1) });
|
await wrapper.setProps({ value: new Date(2019, 9, 10, 1) });
|
||||||
const minute = wrapper.find('[data-type=minute] li:nth-child(2)');
|
const minute = wrapper.find('[data-type=minute] li:nth-child(2)');
|
||||||
minute.trigger('click');
|
await minute.trigger('click');
|
||||||
expect(wrapper.emitted().select[1][0]).toEqual(new Date(2019, 9, 10, 1, 1));
|
expect(wrapper.emitted().select[1][0]).toEqual(new Date(2019, 9, 10, 1, 1));
|
||||||
await wrapper.setProps({ value: new Date(2019, 9, 10, 1, 1) });
|
await wrapper.setProps({ value: new Date(2019, 9, 10, 1, 1) });
|
||||||
const second = wrapper.find('[data-type=second] li:nth-child(2)');
|
const second = wrapper.find('[data-type=second] li:nth-child(2)');
|
||||||
second.trigger('click');
|
await second.trigger('click');
|
||||||
expect(wrapper.emitted().select[2][0]).toEqual(new Date(2019, 9, 10, 1, 1, 1));
|
expect(wrapper.emitted().select[2][0]).toEqual(new Date(2019, 9, 10, 1, 1, 1));
|
||||||
await wrapper.setProps({ value: new Date(2019, 9, 10, 1, 1, 1) });
|
await wrapper.setProps({ value: new Date(2019, 9, 10, 1, 1, 1) });
|
||||||
const pm = wrapper.find('[data-type=ampm] li:nth-child(2)');
|
const pm = wrapper.find('[data-type=ampm] li:nth-child(2)');
|
||||||
pm.trigger('click');
|
await pm.trigger('click');
|
||||||
expect(wrapper.emitted().select[3][0]).toEqual(new Date(2019, 9, 10, 13, 1, 1));
|
expect(wrapper.emitted().select[3][0]).toEqual(new Date(2019, 9, 10, 13, 1, 1));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -9,13 +9,13 @@
|
|||||||
></date-picker>
|
></date-picker>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<p>Not before 09:00</p>
|
<p>Not before 09:30</p>
|
||||||
<date-picker
|
<date-picker
|
||||||
v-model="value3"
|
v-model="value3"
|
||||||
value-type="format"
|
value-type="format"
|
||||||
type="time"
|
type="time"
|
||||||
placeholder="HH:mm:ss"
|
placeholder="HH:mm:ss"
|
||||||
:default-value="new Date().setHours(9, 0, 0, 0)"
|
:default-value="new Date().setHours(9, 30, 0, 0)"
|
||||||
:disabled-time="notBeforeNineOClock"
|
:disabled-time="notBeforeNineOClock"
|
||||||
></date-picker>
|
></date-picker>
|
||||||
</section>
|
</section>
|
||||||
@@ -50,7 +50,7 @@ export default {
|
|||||||
return date < today || date > new Date(today.getTime() + 7 * 24 * 3600 * 1000);
|
return date < today || date > new Date(today.getTime() + 7 * 24 * 3600 * 1000);
|
||||||
},
|
},
|
||||||
notBeforeNineOClock(date) {
|
notBeforeNineOClock(date) {
|
||||||
return date.getHours() < 9;
|
return date < new Date(date.getTime()).setHours(9, 30, 0, 0);
|
||||||
},
|
},
|
||||||
notBeforeToday(date) {
|
notBeforeToday(date) {
|
||||||
return date < new Date(new Date().setHours(0, 0, 0, 0));
|
return date < new Date(new Date().setHours(0, 0, 0, 0));
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
v-for="(item, j) in col.list"
|
v-for="(item, j) in col.list"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
:data-index="j"
|
:data-index="j"
|
||||||
:class="[`${prefixClass}-time-item`, getClasses(item.value)]"
|
:class="[`${prefixClass}-time-item`, getClasses(item.value, col.type)]"
|
||||||
>
|
>
|
||||||
{{ item.text }}
|
{{ item.text }}
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
+47
-9
@@ -120,10 +120,12 @@ export default {
|
|||||||
default: 100,
|
default: 100,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
innerValue: getValidDate(this.value, this.defaultValue),
|
||||||
|
};
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
innerValue() {
|
|
||||||
return getValidDate(this.value, this.defaultValue);
|
|
||||||
},
|
|
||||||
title() {
|
title() {
|
||||||
const titleFormat = this.timeTitleFormat;
|
const titleFormat = this.timeTitleFormat;
|
||||||
const date = new Date(this.innerValue);
|
const date = new Date(this.innerValue);
|
||||||
@@ -147,25 +149,61 @@ export default {
|
|||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
immediate: true,
|
||||||
|
handler() {
|
||||||
|
this.innerValue = getValidDate(this.value, this.defaultValue);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
formatDate(date, fmt) {
|
formatDate(date, fmt) {
|
||||||
return format(date, fmt, { locale: this.getLocale().formatLocale });
|
return format(date, fmt, { locale: this.getLocale().formatLocale });
|
||||||
},
|
},
|
||||||
isDisabled(date) {
|
isDisabledTime(value) {
|
||||||
return this.disabledTime(new Date(date));
|
return this.disabledTime(new Date(value));
|
||||||
|
},
|
||||||
|
isDisabledHour(date) {
|
||||||
|
const value = new Date(date);
|
||||||
|
return (
|
||||||
|
this.isDisabledTime(value) &&
|
||||||
|
this.isDisabledTime(value.setMinutes(0, 0, 0)) &&
|
||||||
|
this.isDisabledTime(value.setMinutes(59, 59, 999))
|
||||||
|
);
|
||||||
|
},
|
||||||
|
isDisabledMinute(date) {
|
||||||
|
const value = new Date(date);
|
||||||
|
return (
|
||||||
|
this.isDisabledTime(value) &&
|
||||||
|
this.isDisabledTime(value.setSeconds(0, 0)) &&
|
||||||
|
this.isDisabledTime(value.setSeconds(59, 999))
|
||||||
|
);
|
||||||
|
},
|
||||||
|
isDisabled(date, type) {
|
||||||
|
if (type === 'hour') {
|
||||||
|
return this.isDisabledHour(date);
|
||||||
|
}
|
||||||
|
if (type === 'minute') {
|
||||||
|
return this.isDisabledMinute(date);
|
||||||
|
}
|
||||||
|
return this.isDisabledTime(date);
|
||||||
},
|
},
|
||||||
handleSelect(value, type) {
|
handleSelect(value, type) {
|
||||||
const date = new Date(value);
|
const date = new Date(value);
|
||||||
if (!this.isDisabled(value)) {
|
if (!this.isDisabled(value, type)) {
|
||||||
this.$emit('select', date, type);
|
this.innerValue = date;
|
||||||
|
if (!this.isDisabledTime(date)) {
|
||||||
|
this.$emit('select', date, type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
handleClickTitle() {
|
handleClickTitle() {
|
||||||
this.$emit('clicktitle');
|
this.$emit('clicktitle');
|
||||||
},
|
},
|
||||||
getClasses(value) {
|
getClasses(value, type) {
|
||||||
const cellDate = new Date(value);
|
const cellDate = new Date(value);
|
||||||
if (this.isDisabled(value)) {
|
if (this.isDisabled(value, type)) {
|
||||||
return 'disabled';
|
return 'disabled';
|
||||||
}
|
}
|
||||||
if (cellDate.getTime() === this.innerValue.getTime()) {
|
if (cellDate.getTime() === this.innerValue.getTime()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user