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

126 lines
5.4 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.

document.addEventListener('DOMContentLoaded', function() {
const newsletterTitle = document.getElementById("newsletter-title");
const newsletterForm = document.getElementById("newsletter-form");
const newsletterMessageInput = document.getElementById("newsletter-message");
const newsletterButton = document.getElementById("newsletter-button");
const newsletterModal = document.getElementById("newsletter-modal");
const closeButton = document.querySelectorAll(".close-button");
// Проверка существования элементов перед добавлением обработчиков
if (newsletterButton) {
newsletterButton.addEventListener("click", () => {
if (newsletterTitle && newsletterMessageInput && newsletterModal) {
newsletterMessageInput.value = ""; // Очистить поле ввода
newsletterTitle.textContent = "Рассылка";
newsletterModal.classList.add("show"); // Показать модальное окно
}
});
}
if (newsletterForm) {
newsletterForm.addEventListener("submit", async (event) => {
event.preventDefault();
const message = newsletterMessageInput.value;
try {
const response = await fetch(`/send-newsletter`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ message: message })
});
// Парсим JSON-ответ
const result = await response.json();
if (response.ok) {
alert("Рассылка отправлена успешно!");
if (newsletterModal) {
newsletterModal.classList.remove("show"); // Скрыть модальное окно
}
} else {
// Показать сообщение об ошибке, если оно есть
const errorMessage = result.message || "Произошла ошибка, рассылка не была начата";
alert(`Ошибка: ${errorMessage}`);
if (newsletterModal) {
newsletterModal.classList.remove("show"); // Скрыть модальное окно
}
}
} catch (error) {
console.error("Error:", error);
alert("Произошла ошибка при отправке запроса.");
}
});
}
if (closeButton.length > 0) {
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"); // Скрыть соответствующее модальное окно
}
});
});
}
function closeModal(event) {
if (newsletterModal && event.target === newsletterModal) {
newsletterModal.classList.remove("show"); // Скрыть модальное окно при клике вне его
}
}
window.addEventListener("click", closeModal);
window.addEventListener("touchend", closeModal); // Обработка касания на мобильных устройствах
const statusToggles = document.querySelectorAll('.status-toggle');
statusToggles.forEach(toggle => {
toggle.addEventListener('change', async function() {
const userId = this.getAttribute('data-user-id');
const status = this.checked ? 'enabled' : 'disabled';
try {
const response = await fetch(`/update_status/${userId}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': getCookie('csrftoken') // Получение CSRF токена
},
body: JSON.stringify({ status: status })
});
if (response.ok) {
const statusLabel = this.closest('.user-status').querySelector('.status-label');
if (statusLabel) {
statusLabel.textContent = this.checked ? 'Доступ открыт' : 'Доступ закрыт';
}
console.log('Status updated successfully');
} else {
console.error('Failed to update status');
}
} catch (error) {
console.error('Error:', error);
}
});
});
});
// Функция для получения CSRF токена из cookie
function getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== '') {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}