tgadmin/webadmin/static/js/users.js

126 lines
5.4 KiB
JavaScript
Raw Normal View History

2024-07-25 12:19:15 +00:00
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;
}