You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.2 KiB

const resultElement = document.getElementById("barcode-result");
const stopButton = document.getElementById("stop-button");
const productDetails = document.getElementById("product-details");
const productInfoList = document.getElementById("product-info-list");
function startScanner() {
console.log("Starting Quagga...");
Quagga.init({
inputStream: {
name: "Live",
type: "LiveStream",
target: document.querySelector("#video-preview"),
},
decoder: {
readers: ["ean_reader", "code_128_reader", "upc_reader"],
},
}, function(err) {
if (err) {
console.error("Ошибка инициализации Quagga:", err);
alert("Ошибка инициализации камеры");
return;
}
console.log("Quagga started successfully.");
Quagga.start();
stopButton.style.display = "inline";
});
Quagga.onDetected(function(data) {
const barcode = data.codeResult.code;
resultElement.innerText = barcode;
Quagga.stop();
stopButton.style.display = "none";
fetch('/warehouse/process-barcode/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ barcode: barcode })
})
.then(response => response.json())
.then(product => {
if (product.error) {
alert(product.error);
return;
}
productInfoList.innerHTML = '';
for (const [key, value] of Object.entries(product)) {
const listItem = document.createElement('li');
listItem.innerText = `${key}: ${value}`;
productInfoList.appendChild(listItem);
}
productDetails.style.display = "block";
})
.catch(error => {
console.error("Ошибка:", error);
alert("Ошибка на сервере или продукт не найден.");
});
});
}
stopButton.addEventListener("click", () => {
Quagga.stop();
stopButton.style.display = "none";
});
document.addEventListener("DOMContentLoaded", startScanner);