From 85ebbf334d4c2c9d30ca73a0da973262109d7d95 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Wed, 6 May 2026 16:31:29 -0300 Subject: [PATCH] MelissaAgendador: pagina nativa 2-col com 6 secoes de config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tira "Agendador Online" do MelissaConfiguracoes (era embed cfg-agendador -> ConfiguracoesAgendadorPage.vue) e tambem do MelissaEmbed (era 'online-scheduling' em MELISSA_EMBED_KEYS). Cria a /melissa/online-scheduling como pagina nativa Melissa. Sidebar (mag-side): - Card "Status" — toggle ativo + tag PRO + link publico (com input selecionavel + copy + open) + slug personalizado (se entitlement) ou upgrade hint - Card "Configuracoes" — 6 atalhos clicaveis com icones coloridos + resumo dinamico de cada secao (scroll suave pra ancora) Main (50/50 desktop, Textos full-width): - Identidade Visual: nome + cor (ColorPicker) + 3 uploads (logomarca/header/fundo) com auto-save apos upload - Perfil Publico: endereco + botao "Como chegar" toggle + maps_url - Fluxo: modo aprovacao (radio cards) + prazo resposta + modalidade (SelectButton) + tipos (chips) + duracao + antecedencia - Pagamento: 3 modos (radio) + metodos visiveis (com payment_settings sync) + Pix config + reserva - Triagem & LGPD: 4 toggles (motivo + origem + verificacao email + lgpd) - Textos: 3 Editors PrimeVue (boas-vindas + como_se_preparar + termos_lgpd condicional) — em row full-width pq sao mais altos Cada card tem botao "Salvar" proprio (saveCard build payload do respectivo subset). Aplicam o pattern: min-h 300, max-h 100%, body overflow-y: auto. Logica espelhada do ConfiguracoesAgendadorPage (agendador_configuracoes + bucket agendador + entitlements). Compativel com /configuracoes/agendador. Wire-up: - MelissaLayout: import + render `` quando secaoAberta === 'online-scheduling' - MELISSA_EMBED_KEYS agora vazio (Melissa nao tem mais embeds) - 'online-scheduling' adicionado explicitamente em MELISSA_NON_CONFIG_SLUGS - SECOES['online-scheduling'].descricao atualizada - MelissaConfiguracoes: cfg-agendador removido de COMPONENT_MAP e do grupo Agenda (resta so cfg-agenda) Co-Authored-By: Claude Opus 4.7 (1M context) --- src/layout/melissa/MelissaAgendador.vue | 2235 +++++++++++++++++++ src/layout/melissa/MelissaConfiguracoes.vue | 8 +- src/layout/melissa/MelissaLayout.vue | 14 +- 3 files changed, 2249 insertions(+), 8 deletions(-) create mode 100644 src/layout/melissa/MelissaAgendador.vue diff --git a/src/layout/melissa/MelissaAgendador.vue b/src/layout/melissa/MelissaAgendador.vue new file mode 100644 index 0000000..17875f7 --- /dev/null +++ b/src/layout/melissa/MelissaAgendador.vue @@ -0,0 +1,2235 @@ + + + + + diff --git a/src/layout/melissa/MelissaConfiguracoes.vue b/src/layout/melissa/MelissaConfiguracoes.vue index 28b360b..f5c1185 100644 --- a/src/layout/melissa/MelissaConfiguracoes.vue +++ b/src/layout/melissa/MelissaConfiguracoes.vue @@ -73,7 +73,7 @@ function secaoToRota(key) { const COMPONENT_MAP = { 'cfg-agenda': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesAgendaPage.vue')), // 'cfg-bloqueios' removido — virou pagina nativa MelissaBloqueios em /melissa/bloqueios - 'cfg-agendador': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesAgendadorPage.vue')), + // 'cfg-agendador' removido — virou pagina nativa MelissaAgendador em /melissa/online-scheduling 'cfg-pagamento': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesPagamentoPage.vue')), 'cfg-precificacao': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesPrecificacaoPage.vue')), 'cfg-descontos': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesDescontosPage.vue')), @@ -151,9 +151,9 @@ const grupos = [ 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) - { key: 'cfg-agendador', label: 'Agendador Online', desc: 'Link público para pacientes solicitarem horários.', icon: 'pi pi-calendar-clock' } + { 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) ] }, { diff --git a/src/layout/melissa/MelissaLayout.vue b/src/layout/melissa/MelissaLayout.vue index 852bd74..caf39c2 100644 --- a/src/layout/melissa/MelissaLayout.vue +++ b/src/layout/melissa/MelissaLayout.vue @@ -39,6 +39,7 @@ import MelissaNegocio from './MelissaNegocio.vue'; import MelissaAlterarPlano from './MelissaAlterarPlano.vue'; import MelissaSeguranca from './MelissaSeguranca.vue'; import MelissaBloqueios from './MelissaBloqueios.vue'; +import MelissaAgendador from './MelissaAgendador.vue'; import MelissaEmbed from './MelissaEmbed.vue'; import MelissaCadastrosRecebidos from './MelissaCadastrosRecebidos.vue'; import MelissaAgendamentosRecebidos from './MelissaAgendamentosRecebidos.vue'; @@ -187,16 +188,15 @@ const SECOES = { 'documentos': { label: 'Documentos', icon: 'pi pi-file', descricao: 'Documentos clínicos do tenant.' }, 'documentos-templates': { label: 'Templates de documentos', icon: 'pi pi-file-edit', descricao: 'Modelos pra prontuários e relatórios.' }, 'agendamentos-recebidos': { label: 'Agendamentos recebidos', icon: 'pi pi-inbox', descricao: 'Solicitações do agendador online.' }, - 'online-scheduling': { label: 'Agendador online', icon: 'pi pi-calendar-clock', descricao: 'Configure o link público de agendamento.' }, + 'online-scheduling': { label: 'Agendador online', icon: 'pi pi-calendar-clock', descricao: 'Configure o link publico, identidade visual, fluxo, pagamento e textos do agendador.' }, 'relatorios': { label: 'Relatórios', icon: 'pi pi-chart-bar', descricao: 'Indicadores clínicos e financeiros do tenant.' }, 'notificacoes': { label: 'Notificações', icon: 'pi pi-bell', descricao: 'Histórico de notificações enviadas.' }, 'link-externo': { label: 'Link externo de cadastro', icon: 'pi pi-share-alt', descricao: 'Link público pra pacientes se cadastrarem.' } }; // Set de keys que renderizam via MelissaEmbed (Onda 1 — pages 1-coluna). -// Quase todas foram promovidas pra páginas nativas; resta apenas -// 'online-scheduling' por enquanto. -const MELISSA_EMBED_KEYS = ['online-scheduling']; +// Todas foram promovidas pra paginas nativas Melissa. +const MELISSA_EMBED_KEYS = []; // Slugs reservados pra páginas dedicadas (não-config) — agenda, pacientes, // conversas etc. + as MELISSA_EMBED_KEYS. Usado no isConfigRoute pra @@ -207,6 +207,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', ...MELISSA_EMBED_KEYS ]); // Aliases "bonitos" + INLINE_KEYS reconhecidos pelo MelissaConfiguracoes. @@ -2252,6 +2253,11 @@ function onKeydown(e) { @close="fecharSecao" /> + +