В библиотеке Naive UI компонент DatePicker является мощным инструментом для выбора даты и времени, предоставляя гибкие возможности настройки ограничений выбора. Управление ограничениями необходимо для предотвращения выбора недопустимых дат пользователем, например, для форм бронирования, регистрации событий или планирования задач.
disabled-dateОсновным механизмом ограничения выбора является свойство
disabled-date. Оно принимает функцию, возвращающую
true для дат, которые должны быть недоступны для
выбора:
import { createApp } from 'vue';
import { NDatePicker } from 'naive-ui';
const app = createApp({
template: `
<n-date-picker
v-model:value="selectedDate"
:disabled-date="isDisabledDate"
/>
`,
data() {
return {
selectedDate: null
};
},
methods: {
isDisabledDate(date) {
// Блокировка всех дат до текущего дня
const today = new Date();
return date < today;
}
}
});
app.mount('#app');
В этом примере все даты, предшествующие текущему дню, будут
недоступны для выбора. Функция isDisabledDate получает
объект Date и должна возвращать булево значение.
Для ограничений по диапазону дат можно комбинировать несколько
условий в disabled-date:
isDisabledDate(date) {
const today = new Date();
const maxDate = new Date();
maxDate.setMonth(today.getMonth() + 3); // ограничение до 3 месяцев вперед
return date < today || date > maxDate;
}
Таким образом, пользователь сможет выбирать только даты в пределах текущего дня и следующих трёх месяцев.
Иногда требуется разрешить выбор только определённых дней недели. Для
этого также используется disabled-date:
isDisabledDate(date) {
// Запрещаем выбор выходных (суббота и воскресенье)
const day = date.getDay();
return day === 0 || day === 6;
}
Функция getDay() возвращает день недели (0 —
воскресенье, 6 — суббота), что позволяет легко управлять рабочими и
нерабочими днями.
Компоненты DatePicker с включённой временной частью
(type="datetime") позволяют ограничивать выбор времени с
помощью свойства time-picker-props. Пример ограничения
времени на рабочий день:
<n-date-picker
v-model:value="selectedDateTime"
type="datetime"
:time-picker-props="{
disabledHours: () => Array.from({ length: 24 }, (_, i) => i).filter(h => h < 9 || h > 18),
disabledMinutes: () => [],
disabledSeconds: () => []
}"
/>
Здесь запрещены часы до 9:00 и после 18:00. Списки минут и секунд оставлены пустыми, но их также можно ограничивать при необходимости.
Для более тонкой настройки можно комбинировать
disabled-date и time-picker-props:
<n-date-picker
v-model:value="selectedDateTime"
type="datetime"
:disabled-date="date => date.getDay() === 0 || date.getDay() === 6"
:time-picker-props="{
disabledHours: () => Array.from({ length: 24 }, (_, i) => i).filter(h => h < 9 || h > 18)
}"
/>
В этом случае:
min-date и max-dateДля упрощённого ограничения диапазона дат можно использовать свойства
min-date и max-date. Они автоматически
блокируют выбор за пределами заданного диапазона:
<n-date-picker
v-model:value="selectedDate"
:min-date="new Date()"
:max-date="new Date(new Date().setMonth(new Date().getMonth() + 3))"
/>
Этот способ особенно удобен для статических диапазонов, когда нет необходимости в сложной логике.
Все перечисленные методы могут комбинироваться для достижения максимально точного контроля:
disabled-date — для сложной динамической логики;min-date / max-date — для статического
диапазона;time-picker-props — для ограничения времени внутри
дня.Пример комплексного ограничения:
<n-date-picker
v-model:value="appointment"
type="datetime"
:min-date="new Date()"
:max-date="new Date(new Date().setMonth(new Date().getMonth() + 1))"
:disabled-date="date => date.getDay() === 0 || date.getDay() === 6"
:time-picker-props="{
disabledHours: () => Array.from({ length: 24 }, (_, i) => i).filter(h => h < 9 || h > 17)
}"
/>
В этом примере доступные даты — только рабочие дни в течение следующего месяца, а время — только с 9:00 до 17:00.
disabled-date
с функцией, возвращающей true для запрещённых дат.min-date и max-date
ускоряют разработку и делают код читаемым.disabled-date и
time-picker-props позволяет создавать сложные графики
доступности.Эти методы дают полный контроль над выбором дат и времени, позволяя создавать интерфейсы с точными и безопасными ограничениями, полностью соответствующими требованиям приложения.