Components

BarcodeScanner

Scanner di codici a barre e QR code tramite fotocamera del dispositivo, con fallback per input manuale.

Panoramica

BarcodeScanner utilizza la BarcodeDetector API nativa del browser per la scansione real-time di codici a barre e QR code tramite la fotocamera. Include un input manuale come fallback.

Formati supportati:

  • qr_code — QR Code
  • ean_13 — EAN-13
  • ean_8 — EAN-8
  • code_128 — Code 128
  • code_39 — Code 39
  • upc_a — UPC-A
  • upc_e — UPC-E
  • all — tutti i formati supportati dal browser

Requisiti browser:

  • Chrome 83+ o Edge 83+ (BarcodeDetector API non disponibile in Firefox/Safari)
  • Permesso accesso fotocamera
  • Contesto sicuro (HTTPS)

Casi d'uso tipici: lettura codici prodotto, scansione QR code per check-in, lettura barcode magazzino, input codice seriale.

Anteprima live

Il preview mostra l'input manuale e il pulsante per attivare la scansione. La camera reale richiede HTTPS, BarcodeDetector API supportata e il permesso utente — dipende dall'ambiente di esecuzione.

Utilizzo nello schema

const schema = [{
  name: 'codiceProdotto',
  type: 'barcode',
  label: 'Codice prodotto',
  props: {
    formats: ['ean_13', 'code_128'],
    showInput: true,
    placeholder: 'Scansiona o inserisci il codice',
  }
}, {
  name: 'qrCode',
  type: 'barcode',
  label: 'QR Code',
  props: {
    formats: ['qr_code'],
    autoStart: true,
    showInput: false,
  }
}]

Utilizzo diretto

Con avvio automatico (senza input manuale)

<BarcodeScanner
  v-model="codiceTracking"
  :formats="['code_128']"
  :auto-start="true"
  :show-input="false"
  label="Codice tracking"
  @scan="processTracking"
/>

Gestione errori browser non supportato

Props

PropTipoDefaultDescrizione
modelValuestring | nullnullCodice letto/inserito (v-model)
labelstringEtichetta del campo
helperTextstringTesto di supporto sotto il campo
errorstringMessaggio di errore (attiva stato invalid)
disabledbooleanfalseDisabilita il campo
invalidbooleanfalseAttiva visivamente lo stato di errore
formatsBarcodeFormat[]['all']Formati di codice da rilevare
autoStartbooleanfalseAvvia la scansione automaticamente al mount
showInputbooleantrueMostra campo input per inserimento manuale
placeholderstring(da i18n)Placeholder del campo input manuale
inputPropsRecord<string, unknown>{}Props aggiuntive per il contenitore scanner

Tipo BarcodeFormat

type BarcodeFormat =
  | 'all'
  | 'qr_code'
  | 'ean_13'
  | 'ean_8'
  | 'code_128'
  | 'code_39'
  | 'upc_a'
  | 'upc_e'

Comportamento scanner

  1. L'utente clicca il pulsante fotocamera (o autoStart: true)
  2. Il browser richiede il permesso di accesso alla fotocamera
  3. Viene attivata la fotocamera posteriore (facingMode: 'environment')
  4. Il loop di scansione (requestAnimationFrame) analizza ogni frame
  5. Al primo codice rilevato: emette scan, aggiorna modelValue, ferma la fotocamera
  6. In caso di errore: mostra un messaggio e smette di scansionare

Eventi

EventoPayloadDescrizione
update:modelValuestring | nullValore aggiornato (da scansione o input manuale)
scanstringEmesso solo al rilevamento da fotocamera (non da input manuale)
errorErrorErrore fotocamera, API non supportata, o errore di scansione

Validazione suggerita

import { z } from 'zod'

const schema = z.object({
  codiceProdotto: z.string()
    .min(1, 'Inserisci o scansiona un codice')
    .regex(/^[0-9]{8,14}$/, 'Codice EAN non valido')
    .nullable()
    .refine(v => v !== null, { message: 'Il codice è obbligatorio' }),
})