public/assets/js/task_manager.js
Вот содержимое файла public/assets/js/task_manager.js
:
// Task Manager JavaScript
// Handle Task Filtering
function filterTasks() {
let statusFilter = document.getElementById('statusFilter').value;
let userFilter = document.getElementById('userFilter').value;
let categoryFilter = document.getElementById('categoryFilter').value;
let priorityFilter = document.getElementById('priorityFilter').value;
let tagFilter = document.getElementById('tagFilter').value;
// Prepare request data
let data = {
status: statusFilter,
user: userFilter,
category: categoryFilter,
priority: priorityFilter,
tag: tagFilter
};
// Perform AJAX request to fetch filtered tasks
fetch('/index.php?route=extension/task_manager/filterTasks', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(result => {
// Update task list
updateTaskList(result);
})
.catch(error => console.error('Error filtering tasks:', error));
}
// Update Task List
function updateTaskList(tasks) {
let taskListContainer = document.getElementById('taskListContainer');
taskListContainer.innerHTML = '';
tasks.forEach(task => {
let taskItem = document.createElement('div');
taskItem.classList.add('task-item');
taskItem.innerHTML = `
<h3>${task.title}</h3>
<p>${task.description}</p>
<div class="task-status ${task.status}">${task.status}</div>
<div class="task-priority">${task.priority}</div>
<div class="task-due-date">${task.due_date}</div>
`;
taskListContainer.appendChild(taskItem);
});
}
// Handle Task Creation
document.getElementById('createTaskForm').addEventListener('submit', function(event) {
event.preventDefault();
let title = document.getElementById('taskTitle').value;
let description = document.getElementById('taskDescription').value;
let user = document.getElementById('taskUser').value;
let category = document.getElementById('taskCategory').value;
let priority = document.getElementById('taskPriority').value;
let dueDate = document.getElementById('taskDueDate').value;
let tags = document.getElementById('taskTags').value;
// Prepare task data
let taskData = {
title: title,
description: description,
user: user,
category: category,
priority: priority,
due_date: dueDate,
tags: tags
};
// Perform AJAX request to create task
fetch('/index.php?route=extension/task_manager/createTask', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(taskData)
})
.then(response => response.json())
.then(result => {
if (result.success) {
alert('Task created successfully!');
// Clear form
document.getElementById('createTaskForm').reset();
// Refresh task list
filterTasks();
} else {
alert('Error creating task');
}
})
.catch(error => console.error('Error creating task:', error));
});
// Handle Task Editing
function editTask(taskId) {
// Fetch task data for editing
fetch(`/index.php?route=extension/task_manager/getTask&id=${taskId}`)
.then(response => response.json())
.then(task => {
// Populate form with task data
document.getElementById('taskTitle').value = task.title;
document.getElementById('taskDescription').value = task.description;
document.getElementById('taskUser').value = task.user;
document.getElementById('taskCategory').value = task.category;
document.getElementById('taskPriority').value = task.priority;
document.getElementById('taskDueDate').value = task.due_date;
document.getElementById('taskTags').value = task.tags;
// Change form action to update task
document.getElementById('createTaskForm').setAttribute('data-action', 'edit');
document.getElementById('createTaskForm').setAttribute('data-task-id', taskId);
})
.catch(error => console.error('Error fetching task data:', error));
}
// Handle Task Update
document.getElementById('createTaskForm').addEventListener('submit', function(event) {
event.preventDefault();
let action = document.getElementById('createTaskForm').getAttribute('data-action');
let taskId = document.getElementById('createTaskForm').getAttribute('data-task-id');
let title = document.getElementById('taskTitle').value;
let description = document.getElementById('taskDescription').value;
let user = document.getElementById('taskUser').value;
let category = document.getElementById('taskCategory').value;
let priority = document.getElementById('taskPriority').value;
let dueDate = document.getElementById('taskDueDate').value;
let tags = document.getElementById('taskTags').value;
let taskData = {
title: title,
description: description,
user: user,
category: category,
priority: priority,
due_date: dueDate,
tags: tags
};
let url = action === 'edit' ? `/index.php?route=extension/task_manager/updateTask&id=${taskId}` : '/index.php?route=extension/task_manager/createTask';
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(taskData)
})
.then(response => response.json())
.then(result => {
if (result.success) {
alert(action === 'edit' ? 'Task updated successfully!' : 'Task created successfully!');
// Clear form
document.getElementById('createTaskForm').reset();
document.getElementById('createTaskForm').removeAttribute('data-action');
document.getElementById('createTaskForm').removeAttribute('data-task-id');
// Refresh task list
filterTasks();
} else {
alert('Error saving task');
}
})
.catch(error => console.error('Error saving task:', error));
});
// Handle Task Deletion
function deleteTask(taskId) {
if (confirm('Are you sure you want to delete this task?')) {
fetch(`/index.php?route=extension/task_manager/deleteTask&id=${taskId}`, {
method: 'GET'
})
.then(response => response.json())
.then(result => {
if (result.success) {
alert('Task deleted successfully!');
// Refresh task list
filterTasks();
} else {
alert('Error deleting task');
}
})
.catch(error => console.error('Error deleting task:', error));
}
}
// Handle Task Sorting
function sortTasks(sortBy) {
let sortOrder = document.getElementById('sortOrder').value;
fetch(`/index.php?route=extension/task_manager/sortTasks&sortBy=${sortBy}&sortOrder=${sortOrder}`, {
method: 'GET'
})
.then(response => response.json())
.then(result => {
// Update task list
updateTaskList(result);
})
.catch(error => console.error('Error sorting tasks:', error));
}
// Handle Pagination
function changePage(page) {
fetch(`/index.php?route=extension/task_manager/changePage&page=${page}`, {
method: 'GET'
})
.then(response => response.json())
.then(result => {
// Update task list
updateTaskList(result);
})
.catch(error => console.error('Error changing page:', error));
}
Объяснение:
-
Фильтрация задач: Функция
filterTasks
отправляет запрос для фильтрации задач по различным критериям, таким как статус, пользователь, категория, приоритет и теги. -
Обновление списка задач: Функция
updateTaskList
обновляет HTML содержимое списка задач после фильтрации или создания/редактирования задач. -
Создание задачи: Форма для создания задачи с помощью события
submit
на форме. Данные отправляются через AJAX. -
Редактирование задачи: Функция
editTask
получает данные о задаче для редактирования, заполняет форму редактирования и изменяет действие формы на обновление. -
Обновление задачи: При обновлении задачи данные отправляются через AJAX для сохранения изменений.
-
Удаление задачи: Функция
deleteTask
удаляет задачу по идентификатору. -
Сортировка задач: Функция
sortTasks
сортирует задачи по выбранному полю и направлению сортировки. -
Пагинация: Функция
changePage
изменяет страницу задач при изменении страницы в пагинации.
Этот файл управляет действиями и динамическим поведением на фронтенде для модуля "Менеджер задач".