MelissaAgendaConfig: pagina nativa 2-col com Jornada + Ritmo + Online

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 `<MelissaAgendaConfig>` 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) <noreply@anthropic.com>
This commit is contained in:
Leonardo
2026-05-06 16:41:26 -03:00
parent 85ebbf334d
commit cf1fa7e361
3 changed files with 2292 additions and 13 deletions
File diff suppressed because it is too large Load Diff
+5 -12
View File
@@ -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/<slug>.
{
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',
+9 -1
View File
@@ -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"
/>
<MelissaAgendaConfig
v-if="layoutReady && secaoAberta === 'agenda-config'"
@close="fecharSecao"
/>
<MelissaConfiguracoes
v-if="layoutReady && isMelissaConfigRoute(secaoAberta)"
:secao-rota="secaoAberta"