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.
| Pulsante | Visibile se | Azione |
|---|---|---|
| Applica | template selezionato | Applica i campi/formato/filtri del template alla useExport corrente |
| Salva | almeno 1 campo selezionato | Apre TemplateSaveDialog per salvare la selezione corrente come nuovo modello |
| Elimina | template selezionato | Cancella il modello (DELETE /api/export/templates/:id) |
Props
| Prop | Tipo | Descrizione |
|---|---|---|
templates | ModelloExport[] | Lista modelli caricati dal backend |
selectedTemplate | ModelloExport | null | Template attualmente selezionato |
loading | boolean | Caricamento in corso |
campiSelezionati | string[] | Campi selezionati nell'export — usato per disabilitare "Salva" se vuoto |
Emits
| Evento | Payload | Descrizione |
|---|---|---|
select | ModelloExport | null | Cambio selezione |
apply | — | Richiesta applicazione (parent invoca applyTemplate) |
delete | id: string | Richiesta eliminazione |
saveNew | — | Apri 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 propsrisorsa,formato,campi,filtri,ordinamento - Edit mode (
template: ModelloExport): valori pre-popolati dal template; al cambio ditemplateil form viene resettato sui nuovi valori
Props
| Prop | Tipo | Descrizione |
|---|---|---|
visible | boolean | Apertura dialog |
risorsa | string | Codice risorsa (read-only nel form) |
formato | FileFormato | Formato di default |
campi | string[] | Lista nomi campo da includere |
filtri | Record<string, unknown> | Filtri applicati (opzionale) |
ordinamento | Array<{ campo, direzione }> | Ordinamento (opzionale) |
querytype | 'dynamic' | 'raw' | Tipo query (default dynamic) |
rawquery | string | SQL raw (mostrato come <pre> se querytype === 'raw') |
template | ModelloExport | Se passato, attiva edit mode |
Emits
| Evento | Payload | Descrizione |
|---|---|---|
update:visible | boolean | Apertura/chiusura |
save | Omit<ModelloExport, 'id' | 'dataCreazione' | 'dataModifica' | 'creatoDa'> | Submit del form |
Validazione
| Campo | Regola |
|---|---|
nome | Obbligatorio, trim |
campi | Almeno uno |
Il pulsante di submit ("Salva modello" / "Aggiorna modello") è disabilitato se la validazione fallisce.
Form fields
| Campo | Controllo |
|---|---|
| Nome | InputText (obbligatorio) |
| Descrizione | Textarea 2 righe, auto-resize |
| Risorsa | Solo lettura (font mono) |
| Formato | Select — Excel/CSV |
| Campi inclusi | Lista chip readonly con conteggio |
| Query SQL | <pre> readonly (solo se querytype === 'raw') |
| Condiviso | Checkbox "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
}