Files
minicrm/public/time-selector.js
2026-02-02 16:16:14 +05:00

191 lines
8.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// time-selector.js - Управление выбором даты и времени для задач
// Функция для установки времени задачи (создание)
function setTaskTime(time) {
const timeButtons = document.querySelectorAll('.time-btn');
const hiddenTimeInput = document.getElementById('due-time');
// Убираем активный класс со всех кнопок
timeButtons.forEach(btn => {
btn.classList.remove('active');
});
// Добавляем активный класс к нажатой кнопке
const activeButton = Array.from(timeButtons).find(btn => {
if (time === '12:00') {
return btn.textContent.includes('До обеда');
} else {
return btn.textContent.includes('После обеда');
}
});
if (activeButton) {
activeButton.classList.add('active');
}
// Устанавливаем значение в скрытое поле
hiddenTimeInput.value = time;
// Обновляем отображение
updateDateTimeDisplay();
}
// Функция для установки времени задачи (редактирование)
function setEditTaskTime(time) {
const timeButtons = document.querySelectorAll('.edit-time-btn');
const hiddenTimeInput = document.getElementById('edit-due-time');
// Убираем активный класс со всех кнопок
timeButtons.forEach(btn => {
btn.classList.remove('active');
});
// Добавляем активный класс к нажатой кнопке
const activeButton = Array.from(timeButtons).find(btn => {
if (time === '12:00') {
return btn.textContent.includes('До обеда');
} else {
return btn.textContent.includes('После обеда');
}
});
if (activeButton) {
activeButton.classList.add('active');
}
// Устанавливаем значение в скрытое поле
hiddenTimeInput.value = time;
// Обновляем отображение
updateEditDateTimeDisplay();
}
// Функция для обновления отображения даты и времени (создание)
function updateDateTimeDisplay() {
const dateInput = document.getElementById('due-date');
const timeInput = document.getElementById('due-time');
const timeButtons = document.querySelectorAll('.time-btn');
if (dateInput.value && timeInput.value) {
// Обновляем текст кнопок с полной датой
const selectedDate = new Date(dateInput.value);
const formattedDate = selectedDate.toLocaleDateString('ru-RU', {
weekday: 'short',
day: 'numeric',
month: 'short'
});
timeButtons.forEach(btn => {
const timeText = btn.textContent.includes('До обеда') ? 'До обеда' : 'После обеда';
btn.innerHTML = `<i class="fas fa-${btn.textContent.includes('До обеда') ? 'sun' : 'moon'}"></i> ${timeText} (${timeInput.value})`;
});
}
}
// Функция для обновления отображения даты и времени (редактирование)
function updateEditDateTimeDisplay() {
const dateInput = document.getElementById('edit-due-date');
const timeInput = document.getElementById('edit-due-time');
const timeButtons = document.querySelectorAll('.edit-time-btn');
if (dateInput.value && timeInput.value) {
timeButtons.forEach(btn => {
const timeText = btn.textContent.includes('До обеда') ? 'До обеда' : 'После обеда';
btn.innerHTML = `<i class="fas fa-${btn.textContent.includes('До обеда') ? 'sun' : 'moon'}"></i> ${timeText} (${timeInput.value})`;
});
}
}
// Функция для инициализации выбора времени
function initializeTimeSelectors() {
// Устанавливаем сегодняшнюю дату по умолчанию для создания задачи
const today = new Date();
const tomorrow = new Date();
tomorrow.setDate(today.getDate() + 1);
// Форматируем дату для input[type="date"]
const formattedDate = tomorrow.toISOString().split('T')[0];
const dueDateInput = document.getElementById('due-date');
if (dueDateInput) {
dueDateInput.value = formattedDate;
// Устанавливаем время по умолчанию (12:00)
document.getElementById('due-time').value = '19:00';
// Добавляем активный класс к первой кнопке
const timeButtons = document.querySelectorAll('.time-btn');
if (timeButtons.length > 0) {
timeButtons[0].classList.add('active');
}
// Добавляем обработчик изменения даты
dueDateInput.addEventListener('change', function() {
updateDateTimeDisplay();
});
// Инициализируем отображение
updateDateTimeDisplay();
}
// Инициализация для редактирования
const editDueDateInput = document.getElementById('edit-due-date');
if (editDueDateInput) {
editDueDateInput.addEventListener('change', function() {
updateEditDateTimeDisplay();
});
}
}
// Функция для форматирования полной даты из отдельных полей
function getFullDateTime(dateInputId, timeInputId) {
const dateValue = document.getElementById(dateInputId).value;
const timeValue = document.getElementById(timeInputId).value;
if (!dateValue || !timeValue) {
return null;
}
return `${dateValue}T${timeValue}:00`;
}
// Функция для установки даты и времени в форму редактирования
function setDateTimeForEdit(taskDueDate) {
if (!taskDueDate) return;
const dateTime = new Date(taskDueDate);
const dateStr = dateTime.toISOString().split('T')[0];
const hours = dateTime.getHours().toString().padStart(2, '0');
const minutes = dateTime.getMinutes().toString().padStart(2, '0');
const timeStr = `${hours}:${minutes}`;
// Устанавливаем значения полей
document.getElementById('edit-due-date').value = dateStr;
document.getElementById('edit-due-time').value = timeStr;
// Устанавливаем активную кнопку времени
const timeButtons = document.querySelectorAll('.edit-time-btn');
timeButtons.forEach(btn => btn.classList.remove('active'));
// Определяем, какая кнопка должна быть активна
const isBeforeLunch = parseInt(hours) < 12 || (parseInt(hours) === 12 && parseInt(minutes) === 0);
const activeButton = isBeforeLunch ?
document.querySelector('.edit-time-btn:first-child') :
document.querySelector('.edit-time-btn:last-child');
if (activeButton) {
activeButton.classList.add('active');
// Обновляем текст кнопки
const timeText = isBeforeLunch ? 'До обеда' : 'После обеда';
activeButton.innerHTML = `<i class="fas fa-${isBeforeLunch ? 'sun' : 'moon'}"></i> ${timeText} (${timeStr})`;
// Обновляем другую кнопку
const otherButton = isBeforeLunch ?
document.querySelector('.edit-time-btn:last-child') :
document.querySelector('.edit-time-btn:first-child');
const otherTimeText = isBeforeLunch ? 'После обеда' : 'До обеда';
const otherTimeValue = isBeforeLunch ? '19:00' : '12:00';
otherButton.innerHTML = `<i class="fas fa-${isBeforeLunch ? 'moon' : 'sun'}"></i> ${otherTimeText} (${otherTimeValue})`;
}
}