Pular para conteúdo

Componentes Vue

O frontend usa Vuetify 3 como biblioteca de componentes e alguns componentes customizados.


Componentes Principais

KanbanColumn

Coluna do quadro Kanban de atendimentos.

Localização: frontend/app/components/KanbanColumn.vue

Props:

Prop Tipo Descrição
title String Título da coluna
color String Cor do Vuetify
icon String Ícone MDI
items Array Lista de cards
loading Boolean Estado de carregamento
actionLabel String Texto do botão
actionIcon String Ícone do botão
actionColor String Cor do botão

Eventos:

Evento Payload Descrição
action item Quando botão de ação é clicado

Uso:

<KanbanColumn
  title="Aguardando"
  color="warning"
  icon="mdi-clock-outline"
  :items="data.waiting"
  :loading="loading"
  action-label="Atender"
  action-icon="mdi-play"
  action-color="primary"
  @action="startEncounter"
/>

KanbanCard

Card individual dentro da coluna Kanban.

Localização: frontend/app/components/KanbanCard.vue

Props:

Prop Tipo Descrição
item Object Dados do agendamento
actionLabel String Texto do botão
actionIcon String Ícone do botão
actionColor String Cor do botão

Estrutura do Item:

interface KanbanItem {
  id: number
  patient_name: string
  start_at: string
  service_name: string
  professional_name: string
  arrived_at?: string
  encounter_id?: number
}

DiagnosisManager

Gerenciador de diagnósticos CID-10 no prontuário.

Localização: frontend/app/components/DiagnosisManager.vue

Props:

Prop Tipo Descrição
encounterId Number ID do atendimento
diagnoses Array Lista atual de diagnósticos

Eventos:

Evento Payload Descrição
update diagnoses[] Quando lista é atualizada

Funcionalidades:

  • Busca de códigos CID-10
  • Adicionar/remover diagnósticos
  • Marcar diagnóstico principal

PrescriptionManager

Gerenciador de prescrições médicas.

Localização: frontend/app/components/PrescriptionManager.vue

Props:

Prop Tipo Descrição
encounterId Number ID do atendimento
prescriptions Array Lista atual de prescrições

Eventos:

Evento Payload Descrição
update prescriptions[] Quando lista é atualizada

Campos da prescrição:

  • Medicamento
  • Dosagem
  • Frequência
  • Duração
  • Observações

AppointmentModal

Modal para criar/editar agendamentos.

Localização: frontend/app/components/AppointmentModal.vue

Props:

Prop Tipo Descrição
modelValue Boolean Controle de visibilidade
appointment Object Dados para edição (opcional)
selectedDate String Data pré-selecionada

Eventos:

Evento Payload Descrição
update:modelValue Boolean Fechar modal
saved appointment Após salvar

DynamicForm

Formulário dinâmico baseado em schema JSON.

Localização: frontend/app/components/DynamicForm.vue

Props:

Prop Tipo Descrição
schema Array Definição dos campos
modelValue Object Valores do formulário

Composables

useApi

Hook para requisições à API.

Localização: frontend/app/composables/useApi.ts

const api = useApi()

// GET
const patients = await api.get('/api/patients/')

// POST
const newPatient = await api.post('/api/patients/', { name: 'João' })

// PATCH
await api.patch('/api/patients/1/', { name: 'João Silva' })

// DELETE
await api.delete('/api/patients/1/')

Funcionalidades:

  • Adiciona token JWT automaticamente
  • Adiciona header X-Clinic-ID
  • Trata erros de autenticação (401)
  • Refresh automático de token

useAuth

Hook de autenticação.

Localização: frontend/app/composables/useAuth.ts

const { user, login, logout, isAuthenticated } = useAuth()

// Login
await login('admin@clinic.com', 'admin123')

// Verificar autenticação
if (isAuthenticated.value) {
  console.log(user.value.name)
}

// Logout
logout()

Estado exposto:

Propriedade Tipo Descrição
user Ref Usuário logado
isAuthenticated Ref Está autenticado
currentClinic Ref Clínica selecionada

Layouts

default.vue

Layout padrão com sidebar e header.

Localização: frontend/app/layouts/default.vue

Estrutura:

┌─────────────────────────────────────────┐
│  Header (logo, user menu, clinic)       │
├──────┬──────────────────────────────────┤
│      │                                  │
│ Side │       Main Content               │
│ bar  │       (slot default)             │
│      │                                  │
│      │                                  │
└──────┴──────────────────────────────────┘

Menu lateral:

  • Dashboard
  • Agenda
  • Atendimentos (Kanban)
  • Pacientes
  • Serviços
  • Pagamentos
  • Relatórios
  • Usuários
  • Clínicas (admin)