commit 12.01

This commit is contained in:
Владимир
2026-01-12 14:25:15 +00:00
parent 36084ba590
commit ae5ab2554b
26 changed files with 1116 additions and 1083 deletions

View File

@@ -180,45 +180,105 @@
</div>
<script>
// Получаем токен из localStorage
const token = localStorage.getItem('auth_token');
const token = localStorage.getItem('token');
// Если нет токена — перенаправляем на вход
if (!token) {
alert('Доступ только для администраторов!');
window.location.href = '/register-login.html';
window.location.href = 'register-login.html';
}
// Загружаем услуги
fetch('/api/admin/services', {
headers: {
'Authorization': 'Bearer ' + token,
'Accept': 'application/json'
window.onload = loadServices;
async function loadServices() {
try {
const res = await fetch('/api/admin/services', {
headers: { 'Authorization': `Bearer ${token}` }
});
const services = await res.json();
const list = document.getElementById('services-list');
services.forEach(s => {
list.innerHTML += `
<div>
<p><strong>${s.name}</strong> — ${s.price}₽ — ${s.is_active ? 'Активна' : 'Неактивна'}</p>
<button onclick="editService(${s.id})">Редактировать</button>
<button onclick="toggleService(${s.id}, ${s.is_active})">${s.is_active ? '❌ Деактивировать' : '✅ Активировать'}</button>
<button onclick="deleteService(${s.id})">🗑️ Удалить</button>
</div>
`;
});
} catch (err) {
alert('Ошибка загрузки услуг');
}
})
.then(response => {
if (!response.ok) {
throw new Error('Ошибка сервера: ' + response.status);
}
async function addService(event) {
event.preventDefault();
const formData = {
name: document.getElementById('serviceName').value,
description: document.getElementById('serviceDescription').value,
duration_minutes: parseInt(document.getElementById('serviceDuration').value),
price: parseFloat(document.getElementById('servicePrice').value),
is_active: true
};
try {
const res = await fetch('/api/admin/services', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify(formData)
});
if (res.ok) {
alert('Услуга добавлена');
document.getElementById('addServiceForm').reset();
window.location.reload();
}
} catch (err) {
alert('Ошибка добавления');
}
return response.json();
})
.then(data => {
const servicesList = document.getElementById('services-list');
data.forEach(service => {
const item = document.createElement('div');
item.innerHTML = `
<h3>${service.name}</h3>
<p>Цена: ${service.price} ₽</p>
<p>Описание: ${service.description || 'Нет описания'}</p>
<hr>
`;
servicesList.appendChild(item);
});
})
.catch(error => {
console.error('Ошибка:', error);
document.body.innerHTML = `<h2 style="color: red;">Ошибка загрузки данных: ${error.message}</h2>`;
});
}
async function toggleService(id, isActive) {
try {
const res = await fetch(`/api/admin/services/${id}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({ is_active: !isActive })
});
if (res.ok) {
alert(`Услуга ${!isActive ? 'активирована' : 'деактивирована'}`);
window.location.reload();
}
} catch (err) {
alert('Ошибка');
}
}
async function deleteService(id) {
if (confirm('Удалить услугу?')) {
try {
const res = await fetch(`/api/admin/services/${id}`, {
method: 'DELETE',
headers: { 'Authorization': `Bearer ${token}` }
});
if (res.ok) {
alert('Услуга удалена');
window.location.reload();
}
} catch (err) {
alert('Ошибка');
}
}
}
</script>
</body>
</html>