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() { -