CampFirePlay/public/scoreboard.html
Degradin f4fe2d2c06 MiniApp Update
Added scoreboard
2025-01-21 09:43:10 +03:00

192 lines
7.6 KiB
HTML
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.

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Таблица лидеров</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEJgP4v8Jf+K6cM7V3zv7+uCGo5F5O+Xq6bM+bB5HXitBzvvhQ2V5+fu+n9U7" crossorigin="anonymous">
<style>
body {
background-color: #121212;
color: #e0e0e0;
font-family: 'Roboto', sans-serif;
margin: 0;
padding: 0;
}
.container {
max-width: 1200px;
margin-top: 40px;
}
h1 {
font-size: 2.5rem;
text-align: center;
color: #d46600;
margin-bottom: 30px;
}
.btn-group {
margin-bottom: 30px;
display: flex;
justify-content: center;
}
.btn {
background-color: #444;
color: #ffffff;
border: 1px solid #333;
font-size: 1.2rem;
padding: 15px 25px;
margin: 0 10px;
border-radius: 8px;
transition: 0.3s ease;
}
.btn:hover {
background-color: #00bcd4;
color: #121212;
}
.card {
background-color: #1f1f1f;
border-radius: 10px;
margin-bottom: 20px;
border: 1px solid #333;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.6);
}
.card-header {
background-color: #222;
color: #d46600;
font-size: 1.3rem;
padding: 15px;
text-align: center;
}
.card-body {
padding: 20px;
background-color: #282828;
color: #b0b0b0;
}
.card-body p {
margin: 10px 0;
font-size: 1.1rem;
}
.money {
color: #00c853;
font-weight: bold;
}
.no-data {
text-align: center;
font-size: 1.5rem;
color: #888;
margin-top: 50px;
}
.icon {
font-size: 1.5rem;
color: #ffeb3b;
}
</style>
</head>
<body>
<div class="container">
<h1>Таблица Лидеров</h1>
<!-- Кнопки для выбора топа -->
<div class="btn-group" role="group">
<button type="button" class="btn" id="btn-users" onclick="fetchTop('users')">Топ Пользователей</button>
<button type="button" class="btn" id="btn-characters" onclick="fetchTop('characters')">Топ Персонажей</button>
<button type="button" class="btn" id="btn-enterprises" onclick="fetchTop('enterprises')">Топ Предприятий</button>
<button type="button" class="btn" id="btn-businesses" onclick="fetchTop('businesses')">Топ Бизнесов</button>
</div>
<!-- Контейнер для вывода данных -->
<div id="top-content"></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz4fnFO9gyb6I7gDbNf8gU5X7ATpTftdO5n8J2LrC7gg6tGSRW3p5p1p17" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.min.js" integrity="sha384-KyZXEJgP4v8Jf+K6cM7V3zv7+uCGo5F5O+Xq6bM+bB5HXitBzvvhQ2V5+fu+n9U7" crossorigin="anonymous"></script>
<script>
// Функция для загрузки данных топа
async function fetchTop(type) {
console.log(`Загрузка данных топа: ${type}`);
const response = await fetch(`/${type}`);
const data = await response.json();
const topContent = document.getElementById('top-content');
topContent.innerHTML = ''; // Очистка текущего контента
if (data.length === 0) {
topContent.innerHTML = `<div class="no-data">Нет данных для отображения.</div>`;
return;
}
switch (type) {
case 'users':
topContent.innerHTML = data.map(player => `
<div class="card">
<div class="card-header">
${player.username} - ${player.status === 'bronze' ? '[🔺]' : player.status === 'silver' ? '[🔹]' : '[🔸]'}
</div>
<div class="card-body">
<p>Баланс: <span class="money">${player.money} ₽</span></p>
<p>Уровень: ${player.level}</p>
</div>
</div>
`).join('');
break;
case 'characters':
topContent.innerHTML = data.map(character => `
<div class="card">
<div class="card-header">
${character.username}
</div>
<div class="card-body">
<p>Грязные деньги: ${character.dirtymoney} ₽</p>
<p>Уровень: ${character.level}</p>
<p>Сила: ${character.force}</p>
<p>Интеллект: ${character.intelligence}</p>
<p>Устойчивость: ${character.resilience}</p>
<p>Выносливость: ${character.endurance}</p>
</div>
</div>
`).join('');
break;
case 'enterprises':
topContent.innerHTML = data.map(enterprise => `
<div class="card">
<div class="card-header">
${enterprise.name} <span class="icon">${enterprise.icon}</span>
</div>
<div class="card-body">
<p>Тип ресурса: ${enterprise.resourceType}</p>
<p>Уровень: ${enterprise.level}</p>
<p>Производительность: ${enterprise.efficiency} ед./час</p>
<p>Емкость склада: ${enterprise.warehouseCapacity} ед.</p>
<p>Текущие ресурсы: ${enterprise.currentResources} ед.</p>
<p>Владелец: ${enterprise.owner}</p>
</div>
</div>
`).join('');
break;
case 'businesses':
topContent.innerHTML = data.map(business => `
<div class="card">
<div class="card-header">
${business.name}
</div>
<div class="card-body">
<p>Владелец: ${business.owner}</p>
<p>Баланс: ${business.balance} ₽</p>
<p>Пользователи: ${business.usersCount}</p>
</div>
</div>
`).join('');
break;
default:
topContent.innerHTML = `<div class="no-data">Неизвестный тип топа.</div>`;
break;
}
}
// Инициализация
fetchTop('users'); // Показываем топ пользователей по умолчанию
</script>
</body>
</html>