tgadmin/webadmin/static/js/questions.js

202 lines
9.1 KiB
JavaScript
Raw Permalink Normal View History

2024-07-25 12:19:15 +00:00
document.addEventListener("DOMContentLoaded", () => {
const createButton = document.getElementById("create-button");
const selectOtdel = document.getElementById("select-otdel");
const userCardsContainer = document.querySelector(".user-cards-container");
const paginationContainer = document.querySelector(".pagination");
const questionCreateModal = document.getElementById("question-create-modal");
const questionEditModal = document.getElementById("question-edit-modal");
const closeButton = document.querySelectorAll(".close-button");
const questionCreateForm = document.getElementById("question-create-form");
const questionEditForm = document.getElementById("question-edit-form");
const questionTitleInput = document.getElementById("question-title");
const questionTextInput = document.getElementById("question-text");
const questionFileInput = document.getElementById("question-file");
const questionOtdelIdDisplay = document.getElementById("question-otdel-id");
const editQuestionIdInput = document.getElementById("edit-question-id");
const editQuestionTitleInput = document.getElementById("edit-question-title");
const editQuestionTextInput = document.getElementById("edit-question-text");
const editQuestionFileInput = document.getElementById("edit-question-file");
const editQuestionOtdelIdDisplay = document.getElementById("edit-question-otdel-id");
let currentPage = new URLSearchParams(window.location.search).get('page') || 1;
let selectedOtdelId = new URLSearchParams(window.location.search).get('otdel') || null;
// Обновляем страницу при изменении отдела
selectOtdel.addEventListener("change", (event) => {
currentPage = 1; // Сбрасываем страницу на 1
selectedOtdelId = event.target.value;
updateUrl();
});
// Обновляем URL при нажатии на кнопку пагинации
paginationContainer.addEventListener("click", (event) => {
if (event.target.classList.contains("pagination-button")) {
const page = event.target.getAttribute("data-page");
if (page) {
currentPage = page;
updateUrl();
}
}
});
// Обновляем URL с новыми параметрами
function updateUrl() {
const params = new URLSearchParams();
params.set('page', currentPage); // Устанавливаем страницу первым
if (selectedOtdelId) {
params.set('otdel', selectedOtdelId); // Устанавливаем отдел вторым
}
window.history.replaceState({}, '', `${window.location.pathname}?${params}`);
window.location.reload(); // Перезагрузить страницу с новыми параметрами
}
// Открытие модального окна для создания вопроса
if (createButton) {
createButton.addEventListener("click", () => {
if (selectedOtdelId) {
questionOtdelIdDisplay.textContent = `ID отдела: ${selectedOtdelId}`;
questionCreateModal.classList.add("show"); // Показать модальное окно
}
});
}
// Открытие модального окна для редактирования вопроса
function openEditModal(questionId, title, text, fileName, otdelId) {
editQuestionIdInput.value = questionId;
editQuestionTitleInput.value = title;
editQuestionTextInput.value = text;
editQuestionOtdelIdDisplay.textContent = `ID отдела: ${otdelId}`;
editQuestionFileInput.value = ''; // Файловый input не поддерживает установки значения через JS
questionEditModal.classList.add("show"); // Показать модальное окно
}
// Обработчик клика по кнопкам редактирования
userCardsContainer.addEventListener("click", (event) => {
if (event.target.classList.contains("edit-button")) {
const questionId = event.target.getAttribute("data-question-id");
const title = event.target.getAttribute("data-question-name");
const text = event.target.getAttribute("data-question-text") || "";
const fileName = event.target.getAttribute("data-question-file") || "";
const otdelId = event.target.getAttribute("data-question-otdel-id");
openEditModal(questionId, title, text, fileName, otdelId);
} else if (event.target.classList.contains("delete-button")) {
const questionId = event.target.getAttribute("data-question-id");
if (confirm("Вы уверены, что хотите удалить этот вопрос?")) {
deleteQuestion(questionId);
}
}
});
// Функция для удаления вопроса
async function deleteQuestion(questionId) {
const response = await fetch(`/delete-question/${questionId}`, {
method: "DELETE"
});
if (response.ok) {
updateUrl(); // Обновляем URL и перезагружаем страницу
} else {
console.error("Failed to delete question");
}
}
// Обработчик закрытия модальных окон
closeButton.forEach(button => {
button.addEventListener("click", (event) => {
const modalId = event.target.getAttribute("data-modal-id");
const modal = document.getElementById(modalId);
if (modal) {
modal.classList.remove("show"); // Скрыть соответствующее модальное окно
}
});
});
window.addEventListener("click", (event) => {
if (event.target === questionCreateModal || event.target === questionEditModal) {
event.target.classList.remove("show"); // Скрыть модальное окно при клике вне его
}
});
// Обработка отправки формы для создания вопроса
if (questionCreateForm) {
questionCreateForm.addEventListener("submit", async (event) => {
event.preventDefault();
const title = questionTitleInput.value;
const text = questionTextInput.value || "";
const file = questionFileInput.files[0] || null;
if (!text && !file) {
alert("Пожалуйста, заполните хотя бы одно поле: текст или файл.");
return;
}
const formData = new FormData();
formData.append("title", title);
formData.append("text", text);
if (file) {
formData.append("file", file);
}
formData.append("otdel_id", selectedOtdelId);
const response = await fetch(`/create-question`, {
method: "POST",
body: formData
});
if (response.ok) {
updateUrl(); // Обновляем URL и перезагружаем страницу
questionCreateModal.classList.remove("show"); // Скрыть модальное окно
} else {
console.error("Failed to create question");
}
});
}
// Обработка отправки формы для редактирования вопроса
if (questionEditForm) {
questionEditForm.addEventListener("submit", async (event) => {
event.preventDefault();
const questionId = editQuestionIdInput.value;
const title = editQuestionTitleInput.value;
const text = editQuestionTextInput.value || "";
const file = editQuestionFileInput.files[0] || null;
if (!text && !file) {
alert("Пожалуйста, заполните хотя бы одно поле: текст или файл.");
return;
}
const formData = new FormData();
formData.append("id", questionId);
formData.append("title", title);
formData.append("text", text);
if (file) {
formData.append("file", file);
}
formData.append("otdel_id", editQuestionOtdelIdDisplay.textContent.split(': ')[1]);
const response = await fetch(`/edit-question`, {
method: "PUT",
body: formData
});
if (response.ok) {
updateUrl(); // Обновляем URL и перезагружаем страницу
questionEditModal.classList.remove("show"); // Скрыть модальное окно
} else {
console.error("Failed to edit question");
}
});
}
// Инициализация на основе параметров URL
if (selectedOtdelId) {
selectOtdel.value = selectedOtdelId;
}
});