Violenterouse's picture
Создай сайт с задачами и уведомлениями сотрудникам в telegram, функциональный и простой интерфейс легко ставить задачи переставлять их и удалять, Задачи можно настраивать еженедельно, ежедневно, ежемесячно на конкретные дату и время. Уведомления можно настроить на любое время и дату, каждый понедельник приходит уведомления со списком задач на неделю, дизайн футуристичный, сочетание черного, красного и голубого цветов
b406761 verified
document.addEventListener('DOMContentLoaded', function() {
// Task form submission
const taskForm = document.getElementById('taskForm');
const taskList = document.getElementById('taskList');
taskForm.addEventListener('submit', function(e) {
e.preventDefault();
// Get form values
const taskName = this.elements[0].value;
const description = this.elements[1].value;
const dueDate = this.elements[2].value;
const recurrence = this.elements[3].value;
const telegramNotify = this.elements[4].checked;
// Create new task element
const taskItem = document.createElement('div');
taskItem.className = 'task-item bg-gray-800 rounded-lg p-4 border border-gray-700 hover:border-secondary transition duration-200';
const formattedDate = new Date(dueDate).toLocaleString('en-US', {
weekday: 'short',
month: 'short',
day: 'numeric',
hour: '2-digit',
minute: '2-digit'
});
taskItem.innerHTML = `
<div class="flex justify-between items-start">
<div class="flex items-start">
<input type="checkbox" class="mt-1 h-4 w-4 text-primary focus:ring-primary border-gray-700 rounded">
<div class="ml-3">
<h3 class="font-medium">${taskName}</h3>
<p class="text-sm text-gray-400 mt-1">Due: ${formattedDate}</p>
<div class="flex items-center mt-2 text-xs">
<span class="bg-gray-700 px-2 py-1 rounded mr-2">${recurrence.charAt(0).toUpperCase() + recurrence.slice(1)}</span>
${telegramNotify ? `<span class="flex items-center text-secondary">
<i data-feather="send" class="w-3 h-3 mr-1"></i>
Telegram
</span>` : ''}
</div>
</div>
</div>
<button class="text-gray-400 hover:text-red-500 delete-task">
<i data-feather="trash-2" class="w-4 h-4"></i>
</button>
</div>
`;
// Add to task list
taskList.prepend(taskItem);
feather.replace();
// Add event listeners to new task
taskItem.querySelector('input[type="checkbox"]').addEventListener('change', function() {
const taskText = this.closest('.flex').querySelector('h3');
if (this.checked) {
taskText.classList.add('text-gray-500', 'line-through');
} else {
taskText.classList.remove('text-gray-500', 'line-through');
}
});
taskItem.querySelector('.delete-task').addEventListener('click', function() {
taskItem.classList.add('opacity-0');
setTimeout(() => {
taskItem.remove();
}, 300);
});
// Reset form
this.reset();
});
// Add animation to task items on load
document.querySelectorAll('.task-item').forEach((item, index) => {
setTimeout(() => {
item.classList.add('opacity-100');
}, index * 100);
});
});