From d1dced242f26472368da57ff0f1dece89732da72 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Wed, 6 May 2026 18:01:34 -0300 Subject: [PATCH] MelissaPerfil mobile: menu de configs inline no topo (sem drawer) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refator do menu mobile so no Perfil (validacao do padrao): - Remove o drawer slide-in da esquerda + backdrop + botao "Menu"/ "Configuracoes" no header - Renderiza INLINE no topo do .mpr-body em mobile (.mpr-mobile-config-menu) - A sidebar contextual (Sua evolucao + Avatar) tambem renderiza inline em sequencia, abaixo do menu global - O main com o form fica abaixo de tudo - Body em mobile vira flex column + overflow-y: auto (scroll externo unico pra toda a pagina) Drawer state (drawerOpen/toggle/fechar) e Teleport removidos do JS+template. Em desktop nada muda — MelissaLayout segue renderizando a sidebar global fixa na esquerda. Pendente: aplicar o mesmo pattern nas outras 8 paginas de config se o usuario validar este formato. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/layout/melissa/MelissaPerfil.vue | 176 +++++++++------------------ 1 file changed, 59 insertions(+), 117 deletions(-) diff --git a/src/layout/melissa/MelissaPerfil.vue b/src/layout/melissa/MelissaPerfil.vue index e57e86a..79e4958 100644 --- a/src/layout/melissa/MelissaPerfil.vue +++ b/src/layout/melissa/MelissaPerfil.vue @@ -21,6 +21,7 @@ import { useConfirm } from 'primevue/useconfirm'; import { useRouter } from 'vue-router'; import { supabase } from '@/lib/supabase/client'; import { useTenantStore } from '@/stores/tenantStore'; +import MelissaConfigSidebar from './MelissaConfigSidebar.vue'; // InputText/Select/Textarea/InputMask/Skeleton/Tag/Button: auto via PrimeVueResolver const emit = defineEmits(['close']); @@ -32,16 +33,11 @@ const tenantStore = useTenantStore(); const AVATAR_BUCKET = 'avatars'; -// ── Breakpoints + drawer ─────────────────────────────────── -const drawerOpen = ref(false); +// ── Breakpoints (sem drawer — em mobile o menu de configs renderiza +// inline no topo via MelissaConfigSidebar). ───────────────── const isMobile = ref(false); let _mqMobile = null; -function _onMqMobileChange(e) { - isMobile.value = e.matches; - if (!e.matches) drawerOpen.value = false; -} -function toggleDrawer() { drawerOpen.value = !drawerOpen.value; } -function fecharDrawer() { drawerOpen.value = false; } +function _onMqMobileChange(e) { isMobile.value = e.matches; } // ── Estado ───────────────────────────────────────────────── const loading = ref(true); @@ -420,10 +416,6 @@ const SECTION_BY_FIELD = { function scrollToSection(field) { const sec = SECTION_BY_FIELD[field]; if (!sec) return; - // Avatar fica na sidebar; em mobile mantem o drawer aberto (e nao scrolla - // o main, pq a sessao nao existe no main). - const isAvatar = sec === 'avatar'; - if (isMobile.value && !isAvatar) drawerOpen.value = false; nextTick(() => { const target = document.getElementById('mpr-sec-' + sec); if (target) target.scrollIntoView({ behavior: 'smooth', block: 'start' }); @@ -468,34 +460,8 @@ onBeforeUnmount(() => {