Components

Template di esportazione

TemplateManager e TemplateSaveDialog.

TemplateManager

Barra orizzontale per gestire i modelli di esportazione (ModelloExport). Compatto: una Select con i template + 3 pulsanti azione.

PulsanteVisibile seAzione
Applicatemplate selezionatoApplica i campi/formato/filtri del template alla useExport corrente
Salvaalmeno 1 campo selezionatoApre TemplateSaveDialog per salvare la selezione corrente come nuovo modello
Eliminatemplate selezionatoCancella il modello (DELETE /api/export/templates/:id)

Props

PropTipoDescrizione
templatesModelloExport[]Lista modelli caricati dal backend
selectedTemplateModelloExport | nullTemplate attualmente selezionato
loadingbooleanCaricamento in corso
campiSelezionatistring[]Campi selezionati nell'export — usato per disabilitare "Salva" se vuoto

Emits

EventoPayloadDescrizione
selectModelloExport | nullCambio selezione
applyRichiesta applicazione (parent invoca applyTemplate)
deleteid: stringRichiesta eliminazione
saveNewApri dialog di salvataggio

Esempio

<TemplateManager
  :templates="templateManager.templates.value"
  :selected-template="templateManager.selectedTemplate.value"
  :loading="templateManager.loading.value"
  :campi-selezionati="campiSelezionati"
  @select="templateManager.selectTemplate"
  @apply="applyTemplate"
  @delete="templateManager.deleteTemplate"
  @save-new="showSaveTemplate = true"
/>

TemplateSaveDialog

Dialog per salvare un nuovo ModelloExport o modificarne uno esistente. Modalità determinata dalla presenza della prop template:

  • Create mode (template: undefined): valori iniziali presi dalle props risorsa, formato, campi, filtri, ordinamento
  • Edit mode (template: ModelloExport): valori pre-popolati dal template; al cambio di template il form viene resettato sui nuovi valori

Props

PropTipoDescrizione
visiblebooleanApertura dialog
risorsastringCodice risorsa (read-only nel form)
formatoFileFormatoFormato di default
campistring[]Lista nomi campo da includere
filtriRecord<string, unknown>Filtri applicati (opzionale)
ordinamentoArray<{ campo, direzione }>Ordinamento (opzionale)
querytype'dynamic' | 'raw'Tipo query (default dynamic)
rawquerystringSQL raw (mostrato come <pre> se querytype === 'raw')
templateModelloExportSe passato, attiva edit mode

Emits

EventoPayloadDescrizione
update:visiblebooleanApertura/chiusura
saveOmit<ModelloExport, 'id' | 'dataCreazione' | 'dataModifica' | 'creatoDa'>Submit del form

Validazione

CampoRegola
nomeObbligatorio, trim
campiAlmeno uno

Il pulsante di submit ("Salva modello" / "Aggiorna modello") è disabilitato se la validazione fallisce.

Form fields

CampoControllo
NomeInputText (obbligatorio)
DescrizioneTextarea 2 righe, auto-resize
RisorsaSolo lettura (font mono)
FormatoSelect — Excel/CSV
Campi inclusiLista chip readonly con conteggio
Query SQL<pre> readonly (solo se querytype === 'raw')
CondivisoCheckbox "Condividi con altri utenti"

Esempio

<!-- Salvataggio nuovo template -->
<TemplateSaveDialog
  v-model:visible="showSaveTemplate"
  :risorsa="risorsa"
  :formato="formato"
  :campi="campiSelezionati"
  :filtri="Object.keys(filtri).length > 0 ? filtri : undefined"
  :ordinamento="ordinamento.length > 0 ? ordinamento : undefined"
  @save="(tpl) => templateManager.saveTemplate(tpl)"
/>

<!-- Modifica template esistente -->
<TemplateSaveDialog
  v-model:visible="showEdit"
  :risorsa="risorsa"
  :formato="formato"
  :campi="campiSelezionati"
  :template="templateInModifica"
  @save="(tpl) => templateManager.updateTemplate(templateInModifica.id, tpl)"
/>

Tipo ModelloExport

interface ModelloExport {
  id: string
  nome: string
  descrizione: string
  risorsa: string
  formato: FileFormato
  campi: string[]
  filtri?: Record<string, unknown>
  ordinamento?: Array<{ campo: string; direzione: 'asc' | 'desc' }>
  condiviso: boolean
  creatoDa: string
  dataCreazione: string
  dataModifica: string
  querytype?: 'dynamic' | 'raw'
  rawquery?: string
}