MelissaAgendador: pagina nativa 2-col com 6 secoes de config

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 `<MelissaAgendador>` 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) <noreply@anthropic.com>
This commit is contained in:
Leonardo
2026-05-06 16:31:29 -03:00
parent 25444c1f5f
commit 85ebbf334d
3 changed files with 2249 additions and 8 deletions
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -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)
]
},
{
+10 -4
View File
@@ -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"
/>
<MelissaAgendador
v-if="layoutReady && secaoAberta === 'online-scheduling'"
@close="fecharSecao"
/>
<MelissaConfiguracoes
v-if="layoutReady && isMelissaConfigRoute(secaoAberta)"
:secao-rota="secaoAberta"