MelissaPaciente Fase 8: wire-up final (Dialog -> route /melissa/paciente?id=X)
PLANO DE 8 FASES COMPLETO. Os 2 callsites Melissa do PatientProntuario.vue
legacy (3593L Dialog) trocam por navegacao pra MelissaPaciente nativo via
router.push. PatientProntuario continua intocado pros 2 callsites legacy
fora do Melissa (TherapistDashboard, PatientsListPage).
MELISSAPACIENTE.VUE — wire-up interno
- Imports: useRouter + useConversationDrawerStore
- close(): emit + router.push('/melissa/pacientes')
- editPatient(): emit + router.push('/melissa/pacientes', query: {edit: id})
pra MelissaPacientes auto-abrir o cadastroFullDialog
- openWhatsapp(): emit + conversationDrawerStore.openForPatient({id, name,
phone, avatar_url}) — drawer global desce sobre Melissa
- addFinancial(): emit + toast "Em breve" (Fase 9 — dialog inline)
MELISSAPACIENTES.VUE
- Removeu import PatientProntuario + refs prontuarioOpen/prontuarioPatient
- Removeu <PatientProntuario> template (substituido por comentario)
- abrirProntuario(p): router.push('/melissa/paciente', query: {id})
- onMounted detecta route.query.edit -> abre cadastroFullDialog +
router.replace pra limpar query (handshake com MelissaPaciente)
- Comentario header atualizado
MELISSAAGENDA.VUE
- Removeu import PatientProntuario + refs prontuarioOpen/prontuarioPatient
- Removeu <PatientProntuario> template
- abrirProntuarioPorId(id): router.push pra rota Melissa nativa
- abrirProntuarioPaciente / openProntuario / kebab "Prontuario" delegam
pra abrirProntuarioPorId
MELISSALAYOUT.VUE
- Render <MelissaPaciente> simplificado: so @close="fecharSecao".
Acoes edit/open-whatsapp/add-financial ficam internas.
ESLint: 0 errors da minha mudanca (9 pre-existentes nos arquivos tocados
sao baseline; confirmados via git stash — mesmos errors em ambos lados).
PLANO COMPLETO. Total de 8 commits no branch (Fases 1-8). MelissaPaciente.vue
~2400L + 5 composables (~407L) + utils ~280L. PatientProntuario.vue
intocado pra fallback legacy (TherapistDashboard, PatientsListPage).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -19,7 +19,9 @@
|
||||
* Prefixo CSS: .mpa-* (Melissa PAciente).
|
||||
*/
|
||||
import { ref, computed, watch, nextTick, onMounted, onBeforeUnmount } from 'vue';
|
||||
import { useRouter } from 'vue-router';
|
||||
import { useToast } from 'primevue/usetoast';
|
||||
import { useConversationDrawerStore } from '@/stores/conversationDrawerStore';
|
||||
import MelissaConfigList from './MelissaConfigList.vue';
|
||||
import DocumentsListPage from '@/features/documents/DocumentsListPage.vue';
|
||||
import PatientConversationsTab from '@/features/patients/prontuario/PatientConversationsTab.vue';
|
||||
@@ -58,7 +60,9 @@ const props = defineProps({
|
||||
});
|
||||
const emit = defineEmits(['close', 'edit', 'add-financial', 'open-whatsapp']);
|
||||
|
||||
const router = useRouter();
|
||||
const toast = useToast();
|
||||
const conversationDrawerStore = useConversationDrawerStore();
|
||||
|
||||
// ── Composables de dados ───────────────────────────────────
|
||||
const detail = usePatientDetail();
|
||||
@@ -323,10 +327,55 @@ const kpiRealizadas = computed(() => sessionsHook.totalRealizadas.value);
|
||||
const kpiMensagens = computed(() => messagesHook.messages.value.length);
|
||||
|
||||
// ── Acoes ──────────────────────────────────────────────────
|
||||
function close() { emit('close'); }
|
||||
function editPatient() { emit('edit', props.patientId); }
|
||||
function addFinancial() { emit('add-financial', props.patientId); }
|
||||
function openWhatsapp() { emit('open-whatsapp', props.patientId); }
|
||||
// Volta pra lista de pacientes (preserva o estado de Melissa).
|
||||
function close() {
|
||||
emit('close');
|
||||
router.push('/melissa/pacientes');
|
||||
}
|
||||
|
||||
// Edit: navega pra /melissa/pacientes?edit=<id> e a propria
|
||||
// MelissaPacientes detecta esse query param e abre o cadastroFullDialog.
|
||||
function editPatient() {
|
||||
emit('edit', props.patientId);
|
||||
router.push({ path: '/melissa/pacientes', query: { edit: props.patientId } });
|
||||
}
|
||||
|
||||
// Open WhatsApp: usa o conversationDrawerStore global (mesmo padrao
|
||||
// que MelissaPacientes usa). O drawer desce sobre o Melissa sem fechar.
|
||||
function openWhatsapp() {
|
||||
emit('open-whatsapp', props.patientId);
|
||||
if (!props.patientId) return;
|
||||
const data = patientData.value || {};
|
||||
try {
|
||||
if (typeof conversationDrawerStore.openForPatient === 'function') {
|
||||
conversationDrawerStore.openForPatient({
|
||||
id: props.patientId,
|
||||
name: data.nome_completo || data.nome || '',
|
||||
phone: data.telefone || data.phone || '',
|
||||
avatar_url: data.avatar_url || data.avatar || ''
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
toast.add({
|
||||
severity: 'error',
|
||||
summary: 'Falha ao abrir conversa',
|
||||
detail: e?.message || 'Erro ao abrir o drawer.',
|
||||
life: 3500
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Add financial: por enquanto so emite. Futuro: dialog inline de
|
||||
// novo lancamento (Fase 9).
|
||||
function addFinancial() {
|
||||
emit('add-financial', props.patientId);
|
||||
toast.add({
|
||||
severity: 'info',
|
||||
summary: 'Em breve',
|
||||
detail: 'Dialog de novo lançamento será adicionado numa próxima sessão.',
|
||||
life: 3000
|
||||
});
|
||||
}
|
||||
|
||||
// ── Load data quando patientId muda ────────────────────────
|
||||
async function loadAll(id) {
|
||||
|
||||
Reference in New Issue
Block a user