Vue Form
Panoramica
@pzeta/vue-form è la libreria PZeta per costruire form complessi schema-driven in Vue 3. Il componente principale DynamicFormLayouts accetta uno schema dichiarativo e renderizza automaticamente i campi corretti con validazione on-blur, errori inline, condizioni dinamiche e propagazione disabled/readonly ai discendenti.
Versione corrente: 2.1.0 — peer deps vue@^3.5, @pzeta/vue-components@^1.4.1, @pzeta/vue-i18n@^1.0.2 (più optional @tiptap/* e @googlemaps/js-api-loader).
Funzionalità principali
DynamicFormLayoutsschema-driven con 30+ tipi di input, validation on-blur, layoutnormal/tabs/wizard/accordion, trackingdirty/valid/dirty-values- Schema come oggetto literal: forma canonica
{ sections: [...] }— diff-friendly, serializzabile, mappa 1:1 sui tipiFormSchema/SectionDefinition/RowDefinition/FieldDefinition - Wrapper UI:
DynamicFormDialog,DynamicFormDrawer,DynamicFormDrawerWithTable,DynamicFormListDialogper scenari modali e CRUD completi - Helper opzionali
field/row/section/formper casi di forte riuso/factorizzazione — vedi Schema builders per i criteri di scelta - 80+ validatori organizzati in 11 categorie (core, string, numeric, date, format, italian, financial, network, security, documents, file, other)
- Validatori custom registrabili runtime via
ValidationService.registerValidator - Cross-field validation: regole
validationRules(match, different, requiredIf, ecc.) valutate in tempo reale - i18n integrato:
I18nFormPlugincon merge automatico di traduzioni, italiano precaricato + inglese lazy - Componenti remote:
SelectRemote,ListboxRemote,TreeRemote,LookupListboxInput,LookupComboBoxInput, ecc. confetchFn+ filtri dinamici - Componenti speciali:
AddressAutocompleteInput(Google Places),BarcodeScanner(BarcodeDetector API),CameraCapture,TiptapEditor
Sotto-pagine
| Modulo | Descrizione |
|---|---|
| Getting Started | Installazione, peer dependencies, plugin i18n setup |
| Components | DynamicFormLayouts, Dialog/Drawer/ListDialog, tutti i tipi di input |
| Validators | 80+ validatori organizzati per categoria + custom |
| Composables | useValidation, useFieldValidation, useRemoteFetch, useRemoteSetup, useOptionLabel |
| Services | ValidationService — API centrale di validazione |
Components
Tutti i tipi di input disponibili nel sistema form — basic, selection, toggle, advanced, editor, remote e special.
Composables
Composables di @pzeta/vue-form per validazione reattiva, fetch dati remoti e gestione opzioni — useValidation, useFieldValidation, useRemoteFetch, useRemoteSetup, useOptionLabel.
Services
API di servizio di @pzeta/vue-form.
Validators
60+ validatori organizzati per categoria. La sintassi è "required|email|min:5|max:100".
Quick start
// main.ts
import { createApp } from 'vue'
import { VueFormPlugin, I18nFormPlugin } from '@pzeta/vue-form'
import '@pzeta/vue-form/style.css'
const app = createApp(App)
// 1. Configura i18n PRIMA di tutto
app.use(I18nFormPlugin)
// 2. Registra componenti
app.use(VueFormPlugin)
app.mount('#app')
<script setup lang="ts">
import { ref } from 'vue'
import { DynamicFormLayouts } from '@pzeta/vue-form'
import type { FormSchema } from '@pzeta/vue-form'
const formData = ref({})
// Forma raccomandata: schema come oggetto literal
const schema: FormSchema = {
sections: [
{
title: 'Anagrafica',
icon: 'pi pi-user',
rows: [
{
fields: [
{ name: 'nome', type: 'text', label: 'Nome', span: 6, required: true, validation: 'required' },
{ name: 'email', type: 'email', label: 'Email', span: 6, required: true, validation: 'required|email' },
],
},
{
fields: [
{
name: 'paese',
type: 'select',
label: 'Paese',
props: {
options: [
{ label: 'Italia', value: 'IT' },
{ label: 'Francia', value: 'FR' },
],
optionLabel: 'label',
optionValue: 'value',
},
},
],
},
],
},
],
}
</script>
<template>
<DynamicFormLayouts v-model="formData" :schema="schema" />
</template>
field/row/section/form. Vedi Schema builders — i builder sono un'alternativa, non il default.Quando usare cosa
| Scenario | Soluzione |
|---|---|
| Form standalone su pagina | DynamicFormLayouts |
| Form modale di creazione/modifica | DynamicFormDialog |
| Form drawer con auto-fetch del record | DynamicFormDrawer |
| CRUD completo (table + drawer + form) | DynamicFormDrawerWithTable |
| Lista embedded con form di aggiunta inline | DynamicFormListDialog |
| Validazione manuale di un valore singolo | ValidationService.validate(...) o useValidation |
| Schema standard / serializzato da backend / piccoli-medi | oggetto literal { sections: [...] } (default raccomandato) |
| Schema con campi base riusabili o molte select inline ripetute | helper opzionali field/row/section/form (vedi criteri di scelta) |