Composants Vue
Chamilo dispose d'un large ensemble de composants Vue organisés par domaine de fonctionnalité dans assets/vue/components/.
Composants de base
La famille Base* dans assets/vue/components/basecomponents/ encapsule les primitives PrimeVue avec des paramètres par défaut spécifiques à Chamilo (mise en page FloatLabel, icônes MDI via chamiloIconToClass, messages de validation cohérents, dimensionnement Tailwind). Privilégiez toujours un composant Base* avant d'importer directement le composant PrimeVue sous-jacent — c'est ainsi que l'interface utilisateur reste cohérente à travers l'application SPA et que les modifications de design peuvent être déployées depuis un seul endroit.
Les composants ne sont pas enregistrés globalement (la seule primitive PrimeVue enregistrée globalement est Column, utilisée dans BaseTable). Importez chacun explicitement :
import BaseButton from "@/components/basecomponents/BaseButton.vue"
import BaseDialog from "@/components/basecomponents/BaseDialog.vue"Champs de formulaire
La plupart acceptent la valeur via v-model, exposent les props id et label pour l'accessibilité et la liaison avec les étiquettes flottantes, et gèrent la validation via une paire isInvalid / errorText (ou messageText).
BaseInputText.vue
InputText + FloatLabel
Champ de texte sur une seule ligne. Passe à une étiquette statique pour les entrées de type date/time/datetime-local (où l'étiquette flottante chevaucherait le placeholder natif).
BaseInputTextWithVuelidate.vue
BaseInputText
Adaptateur léger pour Vuelidate : transmet $error à isInvalid et affiche $errors[].$message dans le slot errors. À associer avec un objet de champ Vuelidate.
BaseTextArea.vue
Textarea + FloatLabel
Champ de texte multiligne.
BaseTextAreaWithVuelidate.vue
BaseTextArea
Même modèle d'adaptateur Vuelidate que BaseInputTextWithVuelidate.
BaseInputNumber.vue
InputNumber
Champ numérique avec min / max / step et boutons de défilement.
BaseInputTags.vue
(personnalisé)
Étiquettes de texte libre ; les étiquettes sont ajoutées sur entrée/virgule et supprimées avec la touche retour.
BaseInputGroup.vue
InputGroup + BaseButton
Champ de texte associé à un bouton d'action (style recherche).
BaseCheckbox.vue
Checkbox
Case à cocher binaire ou liée à une valeur avec étiquette.
BaseRadioButtons.vue
RadioButton
Groupe de boutons radio piloté par un tableau options: [{label, value}].
BaseToggleButton.vue
BaseButton
Bouton à deux états (étiquettes et icônes activé/désactivé) lié via v-model.
BaseCalendar.vue
DatePicker + FloatLabel
Sélecteur de date ou date-heure. Respecte platform.timepicker_increment et la locale de l'utilisateur via calendarLocales.
BaseColorPicker.vue
natif <input type="color"> + InputText
Sélecteur de couleur avec repli sur texte hexadécimal ; utilise colorjs.io pour valider l'entrée hexadécimale manuelle.
BaseRating.vue
Rating
Champ d'évaluation par étoiles.
BaseFileUpload.vue
natif <input type="file"> + BaseButton
Sélecteur de fichier unique qui déclenche un bouton de style pièce jointe.
BaseFileUploadMultiple.vue
natif <input type="file" multiple> + BaseButton
Variante multi-fichiers de BaseFileUpload.
BaseUploader.vue
Uppy Dashboard
Téléverseur Uppy complet (webcam, audio, éditeur d'image, téléversement XHR) avec locales liées à la appLocale actuelle. Utilisez-le pour des téléversements riches avec progression ; utilisez BaseFileUpload* pour des pièces jointes simples.
Sélection et autocomplétion
BaseSelect.vue
Dropdown + FloatLabel
Menu déroulant à choix unique avec bouton de réinitialisation optionnel.
BaseMultiSelect.vue
MultiSelect + FloatLabel
Menu déroulant à choix multiple affichant les éléments sélectionnés sous forme d'étiquettes.
BaseSearchSelect.vue
Dropdown avec filter
Menu déroulant à choix unique avec boîte de recherche intégrée, défilement virtuel optionnel et modèle d'option sur deux lignes (label + sublabel).
BaseAutocomplete.vue
AutoComplete
Autocomplétion asynchrone (minimum 3 caractères). Prend en charge la sélection unique ou multiple et un slot chip pour personnaliser les étiquettes.
BaseUserFinder.vue
BaseTable + userService
Tableau de recherche d'utilisateurs paginé avec sélection de lignes. Utilisez-le lorsqu'une fonctionnalité nécessite un sélecteur d'utilisateurs de style administrateur.
Boutons et actions
BaseButton.vue
Button (PrimeVue)
Bouton standard de Chamilo. Résout les icônes via chamiloIconToClass, normalise type en severity/variant de PrimeVue, rend un BaseAppLink interne lorsqu'un route ou toUrl est fourni (ainsi, le même composant gère les cas de router-link, d'ancre et de bouton simple). Les valeurs acceptées pour type sont listées dans validators.js → buttonTypeValidator.
BaseAdvancedSettingsButton.vue
BaseButton
Bouton de divulgation qui bascule un panneau de "paramètres avancés" inséré via v-model.
BaseToolbar.vue
Toolbar
Barre d'outils d'action avec des slots start / end (ou un slot par défaut unique). showTopBorder optionnel pour le style de séparateur.
Affichage et données
BaseTable.vue
DataTable (PrimeVue)
Tableau de données standard de Chamilo. Prend en charge le mode côté serveur (lazy), le tri multi-colonnes, le filtre global, la sélection de lignes et la pagination. Passez les colonnes comme enfants <Column> (enregistrées globalement).
BaseCard.vue
Card
Enveloppe de carte qui transmet les slots header, title, subtitle, footer et par défaut (contenu).
BaseChart.vue
Chart
Préréglage de graphique circulaire. Passez un objet data compatible avec Chart.js.
BaseChip.vue
Chip
Étiquette rendue à partir d'un objet {value, labelField, imageField}, avec un bouton de suppression optionnel.
BaseTag.vue
Tag
Étiquette colorée. Mappe le warning de Chamilo au warn de PrimeVue.
BaseAvatarList.vue
Avatar + BaseUserAvatar
Ligne d'avatars avec compteur de dépassement (par exemple "+3") ; pilotée par useAvatarList.
BaseUserAvatar.vue
Avatar
Avatar d'utilisateur avec image de secours, état de chargement et étiquette accessible.
BaseIcon.vue
<i class="mdi …">
Rendu d'icône Chamilo. Ajoute un badge optionnel (texte ou icône), une info-bulle et un modificateur de taille. Passez toujours un nom sémantique Chamilo (par exemple "edit"), pas une classe MDI brute.
BaseIconField.vue
IconField + InputText
Champ de recherche avec une icône de loupe en tête.
BaseDivider.vue
Divider
Séparateur horizontal ou vertical, avec titre et alignement optionnels.
Navigation et menus
BaseMenu.vue
Menu (popup)
Menu contextuel qui comprend les routes du routeur dans les éléments model[].
BaseDropdownMenu.vue
(personnalisé)
Déclencheur de menu déroulant léger avec coordination d'ouverture unique (l'ouverture d'un ferme les autres).
BaseContextMenu.vue
(personnalisé)
Menu contextuel de clic droit / positionné, contrôlé par visible + position.
BaseSidebarPanelMenu.vue
PanelMenu
Menu de navigation de style accordéon utilisé dans les barres latérales ; suit automatiquement les clés développées à partir du modèle.
BaseRouteTabs.vue
Ligne BaseAppLink
Barre d'onglets où chaque onglet est un lien de routeur. L'onglet actif est mis en surbrillance automatiquement en fonction de la route actuelle.
BaseAppLink.vue
RouterLink ou <a>
Lien intelligent : rend un <a> lorsque url est défini (externe/ancien), sinon un <RouterLink> de Vue Router. Utilisez-le à la place de l'une ou l'autre primitive pour uniformiser les liens internes/externes.
Dialogues
BaseDialog est la base ; les autres s'appuient dessus pour les flux courants de confirmation/annulation et de suppression.
BaseDialog.vue
Dialog
Dialogue modal avec un en-tête titré (icône d'en-tête optionnelle headerIcon) et un corps/pied de page inséré. L'état d'ouverture est un defineModel("isVisible").
BaseDialogConfirmCancel.vue
BaseDialog
Modal de confirmation/annulation avec deux boutons. type (gravité) et icon de confirmation configurables ; émet confirmClicked / cancelClicked.
BaseDialogDelete.vue
BaseDialogConfirmCancel
Modal pré-construit "Êtes-vous sûr de vouloir supprimer cet élément ?" avec un bouton de confirmation stylisé en danger.
Éditeur et contenu riche
BaseTinyEditor.vue
TinyMCE (via le components/Editor du projet)
Éditeur de texte riche avec FloatLabel, suivi de l'état de focus/vide et intégration avec le contexte du cours actuel (cidReq). Utilisez-le pour tout champ HTML rédigé par l'utilisateur.
Aides
ChamiloIcons.js
Mappe les noms d'icônes sémantiques (edit, delete, eye-on, courses, …) aux classes CSS MDI. Environ 127 entrées. Parcourez-les à /admin/list-icons sur une instance en cours d'exécution.
validators.js
Validateurs de props partagés : iconValidator (doit être un nom d'icône Chamilo connu), sizeValidator (normal / small / large), buttonTypeValidator (types autorisés pour BaseButton). Importez-les lors de la définition de nouveaux composants Base* qui suivent ces conventions.
Conventions à travers les composants de base
v-model via
defineModel()— la valeur (et souventisVisible,filters,selectedItems) sont exposées comme modèles ; passez-les avecv-model[:name]plutôt que:prop+@update:prop.Étiquettes flottantes — la plupart des champs de formulaire enveloppent leur entrée dans
FloatLabel variant="on"de PrimeVue. Fournissezlabel(le texte affiché) etid(utilisé pour lier le<label for>).Messages de validation — les champs exposent
isInvalidet un petit message sous l'entrée (errorText,messageTextousmallTextselon le composant). Des variantes compatibles avec Vuelidate existent pour les plus courantes.Icônes — passez des noms sémantiques Chamilo, pas des classes MDI brutes. Les composants les résolvent via
chamiloIconToClass.Dimensionnement —
size="normal" | "small" | "large"est la propriété de dimensionnement conventionnelle (voirsizeValidator).Composition plutôt que duplication —
BaseDialogDeleteencapsuleBaseDialogConfirmCancel, qui encapsuleBaseDialog;BaseToggleButtonetBaseAdvancedSettingsButtonencapsulentBaseButton. Lorsque vous avez besoin d'une variante récurrente d'un composant existant, préférez composer un nouveauBase*par-dessus plutôt que de le réimplémenter dans un dossier de fonctionnalité.
Composants de mise en page
Situés dans components/layout/ :
DashboardLayout.vue
Mise en page principale : barre supérieure + barre latérale + zone de contenu
Sidebar.vue
Panneau de navigation gauche (rétractable)
TopbarLoggedIn.vue
Barre supérieure avec logo, boîte de réception, avatar
Composants par domaine de fonctionnalité
course/
Cartes de cours, filtres de catalogue, formulaires de cours
Liste et gestion des cours
session/
Cartes de session, catalogue
Liste des sessions
assignments/
Listes de soumissions, modales de notation, formulaires
Flux de travail des travaux
chat/
DockedChat, messages de chat
Chat en temps réel et tuteur IA
filemanager/
CourseDocuments, PersonalFiles
Navigateur et gestion de fichiers
installer/
Step1-Step7, EmailSettings
Assistant d'installation
social/
GroupInfoCard, publications sociales
Fonctionnalités de réseau social
attendance/
AttendanceTable
Suivi de la présence
usergroup/
GroupMembers
Gestion des groupes d'utilisateurs
Système d'icônes
Les icônes utilisent Material Design Icons (MDI) comme seule bibliothèque d'icônes : <i class="mdi mdi-pencil"></i>
Le fichier ChamiloIcons.js fournit un mappage sémantique :
Les composants utilisent BaseIcon ou font référence à chamiloIconToClass pour afficher les icônes de manière cohérente.
Une référence consultable de toutes les icônes disponibles sur la plateforme peut être trouvée à l'adresse /admin/list-icons dans toute instance de Chamilo en cours d'exécution.
Modèles de composants
Composition API — Les composants utilisent la syntaxe
<script setup>de Vue 3Intégration de PrimeVue — Utilisation intensive des composants PrimeVue (Button, DataTable, Dialog, Menu, etc.)
Axios pour les appels API — Requêtes HTTP vers l'API backend
Vue I18n — Tout le texte visible par l'utilisateur utilise des clés de traduction
Mis à jour
Ce contenu vous a-t-il été utile ?