Componentes Vue
O Chamilo possui um amplo conjunto de componentes Vue organizados por área de funcionalidade em assets/vue/components/.
Componentes Base
A família Base* em assets/vue/components/basecomponents/ encapsula os primitivos do PrimeVue com padrões específicos do Chamilo (layout FloatLabel, ícones MDI via chamiloIconToClass, mensagens de validação consistentes, dimensionamento Tailwind). Sempre opte por um componente Base* antes de importar o componente subjacente do PrimeVue — é assim que a interface do usuário permanece consistente em toda a SPA e como mudanças de design podem ser implementadas a partir de um único local.
Os componentes não são registrados globalmente (o único primitivo do PrimeVue registrado globalmente é Column, usado dentro de BaseTable). Importe cada um explicitamente:
import BaseButton from "@/components/basecomponents/BaseButton.vue"
import BaseDialog from "@/components/basecomponents/BaseDialog.vue"Campos de formulário
A maioria aceita o valor através de v-model, expõe as propriedades id + label para acessibilidade/vinculação de rótulos flutuantes e apresenta validação por meio de um par isInvalid / errorText (ou messageText).
BaseInputText.vue
InputText + FloatLabel
Campo de texto de linha única. Muda para um rótulo estático em campos de entrada date/time/datetime-local (onde o rótulo flutuante sobreporia o placeholder nativo).
BaseInputTextWithVuelidate.vue
BaseInputText
Adaptador fino para Vuelidate: encaminha $error para isInvalid e renderiza $errors[].$message no slot errors. Combine-o com um objeto de campo Vuelidate.
BaseTextArea.vue
Textarea + FloatLabel
Campo de texto multilinha.
BaseTextAreaWithVuelidate.vue
BaseTextArea
Mesmo padrão de adaptador Vuelidate que BaseInputTextWithVuelidate.
BaseInputNumber.vue
InputNumber
Campo numérico com min / max / step e botões de incremento/decremento.
BaseInputTags.vue
(personalizado)
Etiquetas de texto livre; as etiquetas são adicionadas ao pressionar enter/vírgula e removidas ao pressionar backspace.
BaseInputGroup.vue
InputGroup + BaseButton
Campo de texto combinado com um botão de ação (estilo de pesquisa).
BaseCheckbox.vue
Checkbox
Caixa de seleção binária ou vinculada a valor com rótulo.
BaseRadioButtons.vue
RadioButton
Grupo de botões de rádio controlado por um array options: [{label, value}].
BaseToggleButton.vue
BaseButton
Botão de dois estados (rótulos e ícones de ligado/desligado) vinculado através de v-model.
BaseCalendar.vue
DatePicker + FloatLabel
Seletor de data/data-hora. Respeita platform.timepicker_increment e a localidade do usuário via calendarLocales.
BaseColorPicker.vue
nativo <input type="color"> + InputText
Seletor de cores com fallback para texto hexadecimal; usa colorjs.io para validar entrada manual de hexadecimal.
BaseRating.vue
Rating
Campo de avaliação por estrelas.
BaseFileUpload.vue
nativo <input type="file"> + BaseButton
Seletor de arquivo único que aciona um botão no estilo de anexo.
BaseFileUploadMultiple.vue
nativo <input type="file" multiple> + BaseButton
Variante de múltiplos arquivos de BaseFileUpload.
BaseUploader.vue
Uppy Dashboard
Carregador completo Uppy (webcam, áudio, editor de imagem, upload XHR) com localizações vinculadas ao appLocale atual. Use isso para uploads ricos com progresso; use BaseFileUpload* para anexos simples.
Seleção e autocompletar
BaseSelect.vue
Dropdown + FloatLabel
Menu suspenso de escolha única com botão de limpar opcional.
BaseMultiSelect.vue
MultiSelect + FloatLabel
Menu suspenso de escolha múltipla que exibe itens selecionados como chips.
BaseSearchSelect.vue
Dropdown com filter
Menu suspenso de escolha única com caixa de pesquisa integrada, rolagem virtual opcional e modelo de opção de duas linhas (label + sublabel).
BaseAutocomplete.vue
AutoComplete
Autocompletar assíncrono (mínimo de 3 caracteres). Suporta seleção única ou múltipla e um slot chip para personalizar chips.
BaseUserFinder.vue
BaseTable + userService
Tabela de pesquisa de usuários paginada com seleção de linha. Use quando uma funcionalidade precisar de um seletor de usuários no estilo administrador.
Botões e ações
BaseButton.vue
Button (PrimeVue)
Botão padrão do Chamilo. Resolve ícones através de chamiloIconToClass, normaliza type para severity/variant do PrimeVue, renderiza um BaseAppLink interno quando um route ou toUrl é fornecido (assim, o mesmo componente lida com casos de router-link, âncora e botão simples). Os valores aceitos para type estão listados em validators.js → buttonTypeValidator.
BaseAdvancedSettingsButton.vue
BaseButton
Botão de divulgação que alterna um painel de "configurações avançadas" inserido via v-model.
BaseToolbar.vue
Toolbar
Barra de ferramentas de ação com slots start / end (ou um único slot padrão). showTopBorder opcional para estilização de separador.
Exibição e dados
BaseTable.vue
DataTable (PrimeVue)
Tabela de dados padrão do Chamilo. Suporta modo server-side (lazy), ordenação por múltiplas colunas, filtro global, seleção de linhas e paginação. Passe colunas como filhos <Column> (registrados globalmente).
BaseCard.vue
Card
Envoltório de cartão que encaminha os slots header, title, subtitle, footer e padrão (conteúdo).
BaseChart.vue
Chart
Predefinição de gráfico de pizza. Passe um objeto data compatível com Chart.js.
BaseChip.vue
Chip
Chip renderizado a partir de um objeto {value, labelField, imageField}, com botão de remoção opcional.
BaseTag.vue
Tag
Etiqueta colorida. Mapeia o warning do Chamilo para o warn do PrimeVue.
BaseAvatarList.vue
Avatar + BaseUserAvatar
Linha de avatares com contador de excesso (por exemplo, "+3"); controlado por useAvatarList.
BaseUserAvatar.vue
Avatar
Avatar de usuário com fallback de imagem, estado de carregamento e rótulo acessível.
BaseIcon.vue
<i class="mdi …">
Renderizador de ícones do Chamilo. Adiciona um distintivo opcional (texto ou ícone), tooltip e modificador de tamanho. Sempre passe um nome semântico do Chamilo (por exemplo, "edit"), não uma classe MDI bruta.
BaseIconField.vue
IconField + InputText
Campo de entrada de pesquisa com um ícone de lupa à esquerda.
BaseDivider.vue
Divider
Divisor horizontal ou vertical, com título e alinhamento opcionais.
Navegação e menus
BaseMenu.vue
Menu (popup)
Menu popup que entende rotas do router dentro de itens model[].
BaseDropdownMenu.vue
(personalizado)
Gatilho de dropdown leve com coordenação de abertura única (abrir um fecha os outros).
BaseContextMenu.vue
(personalizado)
Menu de contexto de clique direito / posicionado, controlado por visible + position.
BaseSidebarPanelMenu.vue
PanelMenu
Menu de navegação estilo acordeão usado em barras laterais; rastreia automaticamente chaves expandidas a partir do modelo.
BaseRouteTabs.vue
Linha de BaseAppLink
Barra de abas onde cada aba é um link de router. A aba ativa é destacada automaticamente com base na rota atual.
BaseAppLink.vue
RouterLink ou <a>
Link inteligente: renderiza um <a> quando url está definido (externo/legado), caso contrário, um <RouterLink> do Vue Router. Use-o em vez de qualquer primitivo para manter a uniformidade entre links internos e externos.
Diálogos
BaseDialog é a base; os outros são construídos sobre ele para os fluxos comuns de confirmação/cancelamento e exclusão.
BaseDialog.vue
Dialog
Diálogo modal com um cabeçalho intitulado (opcional headerIcon) e corpo/rodapé com slots. O estado aberto é um defineModel("isVisible").
BaseDialogConfirmCancel.vue
BaseDialog
Modal de confirmação/cancelamento com dois botões. Tipo de confirmação configurável (type) (severidade) e icon; emite confirmClicked / cancelClicked.
BaseDialogDelete.vue
BaseDialogConfirmCancel
Modal pré-construído "Tem certeza de que deseja excluir este item?" com um botão de confirmação estilizado como perigo.
Editor e conteúdo rico
BaseTinyEditor.vue
TinyMCE (via o components/Editor do projeto)
Editor de texto rico com FloatLabel, rastreamento de estado de foco/vazio e integração com o contexto do curso atual (cidReq). Use-o para qualquer campo HTML criado pelo usuário.
Auxiliares
ChamiloIcons.js
Mapeia nomes de ícones semânticos (edit, delete, eye-on, courses, …) para classes CSS MDI. Cerca de 127 entradas. Navegue por eles em /admin/list-icons em uma instância em execução.
validators.js
Validadores de propriedades compartilhados: iconValidator (deve ser um nome de ícone conhecido do Chamilo), sizeValidator (normal / small / large), buttonTypeValidator (tipos permitidos de BaseButton). Importe-os ao definir novos componentes Base* que seguem essas convenções.
Convenções em componentes Base
v-model via
defineModel()— valor (e frequentementeisVisible,filters,selectedItems) são expostos como modelos; passe-os comv-model[:name]em vez de:prop+@update:prop.Rótulos flutuantes — a maioria dos campos de formulário envolve sua entrada em PrimeVue
FloatLabel variant="on". Forneçalabel(o texto exibido) eid(usado para vincular o<label for>).Mensagens de validação — os campos expõem
isInvalide uma pequena mensagem abaixo da entrada (errorText,messageTextousmallText, dependendo do componente). Variantes compatíveis com Vuelidate existem para os mais comuns.Ícones — passe nomes semânticos do Chamilo, não classes MDI brutas. Os componentes os resolvem através de
chamiloIconToClass.Dimensionamento —
size="normal" | "small" | "large"é a propriedade de dimensionamento convencional (vejasizeValidator).Composição sobre duplicação —
BaseDialogDeleteenvolveBaseDialogConfirmCancel, que envolveBaseDialog;BaseToggleButtoneBaseAdvancedSettingsButtonenvolvemBaseButton. Quando você precisar de uma variante recorrente de um componente existente, prefira compor um novoBase*sobre ele em vez de reimplementá-lo em uma pasta de funcionalidade.
Componentes de Layout
Localizados em components/layout/:
DashboardLayout.vue
Layout principal: barra superior + barra lateral + área de conteúdo
Sidebar.vue
Painel de navegação esquerdo (colapsável)
TopbarLoggedIn.vue
Barra superior com logotipo, caixa de entrada, avatar
Componentes de Área de Funcionalidade
course/
Cartões de curso, filtros de catálogo, formulários de curso
Listagem e gestão de cursos
session/
Cartões de sessão, catálogo
Listagem de sessões
assignments/
Listas de submissões, modais de avaliação, formulários
Fluxo de trabalho de tarefas
chat/
DockedChat, mensagens de chat
Chat em tempo real e tutor de IA
filemanager/
CourseDocuments, PersonalFiles
Navegador e gestão de arquivos
installer/
Step1-Step7, EmailSettings
Assistente de instalação
social/
GroupInfoCard, publicações sociais
Funcionalidades de rede social
attendance/
AttendanceTable
Rastreamento de presença
usergroup/
GroupMembers
Gestão de grupos de usuários
Sistema de Ícones
Os ícones utilizam Material Design Icons (MDI) como a única biblioteca de ícones: <i class="mdi mdi-pencil"></i>
O arquivo ChamiloIcons.js fornece um mapeamento semântico:
Os componentes utilizam BaseIcon ou fazem referência a chamiloIconToClass para renderizar ícones de forma consistente.
Uma referência navegável de todos os ícones disponíveis na plataforma pode ser encontrada em /admin/list-icons em qualquer instância do Chamilo em execução.
Padrões de Componentes
Composition API — Os componentes utilizam a sintaxe
<script setup>do Vue 3Integração com PrimeVue — Uso intensivo de componentes PrimeVue (Button, DataTable, Dialog, Menu, etc.)
Axios para chamadas de API — Requisições HTTP para a API do backend
Vue I18n — Todo o texto voltado para o usuário utiliza chaves de tradução
Última atualização
Isto foi útil?