Added Items and Dashboard
Some checks failed
CI / scan_ruby (push) Has been cancelled
CI / scan_js (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
CI / system-test (push) Has been cancelled

This commit is contained in:
2026-05-22 03:52:54 +02:00
parent a706dbe7ff
commit 44d019b4b5
24 changed files with 966 additions and 4 deletions

View File

@@ -0,0 +1,49 @@
import { Controller } from "@hotwire/stimulus"
export default class extends Controller {
static targets = [ "input", "preview", "modal" ]
connect() {
this.html5QrCode = null
}
// Öffnet das Modal und startet den Kamera-Stream
startCamera(event) {
event.preventDefault()
// Modal anzeigen
this.modalTarget.classList.remove("hidden")
// Neue Instanz auf dem Preview-Div mit der ID des Elements erzeugen
this.html5QrCode = new Html5Qrcode(this.previewTarget.id)
// FPS-Rate und Scan-Rahmen (250x250px) festlegen
const config = { fps: 10, qrbox: { width: 250, height: 250 } }
this.html5QrCode.start(
{ facingMode: "environment" }, // Erzwingt die rückseitige Hauptkamera bei Handys
config,
(decodedText, decodedResult) => {
// SUCCESS: Code erkannt!
this.inputTarget.value = decodedText // Trägt die ID (z.B. 10024) ins Textfeld ein
this.stopCamera() // Stoppt die Kamera und schließt das Fenster
},
(errorMessage) => {
// Kontinuierlicher Scan-Loop (Fehler ignorieren, wenn kein QR-Code im Bild ist)
}
).catch((err) => {
console.error("Kamera-Zugriff verweigert oder blockiert:", err)
})
}
// Schließt das Modal und beendet den Stream sauber
stopCamera() {
if (this.html5QrCode && this.html5QrCode.isScanning) {
this.html5QrCode.stop().then(() => {
this.modalTarget.classList.add("hidden")
}).catch((err) => console.error("Fehler beim Beenden des Streams:", err))
} else {
this.modalTarget.classList.add("hidden")
}
}
}