MelissaPagamento: pagina nativa 2-col com 6 cards de metodos

Tira "Pagamento" do MelissaConfiguracoes (era embed cfg-pagamento ->
ConfiguracoesPagamentoPage.vue, 580 linhas). Cria a /melissa/pagamento
nativa Melissa.

Sidebar (mpg-side):
- Card "Resumo" — 5 mini stats coloridos por metodo (Pix verde,
  Deposito azul, Dinheiro amarelo, Cartao roxo, Convenio teal),
  com label "Ativo" ou "Inativo" + cor da borda quando ativo
- Card "Como funciona" — FAQ (Agendador / Cobranca WhatsApp / Obs)

Main (1-col, sem grid pq cards expandem dinamicamente quando ativos):
- Pix: tipo de chave (Select 5 opcoes) + chave + nome titular
- Deposito/TED: banco (Select 16 bancos BR) + tipo conta + agencia
  + conta + titular + CPF/CNPJ
- Dinheiro: toggle simples
- Cartao: toggle + instrucao opcional
- Convenio: toggle + lista de convenios (Textarea)
- Observacoes: Textarea livre

Cada card com toggle no head + body que expande quando ativo +
botao "Salvar" proprio (saveCard build payload do subset). Quando
inativo, mostra so "Salvar como inativo" pra persistir o desligar.
flex-shrink: 0 nos cards (mesmo padrao do AgendaConfig — conteudo
varia muito).

Logica espelhada do ConfiguracoesPagamentoPage (tabela payment_settings).
Compativel com /configuracoes/pagamento.

Wire-up:
- MelissaLayout: import + render `<MelissaPagamento>` quando
  secaoAberta === 'pagamento'
- 'pagamento' adicionado em SECOES + MELISSA_NON_CONFIG_SLUGS
- MelissaConfiguracoes: cfg-pagamento removido de COMPONENT_MAP +
  item do grupo Financeiro re-rotulado pra slug 'pagamento' (atalho
  pra pagina nativa)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Leonardo
2026-05-06 17:31:28 -03:00
parent 6cc094d252
commit 7d2307dcf0
3 changed files with 1148 additions and 3 deletions
+2 -2
View File
@@ -74,7 +74,7 @@ const COMPONENT_MAP = {
// 'cfg-agenda' removido — virou pagina nativa MelissaAgendaConfig em /melissa/agenda-config // 'cfg-agenda' removido — virou pagina nativa MelissaAgendaConfig em /melissa/agenda-config
// 'cfg-bloqueios' removido — virou pagina nativa MelissaBloqueios em /melissa/bloqueios // 'cfg-bloqueios' removido — virou pagina nativa MelissaBloqueios em /melissa/bloqueios
// 'cfg-agendador' removido — virou pagina nativa MelissaAgendador em /melissa/online-scheduling // 'cfg-agendador' removido — virou pagina nativa MelissaAgendador em /melissa/online-scheduling
'cfg-pagamento': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesPagamentoPage.vue')), // 'cfg-pagamento' removido — virou pagina nativa MelissaPagamento em /melissa/pagamento
'cfg-precificacao': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesPrecificacaoPage.vue')), 'cfg-precificacao': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesPrecificacaoPage.vue')),
'cfg-descontos': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesDescontosPage.vue')), 'cfg-descontos': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesDescontosPage.vue')),
'cfg-excecoes': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesExcecoesFinanceirasPage.vue')), 'cfg-excecoes': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesExcecoesFinanceirasPage.vue')),
@@ -178,7 +178,7 @@ const grupos = [
desc: 'Formas de pagamento, valores, descontos e convênios.', desc: 'Formas de pagamento, valores, descontos e convênios.',
icon: 'pi pi-wallet', icon: 'pi pi-wallet',
items: [ items: [
{ key: 'cfg-pagamento', label: 'Pagamento', desc: 'Formas de pagamento: Pix, depósito, dinheiro, cartão, convênio.', icon: 'pi pi-wallet' }, { key: 'pagamento', label: 'Formas de Pagamento', desc: 'Pix, depósito, dinheiro, cartão e convênio.', icon: 'pi pi-wallet' },
{ key: 'cfg-precificacao', label: 'Precificação', desc: 'Valor padrão da sessão e preços por tipo de compromisso.', icon: 'pi pi-tag' }, { key: 'cfg-precificacao', label: 'Precificação', desc: 'Valor padrão da sessão e preços por tipo de compromisso.', icon: 'pi pi-tag' },
{ key: 'cfg-descontos', label: 'Descontos por Paciente', desc: 'Descontos recorrentes aplicados automaticamente.', icon: 'pi pi-percentage' }, { key: 'cfg-descontos', label: 'Descontos por Paciente', desc: 'Descontos recorrentes aplicados automaticamente.', icon: 'pi pi-percentage' },
{ key: 'cfg-excecoes', label: 'Exceções Financeiras', desc: 'O que cobrar em faltas, cancelamentos e situações excepcionais.', icon: 'pi pi-exclamation-triangle' }, { key: 'cfg-excecoes', label: 'Exceções Financeiras', desc: 'O que cobrar em faltas, cancelamentos e situações excepcionais.', icon: 'pi pi-exclamation-triangle' },
+9 -1
View File
@@ -41,6 +41,7 @@ import MelissaSeguranca from './MelissaSeguranca.vue';
import MelissaBloqueios from './MelissaBloqueios.vue'; import MelissaBloqueios from './MelissaBloqueios.vue';
import MelissaAgendador from './MelissaAgendador.vue'; import MelissaAgendador from './MelissaAgendador.vue';
import MelissaAgendaConfig from './MelissaAgendaConfig.vue'; import MelissaAgendaConfig from './MelissaAgendaConfig.vue';
import MelissaPagamento from './MelissaPagamento.vue';
import MelissaEmbed from './MelissaEmbed.vue'; import MelissaEmbed from './MelissaEmbed.vue';
import MelissaCadastrosRecebidos from './MelissaCadastrosRecebidos.vue'; import MelissaCadastrosRecebidos from './MelissaCadastrosRecebidos.vue';
import MelissaAgendamentosRecebidos from './MelissaAgendamentosRecebidos.vue'; import MelissaAgendamentosRecebidos from './MelissaAgendamentosRecebidos.vue';
@@ -183,6 +184,8 @@ const SECOES = {
bloqueios: { label: 'Bloqueios e Feriados', icon: 'pi pi-ban', descricao: 'Feriados nacionais (auto), municipais e bloqueios manuais.' }, 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 // 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.' }, '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 formas de pagamento (MelissaPagamento) — saiu do MelissaConfiguracoes
pagamento: { label: 'Formas de Pagamento', icon: 'pi pi-wallet', descricao: 'Pix, depósito, dinheiro, cartão e convênio.' },
// Pagina nativa de alterar plano (MelissaAlterarPlano) — substitui /therapist/upgrade // 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.' }, '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) // Onda 1 — pages embedadas via MelissaEmbed (1-coluna, hero glass)
@@ -210,7 +213,7 @@ const MELISSA_NON_CONFIG_SLUGS = new Set([
'link-externo', 'notificacoes', 'financeiro', 'financeiro-lancamentos', 'link-externo', 'notificacoes', 'financeiro', 'financeiro-lancamentos',
'documentos', 'documentos-templates', 'relatorios', 'documentos', 'documentos-templates', 'relatorios',
'perfil', 'plano', 'negocio', 'seguranca', 'bloqueios', 'alterar-plano', 'perfil', 'plano', 'negocio', 'seguranca', 'bloqueios', 'alterar-plano',
'online-scheduling', 'agenda-config', 'online-scheduling', 'agenda-config', 'pagamento',
...MELISSA_EMBED_KEYS ...MELISSA_EMBED_KEYS
]); ]);
// Aliases "bonitos" + INLINE_KEYS reconhecidos pelo MelissaConfiguracoes. // Aliases "bonitos" + INLINE_KEYS reconhecidos pelo MelissaConfiguracoes.
@@ -2266,6 +2269,11 @@ function onKeydown(e) {
@close="fecharSecao" @close="fecharSecao"
/> />
<MelissaPagamento
v-if="layoutReady && secaoAberta === 'pagamento'"
@close="fecharSecao"
/>
<MelissaConfiguracoes <MelissaConfiguracoes
v-if="layoutReady && isMelissaConfigRoute(secaoAberta)" v-if="layoutReady && isMelissaConfigRoute(secaoAberta)"
:secao-rota="secaoAberta" :secao-rota="secaoAberta"
File diff suppressed because it is too large Load Diff