From 9c6d77ec564197d4b9817060e23acb14955803be Mon Sep 17 00:00:00 2001 From: Leonardo Date: Wed, 6 May 2026 14:33:58 -0300 Subject: [PATCH] MelissaMenu: busca no topo do mm-side (estilo rail) Input com pi-search a esquerda + botao limpar a direita. Quando query tem texto, substitui a lista de categorias por uma lista flat de sub-itens que casam (com nome da categoria a direita como breadcrumb). Click no resultado dispara clicarSubItem (mesma logica de navegacao) e limpa o termo. Empty state pra "nenhum resultado". Visual segue mm-aside: bg --m-bg-soft, border --m-border, focus border --p-primary-color. Hover dos resultados usa color-mix primary 12% (mesmo pattern do .mm-foot-item). Co-Authored-By: Claude Opus 4.7 (1M context) --- src/layout/melissa/MelissaMenu.vue | 183 ++++++++++++++++++++++++++++- 1 file changed, 182 insertions(+), 1 deletion(-) diff --git a/src/layout/melissa/MelissaMenu.vue b/src/layout/melissa/MelissaMenu.vue index 385095d..e9867b2 100644 --- a/src/layout/melissa/MelissaMenu.vue +++ b/src/layout/melissa/MelissaMenu.vue @@ -188,6 +188,31 @@ function categoryKeyFor(itemKey) { const selectedKey = ref(categoryKeyFor(props.secaoAtiva) || CATEGORIAS[0].key); const copiado = ref(false); +// Busca — quando query tem texto, substitui a lista de categorias +// por uma lista flat de sub-itens que casam com o termo. +const query = ref(''); +const searchResults = computed(() => { + const q = query.value.trim().toLowerCase(); + if (!q) return []; + const out = []; + for (const cat of CATEGORIAS) { + for (const group of cat.groups) { + for (const item of group.items) { + if (item.tipo === 'link-cadastro') continue; + const label = (item.label || '').toLowerCase(); + if (label.includes(q)) { + out.push({ catLabel: cat.label, item }); + } + } + } + } + return out; +}); +function clicarResultado(item) { + clicarSubItem(item); + query.value = ''; +} + // Sincroniza o destaque com a sessao ativa — se o user troca de // "Lancamentos" pra "Agenda" sem fechar o menu, o selecionado // acompanha a sessao corrente. @@ -382,7 +407,48 @@ async function sair() { -
+ + + + +
+ +
+ Nenhum resultado pra "{{ query }}" +
+
+ + +