Cette documentation décrit le composant de formulaire dynamique utilisé dans les applications avec NestJS et Mongoose, en utilisant des composants du framework Quasar. Le formulaire est construit dynamiquement à partir d’une configuration JSON.
Ce fichier json est stocké dans la base de données et est récupéré par l’API pour construire le formulaire, tout est géré dans le module nestjs /tickets/form
titlestring"title": "Creation de ticket"descriptionstring"description": "Veuillez remplir le formulaire ci-dessous pour créer un nouveau ticket."typenumber"type": 1defaultValuesobject"defaultValues": { "lifestep": 1 }sectionsobjectlabel: Nom de la section.type: Type de la section (similaire au type de formulaire).description: Description de la section.icon: Icône représentant la section.fields: Champs de la section."sections": {
"envelope": {
"label": "Enveloppe",
"type": 0,
"description": "Veuillez remplir les champs ci-dessous pour créer une nouvelle enveloppe.",
"icon": "mdi-email",
"fields": {
// Définition des champs ici...
}
}
}
Chaque champ dans fields est un objet avec les propriétés suivantes :
component: Type de composant Quasar à utiliser (par exemple, autocomplete).label: Étiquette du champ.model-value: Chemin de liaison de données pour le champ.row et col: Positionnement du champ dans une grille.attrsOnDefault, attrsOnCreate, attrsOnRead, attrsOnUpdate, attrsOnDelete: Objets définissant les attributs et comportements du champ dans différents états. Pour connaître les attributs disponibles, consultez la documentation de Quasar Framework. Les composants disponibles sont les suivants :
"senders": {
"component": "autocomplete",
"label": "Appelant",
"model-value": "envelope.senders",
"attrsOnDefault": {
"filled": true,
"dense": true,
// Autres attributs...
},
"attrsOnCreate": {
// Autres attributs...
},
"attrsOnRead": {
"disable": true
// Autres attributs...
},
"attrsOnUpdate": {
// Autres attributs...
},
"attrsOnDelete": {
"disable": true
// Autres attributs...
},
"row": 1,
"col": 4
}
submitButtonText: Texte du bouton de soumission.submitApiUrl: URL à appeler lors de la soumission du formulaire.redirectUrl: URL de redirection après la soumission, l’id de la nouvelle entrée est automatiquement ajoutée a la fin de l’url.{
"title": "Creation de ticket",
"description": "Veuillez remplir le formulaire ci-dessous pour créer un nouveau ticket.",
"type": 1,
"defaultValues": {
"lifestep": 1
},
"sections": {
"envelope": {
"label": "Enveloppe",
"type": 0,
"description": "Veuillez remplir les champs ci-dessous pour créer une nouvelle enveloppe.",
"icon": "mdi-email",
"fields": {
"senders": {
"component": "autocomplete",
"label": "Appelant",
"model-value": "envelope.senders",
"attrsOnDefault": {
"apiUrl": "/core/entities",
"optionLabel": "name",
"modelLabel": "name",
"searchField": "profile.commonName",
"dense": true,
"multiple": true,
"filled": true,
"transformKeys": {
"_id": "id",
"profile.commonName": "name",
"type": "type"
}
},
"row": 1,
"col": 4,
"attrsOnCreate": {
"disable": false
},
"attrsOnRead": {
"disable": true
},
"attrsOnUpdate": {
"disable": false
},
"attrsOnDelete": {
"disable": true
}
},
"observers": {
"component": "autocomplete",
"label": "Concernés",
"model-value": "envelope.observers",
"attrsOnDefault": {
"apiUrl": "/core/entities",
"optionLabel": "name",
"modelLabel": "name",
"searchField": "profile.commonName",
"dense": true,
"multiple": true,
"filled": true,
"transformKeys": {
"_id": "id",
"profile.commonName": "name",
"type": "type"
}
},
"row": 1,
"col": 4,
"attrsOnCreate": {},
"attrsOnRead": {
"disable": true
},
"attrsOnUpdate": {},
"attrsOnDelete": {
"disable": true
}
},
"assigned": {
"component": "autocomplete",
"label": "Assignés",
"model-value": "envelope.assigned",
"attrsOnDefault": {
"apiUrl": "/core/entities",
"optionLabel": "name",
"searchField": "profile.commonName",
"modelLabel": "name",
"dense": true,
"multiple": true,
"filled": true,
"additionalFilters": [
{
"field": "type",
"value": 2,
"operator": "<=#"
}
],
"transformKeys": {
"_id": "id",
"profile.commonName": "name",
"type": "type"
}
},
"row": 1,
"col": 4,
"attrsOnCreate": {},
"attrsOnRead": {
"disable": true
},
"attrsOnUpdate": {},
"attrsOnDelete": {
"disable": true
}
}
}
},
"infos": {
"label": "Informations",
"type": 0,
"description": "Veuillez remplir les champs ci-dessous pour renseigner les informations du ticket.",
"icon": "mdi-information",
"fields": {
"subject": {
"component": "input",
"label": "Sujet",
"model-value": "subject",
"row": 1,
"col": 12,
"attrsOnDefault": {
"dense": true,
"filled": true
},
"attrsOnCreate": {},
"attrsOnRead": {
"disable": true
},
"attrsOnUpdate": {},
"attrsOnDelete": {
"disable": true
}
},
"project": {
"component": "autocomplete",
"label": "Projet(s)",
"model-value": "project",
"row": 2,
"col": 6,
"attrsOnDefault": {
"apiUrl": "/core/project",
"optionLabel": "name",
"modelLabel": "name",
"searchField": "name",
"dense": true,
"multiple": true,
"filled": true,
"transformKeys": {
"_id": "id",
"name": "name"
}
},
"attrsOnCreate": {},
"attrsOnRead": {
"disable": true
},
"attrsOnUpdate": {},
"attrsOnDelete": {
"disable": true
}
},
"priority": {
"component": "select",
"label": "Priorité",
"model-value": "priority",
"row": 3,
"col": 6,
"attrsOnDefault": {
"options": [
{
"id": "612345678901234567890123",
"name": "Low"
},
{
"id": "712345678901234567890123",
"name": "Normal"
},
{
"id": "812345678901234567890123",
"name": "High"
},
{
"id": "912345678901234567890123",
"name": "Urgent"
}
],
"option-label": "name",
"dense": true,
"filled": true
},
"attrsOnCreate": {},
"attrsOnRead": {
"disable": true
},
"attrsOnUpdate": {},
"attrsOnDelete": {
"disable": true
}
},
"impact": {
"component": "select",
"label": "Impact",
"model-value": "impact",
"row": 3,
"col": 6,
"attrsOnDefault": {
"options": [
{
"id": "612345678901234567890123",
"name": "Low"
},
{
"id": "712345678901234567890123",
"name": "Medium"
},
{
"id": "812345678901234567890123",
"name": "High"
},
{
"id": "912345678901234567890123",
"name": "Critical"
}
],
"option-label": "name",
"dense": true,
"filled": true
},
"attrsOnCreate": {},
"attrsOnRead": {
"disable": true
},
"attrsOnUpdate": {},
"attrsOnDelete": {
"disable": true
}
},
"sla": {
"component": "autocomplete",
"label": "SLA",
"model-value": "sla",
"row": 2,
"col": 6,
"attrsOnDefault": {
"apiUrl": "/tickets/sla",
"optionLabel": "name",
"modelLabel": "name",
"searchField": "name",
"dense": true,
"multiple": true,
"filled": true,
"transformKeys": {
"_id": "id",
"name": "name"
}
},
"attrsOnCreate": {},
"attrsOnRead": {
"disable": true
},
"attrsOnUpdate": {},
"attrsOnDelete": {
"disable": true
}
},
"type": {
"component": "select",
"label": "Type",
"model-value": "type",
"row": 3,
"col": 6,
"attrsOnDefault": {
"options": [
{
"value": 1,
"name": "Incident"
},
{
"value": 2,
"name": "Demande"
}
],
"option-label": "name",
"emit-value": true,
"options-map": true,
"dense": true,
"filled": true
},
"attrsOnCreate": {},
"attrsOnRead": {
"disable": true
},
"attrsOnUpdate": {},
"attrsOnDelete": {
"disable": true
}
}
}
}
},
"submitButtonText": "Soumettre le formulaire",
"submitApiUrl": "/tickets/ticket",
"redirectUrl": "/ticket"
}
builder.vueLe composant builder.vue est un constructeur de formulaires dynamique utilisant les composants du Framework Quasar. Il est conçu pour les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) et prend en charge différents types de champs et de dispositions.
reset, resetValidation et submit pour les interactions avec le formulaire.submit avec les données du formulaire.tk-form-type.vueComposant pour rendre différents types de dispositions de formulaire : base, stepper, tabs.
type.type.tk-form-stepperUn composant de type stepper pour naviguer à travers différentes sections de formulaire.
sections.tk-form-tabsDisposition de formulaire basée sur des onglets pour organiser les sections de formulaire.
tk-form-baseDisposition de formulaire de base avec un système de grille pour le placement des champs.
.row pour organiser les champs en lignes.fields.FormTypesDéfinit différents types de dispositions de formulaire : Base, Étapes, Onglets. ‘BASE’ = 0, ‘STEPS’ = 1, ‘TABS’ = 2,
CRUDModeDéfinit les opérations CRUD : Créer, Lire, Mettre à jour.
TicketFormField et TicketFormSectionTypes définissant la structure des champs de formulaire et des sections.