tgadmin/webadmin/static/js/questions.js
2024-07-25 15:19:15 +03:00

202 lines
9.1 KiB
JavaScript
Raw Permalink 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.

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;
}
});