zmiany w changlogach, alertach itp

This commit is contained in:
Mateusz Gruszczyński
2025-03-04 11:00:51 +01:00
parent 85a37e4a78
commit 73a4e6149a
4 changed files with 218 additions and 101 deletions

View File

@ -145,6 +145,23 @@
padding: 0.5rem;
}
}
/* ========== Modal w trybie ciemny, ========== */
.dark-mode .modal-content {
background-color: #333;
color: #ddd;
border: none;
}
.dark-mode .modal-header,
.dark-mode .modal-footer {
border-color: #444;
}
.dark-mode .modal-title {
color: #fff;
}
.dark-mode .btn-close {
filter: invert(1);
}
</style>
{% block extra_head %}{% endblock %}
</head>

View File

@ -201,6 +201,11 @@ body.dark-mode .table-bordered > :not(caption) > * > * {
<button id="mass-firmware-cancel-btn" class="btn btn-secondary ms-2">Anuluj</button>
</div>
<!-- Overlay informujący o zakończonym odświeżaniu -->
<div id="mass-update-overlay" style="display:none; position: fixed; top:0; left:0; width:100%; height:100%; background: rgba(0,0,0,0.7); z-index:1100; color:white; text-align:center; padding-top:200px;">
<h3>Polecnie odświeżenia urządzeń wykonane!</h3>
</div>
<script>
// Ten sam skrypt masowych akcji, przeniesiony bez zmian w logice
document.addEventListener('DOMContentLoaded', function() {
@ -241,12 +246,12 @@ body.dark-mode .table-bordered > :not(caption) > * > * {
// Pokaż overlay z paskiem postępu (5 minut)
var overlay = document.getElementById('mass-system-update-overlay');
overlay.style.display = 'block';
var timeLeft = 300; // 300 sekund
var timeLeft = 200; // 200 sekund
var progressBar = document.getElementById('mass-system-progress');
var timerDisplay = document.getElementById('mass-system-timer');
var interval = setInterval(function(){
timeLeft--;
var percent = ((300 - timeLeft) / 300) * 100;
var percent = ((200 - timeLeft) / 200) * 100;
progressBar.style.width = percent + '%';
timerDisplay.textContent = timeLeft + ' sekund';
if(timeLeft <= 0){
@ -298,12 +303,12 @@ body.dark-mode .table-bordered > :not(caption) > * > * {
.then(function() {
var overlay = document.getElementById('mass-firmware-update-overlay');
overlay.style.display = 'block';
var timeLeft = 120; // 120 sekund
var timeLeft = 90; // 90 sekund
var progressBar = document.getElementById('mass-firmware-progress');
var timerDisplay = document.getElementById('mass-firmware-timer');
var interval = setInterval(function(){
timeLeft--;
var percent = ((120 - timeLeft) / 120) * 100;
var percent = ((90 - timeLeft) / 90) * 100;
progressBar.style.width = percent + '%';
timerDisplay.textContent = timeLeft + ' sekund';
if(timeLeft <= 0){
@ -319,19 +324,27 @@ body.dark-mode .table-bordered > :not(caption) > * > * {
});
}
// Obsługa "Odśwież wybrane"
// Obsługa "Odśwież wybrane"
document.getElementById('mass-update-form').addEventListener('submit', function(e) {
e.preventDefault();
var selectedDevices = getSelectedDeviceIds();
if(selectedDevices.length === 0) {
if (selectedDevices.length === 0) {
alert("Wybierz przynajmniej jedno urządzenie.");
return;
}
// Dla każdego wybranego urządzenia wykonaj force_check
selectedDevices.forEach(function(id) {
fetch(`/device/${id}/force_check`, { method: 'GET' })
.catch(function(error){ console.error('Błąd force check dla urządzenia ' + id, error); });
.catch(function(error) {
console.error('Błąd force check dla urządzenia ' + id, error);
});
});
setTimeout(function(){ location.reload(); }, 2000);
// Pokaż overlay informujący o zakończonym odświeżaniu
document.getElementById('mass-update-overlay').style.display = 'block';
// Po 4 sekundach odśwież stronę
setTimeout(function() {
location.reload();
}, 4000);
});
</script>
{% endblock %}

View File

@ -63,11 +63,10 @@
<div class="card border-0 shadow">
<div class="card-header d-flex justify-content-between align-items-center">
<h4 class="mb-0">Changelog RouterOS</h4>
<a href="{{ url_for('force_fetch_changelogs') }}"
class="btn btn-danger btn-sm"
onclick="return confirm('Czy na pewno chcesz ręcznie pobrać wszystkie changelogi? Operacja usunie wszystkie stare wpisy.');">
Aktualizuj changelogi
</a>
<!-- Przycisk do wywołania aktualizacji changelogów -->
<a href="#" id="updateChangelog" class="btn btn-danger btn-sm">
Aktualizuj changelogi
</a>
</div>
<div class="card-body">
@ -151,4 +150,56 @@
</div> <!-- /card-body -->
</div> <!-- /card -->
</div>
<!-- Modal z progressem -->
<div class="modal fade" id="progressModal" tabindex="-1" role="dialog" aria-labelledby="progressModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="progressModalLabel">Pobieranie changelogów</h5>
</div>
<div class="modal-body">
<div class="spinner-border" role="status">
<span class="visually-hidden">Ładowanie...</span>
</div>
<p>Proszę czekać, trwa pobieranie changelogów...</p>
<!-- Możesz dodać miejsce na logi, jeśli chcesz wyświetlać szczegóły postępu -->
<div id="progressLog" style="max-height:200px; overflow-y:auto;"></div>
</div>
</div>
</div>
</div>
<script>
// Upewnij się, że Bootstrap JS jest załadowany (np. przez CDN)
document.getElementById("updateChangelog").addEventListener("click", function(e) {
e.preventDefault();
// Pokaż modal
var progressModalEl = document.getElementById("progressModal");
var progressModal = new bootstrap.Modal(progressModalEl);
progressModal.show();
// Opcjonalnie wyczyść poprzednie logi
document.getElementById("progressLog").innerHTML = "";
// Wywołanie endpointu force_fetch_changelogs
fetch("{{ url_for('force_fetch_changelogs') }}")
.then(response => response.text())
.then(data => {
// Aktualizacja logu możesz dodać otrzymane dane, jeśli są potrzebne
document.getElementById("progressLog").innerHTML += "<p>Pobieranie zakończone.</p>";
// Po krótkiej chwili zamknij modal i odśwież całą stronę
setTimeout(() => {
progressModal.hide();
location.reload();
}, 1000);
})
.catch(error => {
document.getElementById("progressLog").innerHTML += "<p>Błąd: " + error + "</p>";
setTimeout(() => {
progressModal.hide();
}, 2000);
});
});
</script>
{% endblock %}