feat: viewer local upload, Bambu collapse, planning done/fail, stats waste, portal link in jobs, sidebar collapsible, settings layout fix
Deploy via Portainer / deploy (push) Successful in 0s

This commit is contained in:
Jo
2026-07-07 09:16:24 +02:00
parent 7b65c4b2e2
commit b22e5e0fb4
9 changed files with 502 additions and 78 deletions
+41 -12
View File
@@ -9,21 +9,28 @@
<div class="row g-4">
<div class="col-lg-7">
<!-- Import 3mf -->
<!-- Import 3mf (collapsible) -->
<div class="card mb-3 border border-warning border-opacity-50">
<div class="card-header py-3">
<i class="bi bi-file-earmark-zip text-warning me-2"></i>Import Bambu Studio (.3mf)
<span class="badge bg-warning text-dark ms-1">Optionnel</span>
<div class="card-header py-2 d-flex align-items-center" role="button"
id="bambuToggle" style="cursor:pointer;user-select:none"
onclick="toggleBambu()">
<i class="bi bi-file-earmark-zip text-warning me-2"></i>
<span class="fw-semibold">Import Bambu Studio (.3mf)</span>
<span class="badge bg-warning text-dark ms-2">Optionnel</span>
<i class="bi bi-chevron-down ms-auto" id="bambuChevron"
style="transition:transform .2s"></i>
</div>
<div class="card-body">
<div class="d-flex align-items-center gap-3">
<input type="file" id="file3mf" accept=".3mf" class="form-control" style="max-width:320px">
<button type="button" class="btn btn-outline-warning" onclick="parse3mf()">
<i class="bi bi-magic me-1"></i>Extraire
</button>
<span id="parseStatus" class="text-muted small"></span>
<div class="collapse" id="bambuBody">
<div class="card-body">
<div class="d-flex align-items-center gap-3">
<input type="file" id="file3mf" accept=".3mf" class="form-control" style="max-width:320px">
<button type="button" class="btn btn-outline-warning" onclick="parse3mf()">
<i class="bi bi-magic me-1"></i>Extraire
</button>
<span id="parseStatus" class="text-muted small"></span>
</div>
<div class="form-text mt-1">Votre fichier .3mf depuis Bambu Studio pour remplir poids et durée automatiquement.</div>
</div>
<div class="form-text mt-1">Votre fichier .3mf depuis Bambu Studio pour remplir poids et duree automatiquement.</div>
</div>
</div>
@@ -320,6 +327,28 @@
{% block scripts %}
<script>
// ── Section Bambu collapsible ────────────────────────────────────────────────
(function () {
const KEY = 'bambu_open';
const body = document.getElementById('bambuBody');
const chevron = document.getElementById('bambuChevron');
const isOpen = localStorage.getItem(KEY) !== 'false'; // open by default
if (isOpen) {
body.classList.add('show');
chevron.style.transform = 'rotate(180deg)';
}
})();
function toggleBambu() {
const KEY = 'bambu_open';
const body = document.getElementById('bambuBody');
const chevron = document.getElementById('bambuChevron');
const opening = !body.classList.contains('show');
body.classList.toggle('show', opening);
chevron.style.transform = opening ? 'rotate(180deg)' : '';
localStorage.setItem(KEY, opening);
}
// ── 3MF parser avec sélecteur de plaque ──────────────────────────────────────
let _3mfPlates = [];