From cf1fa7e361f0b453bd6897b9b7635b95ef6c1e32 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Wed, 6 May 2026 16:41:26 -0300 Subject: [PATCH] MelissaAgendaConfig: pagina nativa 2-col com Jornada + Ritmo + Online MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tira "Agenda" do MelissaConfiguracoes (era embed cfg-agenda -> ConfiguracoesAgendaPage.vue, 1714 linhas). Cria a /melissa/agenda-config nativa Melissa. Sidebar (mac-side): - Card "Status do setup" — 3 status items clicaveis (Jornada/Ritmo/ Online) com icone verde se OK ou amber se pendente + resumo dinamico + chevron pra ancora - Card "Como funciona" — FAQ 3-passos (1/2/3) explicando o fluxo Main (1-col stacked, denso demais pra 50/50): - Jornada: fuso (timezone Select) + dias da semana (chips toggleaveis) + modo igual/diferente (toggle bonito) + horarios (DatePickers timeOnly, weekdays + sab + dom separados em modo igual; por dia em modo diferente) + pausas (PausasChipsEditor reaproveitado, globais ou por dia) - Ritmo: 5 presets de duracao (30/45/50/60/90 min com gap) + custom collapse com 2 DatePickers (duracao + intervalo) - Online: aviso de slots orfaos (dias com slots mas sem jornada) + toggle ativo + tabs de dia + periodos quick actions (Manha/Tarde/ Noite/Todos/Limpar) + slot chips individuais + info contagem Cada card com Salvar proprio (saveJornada/saveRitmo/saveOnline). DB: agenda_configuracoes + agenda_regras_semanais + agenda_online_slots. Logica de igual/diferente com snapshot preservation, geracao de slots respeitando jornada+pausas, limpeza automatica de slots orfaos ao salvar jornada — tudo espelhado do original. SKIPPED: FullCalendar preview (visite /melissa/agenda real). Wire-up: - MelissaLayout: import + render `` quando secaoAberta === 'agenda-config' - 'agenda-config' adicionado em SECOES + MELISSA_NON_CONFIG_SLUGS - MelissaConfiguracoes: cfg-agenda removido de COMPONENT_MAP + grupo Agenda inteiro removido (Agenda/Bloqueios/Agendador todos viraram nativos agora) Co-Authored-By: Claude Opus 4.7 (1M context) --- src/layout/melissa/MelissaAgendaConfig.vue | 2278 +++++++++++++++++++ src/layout/melissa/MelissaConfiguracoes.vue | 17 +- src/layout/melissa/MelissaLayout.vue | 10 +- 3 files changed, 2292 insertions(+), 13 deletions(-) create mode 100644 src/layout/melissa/MelissaAgendaConfig.vue diff --git a/src/layout/melissa/MelissaAgendaConfig.vue b/src/layout/melissa/MelissaAgendaConfig.vue new file mode 100644 index 0000000..9a91f3e --- /dev/null +++ b/src/layout/melissa/MelissaAgendaConfig.vue @@ -0,0 +1,2278 @@ + + + + + diff --git a/src/layout/melissa/MelissaConfiguracoes.vue b/src/layout/melissa/MelissaConfiguracoes.vue index f5c1185..adb2880 100644 --- a/src/layout/melissa/MelissaConfiguracoes.vue +++ b/src/layout/melissa/MelissaConfiguracoes.vue @@ -71,7 +71,7 @@ function secaoToRota(key) { // Usa defineAsyncComponent pra lazy-load — só carrega quando o user clica. // Mantém o user dentro do overlay Melissa em vez de navegar pra fora. const COMPONENT_MAP = { - 'cfg-agenda': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesAgendaPage.vue')), + // 'cfg-agenda' removido — virou pagina nativa MelissaAgendaConfig em /melissa/agenda-config // 'cfg-bloqueios' removido — virou pagina nativa MelissaBloqueios em /melissa/bloqueios // 'cfg-agendador' removido — virou pagina nativa MelissaAgendador em /melissa/online-scheduling 'cfg-pagamento': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesPagamentoPage.vue')), @@ -145,17 +145,10 @@ const grupos = [ }, // Grupo "Conta" inteiro saiu — todos os 4 items (Perfil/Plano/ // Negocio/Seguranca) viraram paginas nativas no /melissa/. - { - key: 'agenda', - label: 'Agenda', - desc: 'Horários, bloqueios e agendador público para pacientes.', - icon: 'pi pi-calendar', - items: [ - { key: 'cfg-agenda', label: 'Agenda', desc: 'Horários semanais, exceções, duração e intervalo padrão.', icon: 'pi pi-calendar' } - // "Bloqueios" virou pagina nativa em /melissa/bloqueios (MelissaBloqueios) - // "Agendador Online" virou pagina nativa em /melissa/online-scheduling (MelissaAgendador) - ] - }, + // Grupo "Agenda" inteiro saiu — todos os 3 items viraram paginas nativas: + // - "Agenda" → /melissa/agenda-config (MelissaAgendaConfig) + // - "Bloqueios" → /melissa/bloqueios (MelissaBloqueios) + // - "Agendador Online" → /melissa/online-scheduling (MelissaAgendador) { key: 'financeiro', label: 'Financeiro', diff --git a/src/layout/melissa/MelissaLayout.vue b/src/layout/melissa/MelissaLayout.vue index caf39c2..5eca059 100644 --- a/src/layout/melissa/MelissaLayout.vue +++ b/src/layout/melissa/MelissaLayout.vue @@ -40,6 +40,7 @@ import MelissaAlterarPlano from './MelissaAlterarPlano.vue'; import MelissaSeguranca from './MelissaSeguranca.vue'; import MelissaBloqueios from './MelissaBloqueios.vue'; import MelissaAgendador from './MelissaAgendador.vue'; +import MelissaAgendaConfig from './MelissaAgendaConfig.vue'; import MelissaEmbed from './MelissaEmbed.vue'; import MelissaCadastrosRecebidos from './MelissaCadastrosRecebidos.vue'; import MelissaAgendamentosRecebidos from './MelissaAgendamentosRecebidos.vue'; @@ -180,6 +181,8 @@ const SECOES = { seguranca: { label: 'Segurança', icon: 'pi pi-shield', descricao: 'Trocar senha + boas praticas + estado da sessao.' }, // Pagina nativa de bloqueios (MelissaBloqueios) — saiu do MelissaConfiguracoes bloqueios: { label: 'Bloqueios e Feriados', icon: 'pi pi-ban', descricao: 'Feriados nacionais (auto), municipais e bloqueios manuais.' }, + // Pagina nativa de configs da agenda (MelissaAgendaConfig) — saiu do MelissaConfiguracoes + 'agenda-config': { label: 'Configurações da Agenda', icon: 'pi pi-calendar', descricao: 'Jornada (dias e horários), ritmo das sessões e agendamento online.' }, // Pagina nativa de alterar plano (MelissaAlterarPlano) — substitui /therapist/upgrade 'alterar-plano': { label: 'Alterar Plano', icon: 'pi pi-arrow-up-right', descricao: 'Escolha um plano pessoal pra ativar todos os recursos.' }, // Onda 1 — pages embedadas via MelissaEmbed (1-coluna, hero glass) @@ -207,7 +210,7 @@ const MELISSA_NON_CONFIG_SLUGS = new Set([ 'link-externo', 'notificacoes', 'financeiro', 'financeiro-lancamentos', 'documentos', 'documentos-templates', 'relatorios', 'perfil', 'plano', 'negocio', 'seguranca', 'bloqueios', 'alterar-plano', - 'online-scheduling', + 'online-scheduling', 'agenda-config', ...MELISSA_EMBED_KEYS ]); // Aliases "bonitos" + INLINE_KEYS reconhecidos pelo MelissaConfiguracoes. @@ -2258,6 +2261,11 @@ function onKeydown(e) { @close="fecharSecao" /> + +