MelissaNegocio: pagina nativa 2-col com gamificacao + logomarca

Tira "Meu Negocio" do MelissaConfiguracoes (era embed cfg-negocio
-> Negociopage.vue) e cria a /melissa/negocio nativa Melissa.

Sidebar (mng-side):
- Card "Sua presenca" — gamificacao 7 niveis (Cadastro Basico ->
  Excelencia) + barra de progresso + 7 badges (Nomeado, Categorizado,
  Regularizado, Localizado, Acessivel, Identificado, Online) +
  dicas do que falta. Badges/dicas com ancora pra sessao.
- Card "Logomarca" — preview 96x96 (object-fit: contain) + upload/
  remover (bucket 'logos', max 2MB, PNG/SVG/JPG/WebP)

Main (50/50 desktop):
- Identidade: nome_fantasia* + razao_social + tipo_empresa* (Select 8 opcoes)
- Dados Fiscais: cnpj (mask 99.999.999/9999-99) + IE + IM
- Endereco: cep (mask + ViaCEP autofill onBlur) + logradouro + numero
  + complemento + bairro + cidade + estado (Select UFs BR)
- Contato: telefone (mask) + email (placeholder=" ") + site
- Redes Sociais: array com add/remove (name + url)

Validacao: nome_fantasia + tipo_empresa obrigatorios.
URL: /melissa/negocio. Compativel com /account/negocio (mesma tabela
company_profiles + bucket logos).

Wire-up:
- MelissaLayout: import + render
- 'negocio' sai de MELISSA_CONFIG_ALIASES, entra em MELISSA_NON_CONFIG_SLUGS
- SECOES.negocio descricao atualizada
- MelissaConfiguracoes: cfg-negocio removido de COMPONENT_MAP,
  ROUTE_ALIASES e do grupo "Conta" (so resta Seguranca agora)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Leonardo
2026-05-06 15:38:48 -03:00
parent 6395c4c0b6
commit 0c88cc2e72
3 changed files with 1551 additions and 13 deletions
+8 -9
View File
@@ -39,7 +39,6 @@ const emit = defineEmits(['close']);
// existir, senão a key como-é. // existir, senão a key como-é.
const ROUTE_ALIASES = { const ROUTE_ALIASES = {
aparencia: 'aparencia', aparencia: 'aparencia',
negocio: 'cfg-negocio',
seguranca: 'cfg-seguranca', seguranca: 'cfg-seguranca',
bloqueios: 'cfg-bloqueios' bloqueios: 'cfg-bloqueios'
}; };
@@ -97,9 +96,9 @@ const COMPONENT_MAP = {
'cfg-recursos-extras': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesRecursosExtrasPage.vue')), 'cfg-recursos-extras': defineAsyncComponent(() => import('@/layout/configuracoes/ConfiguracoesRecursosExtrasPage.vue')),
'cfg-auditoria': defineAsyncComponent(() => import('@/layout/configuracoes/AuditoriaPage.vue')), 'cfg-auditoria': defineAsyncComponent(() => import('@/layout/configuracoes/AuditoriaPage.vue')),
// Conta (páginas pessoais que vivem em /account/*) // Conta (páginas pessoais que vivem em /account/*)
// 'cfg-perfil' removido — virou pagina nativa MelissaPerfil em /melissa/perfil // 'cfg-perfil' removido — virou pagina nativa MelissaPerfil em /melissa/perfil
// 'cfg-plano' removido — virou pagina nativa MelissaPlano em /melissa/plano // 'cfg-plano' removido — virou pagina nativa MelissaPlano em /melissa/plano
'cfg-negocio': defineAsyncComponent(() => import('@/views/pages/account/Negociopage.vue')), // 'cfg-negocio' removido — virou pagina nativa MelissaNegocio em /melissa/negocio
'cfg-seguranca': defineAsyncComponent(() => import('@/views/pages/auth/SecurityPage.vue')) 'cfg-seguranca': defineAsyncComponent(() => import('@/views/pages/auth/SecurityPage.vue'))
}; };
@@ -149,13 +148,13 @@ const grupos = [
{ {
key: 'conta', key: 'conta',
label: 'Conta', label: 'Conta',
desc: 'Dados do negócio e segurança.', desc: 'Segurança da sua conta.',
icon: 'pi pi-user', icon: 'pi pi-user',
items: [ items: [
// "Meu Perfil" virou pagina nativa em /melissa/perfil (MelissaPerfil) // "Meu Perfil" virou pagina nativa em /melissa/perfil (MelissaPerfil)
// "Meu Plano" virou pagina nativa em /melissa/plano (MelissaPlano) // "Meu Plano" virou pagina nativa em /melissa/plano (MelissaPlano)
{ key: 'cfg-negocio', label: 'Meu Negócio', desc: 'Dados do negócio, faturamento e branding.', icon: 'pi pi-briefcase' }, // "Meu Negócio" virou pagina nativa em /melissa/negocio (MelissaNegocio)
{ key: 'cfg-seguranca', label: 'Segurança', desc: 'Senha, dispositivos confiáveis e sessões ativas.', icon: 'pi pi-shield' } { key: 'cfg-seguranca', label: 'Segurança', desc: 'Senha, dispositivos confiáveis e sessões ativas.', icon: 'pi pi-shield' }
] ]
}, },
{ {
+10 -4
View File
@@ -35,6 +35,7 @@ import MelissaGrupos from './MelissaGrupos.vue';
import MelissaConfiguracoes from './MelissaConfiguracoes.vue'; import MelissaConfiguracoes from './MelissaConfiguracoes.vue';
import MelissaPerfil from './MelissaPerfil.vue'; import MelissaPerfil from './MelissaPerfil.vue';
import MelissaPlano from './MelissaPlano.vue'; import MelissaPlano from './MelissaPlano.vue';
import MelissaNegocio from './MelissaNegocio.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';
@@ -169,8 +170,8 @@ const SECOES = {
perfil: { label: 'Meu Perfil', icon: 'pi pi-user', descricao: 'Identidade, contato, bio, redes — gamificacao no aside.' }, perfil: { label: 'Meu Perfil', icon: 'pi pi-user', descricao: 'Identidade, contato, bio, redes — gamificacao no aside.' },
// Pagina nativa do plano (MelissaPlano) — saiu do MelissaConfiguracoes // Pagina nativa do plano (MelissaPlano) — saiu do MelissaConfiguracoes
plano: { label: 'Meu Plano', icon: 'pi pi-credit-card', descricao: 'Assinatura, recursos liberados e historico de mudancas.' }, plano: { label: 'Meu Plano', icon: 'pi pi-credit-card', descricao: 'Assinatura, recursos liberados e historico de mudancas.' },
// Atalhos de Conta restantes — montam o MelissaConfiguracoes com a seção embed pré-selecionada // Pagina nativa do negocio (MelissaNegocio) — saiu do MelissaConfiguracoes
negocio: { label: 'Meu Negócio', icon: 'pi pi-briefcase', descricao: 'Dados do negócio, faturamento e branding.' }, negocio: { label: 'Meu Negócio', icon: 'pi pi-briefcase', descricao: 'Identidade, fiscal, endereco, contato, redes — gamificacao no aside.' },
seguranca: { label: 'Segurança', icon: 'pi pi-shield', descricao: 'Senha, dispositivos confiáveis e sessões.' }, seguranca: { label: 'Segurança', icon: 'pi pi-shield', descricao: 'Senha, dispositivos confiáveis e sessões.' },
// Onda 1 — pages embedadas via MelissaEmbed (1-coluna, hero glass) // Onda 1 — pages embedadas via MelissaEmbed (1-coluna, hero glass)
'financeiro': { label: 'Financeiro', icon: 'pi pi-wallet', descricao: 'Visão geral, recebíveis e indicadores.' }, 'financeiro': { label: 'Financeiro', icon: 'pi pi-wallet', descricao: 'Visão geral, recebíveis e indicadores.' },
@@ -197,13 +198,13 @@ const MELISSA_NON_CONFIG_SLUGS = new Set([
'tags', 'grupos', 'cadastros-recebidos', 'medicos', 'agendamentos-recebidos', 'tags', 'grupos', 'cadastros-recebidos', 'medicos', 'agendamentos-recebidos',
'link-externo', 'notificacoes', 'financeiro', 'financeiro-lancamentos', 'link-externo', 'notificacoes', 'financeiro', 'financeiro-lancamentos',
'documentos', 'documentos-templates', 'relatorios', 'documentos', 'documentos-templates', 'relatorios',
'perfil', 'plano', 'perfil', 'plano', 'negocio',
...MELISSA_EMBED_KEYS ...MELISSA_EMBED_KEYS
]); ]);
// Aliases "bonitos" + INLINE_KEYS reconhecidos pelo MelissaConfiguracoes. // Aliases "bonitos" + INLINE_KEYS reconhecidos pelo MelissaConfiguracoes.
// Mantidos sincronizados com o ROUTE_ALIASES/INLINE_KEYS de lá. // Mantidos sincronizados com o ROUTE_ALIASES/INLINE_KEYS de lá.
const MELISSA_CONFIG_ALIASES = new Set([ const MELISSA_CONFIG_ALIASES = new Set([
'aparencia', 'negocio', 'seguranca', 'bloqueios', 'aparencia', 'seguranca', 'bloqueios',
'fundo', 'relogio', 'cronometro' 'fundo', 'relogio', 'cronometro'
]); ]);
function isMelissaConfigRoute(slug) { function isMelissaConfigRoute(slug) {
@@ -2222,6 +2223,11 @@ function onKeydown(e) {
@close="fecharSecao" @close="fecharSecao"
/> />
<MelissaNegocio
v-if="layoutReady && secaoAberta === 'negocio'"
@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