/** * Script: Consulta Tabela FIPE * Versão: 69.0 */ jQuery(document).ready(function($) { let tipoGlobal = 1; function loadMarcas() { $('#fipe-marca').html('').prop('disabled', true); $('#fipe-modelo, #fipe-ano').prop('disabled', true).html(''); $('#fipe-result-box').hide(); $.getJSON(fipe_vars.ajax_url, { action: 'get_marcas', tipo: tipoGlobal }, function(data) { let html = ''; if(data && data.length > 0) { data.forEach(m => html += ``); } $('#fipe-marca').prop('disabled', false).html(html); }); } // Busca Inteligente: Identifica Marca e Modelo no mesmo campo $('#fipe-search').on('input', function() { const fullQuery = $(this).val().toLowerCase().trim(); if (fullQuery.length < 3) return; const parts = fullQuery.split(' '); const marcaQuery = parts[0]; // Primeira palavra assume-se Marca const modeloQuery = parts.slice(1).join(' '); // Resto assume-se Modelo // 1. Tenta selecionar a Marca $("#fipe-marca option").each(function() { const marcaText = $(this).text().toLowerCase(); if (marcaText.includes(marcaQuery) && $('#fipe-marca').val() !== $(this).val()) { $('#fipe-marca').val($(this).val()).trigger('change'); // 2. Se houver uma segunda parte (modelo), aguarda o carregamento para selecionar if (modeloQuery.length > 2) { const checkModelos = setInterval(function() { if (!$('#fipe-modelo').prop('disabled')) { $("#fipe-modelo option").each(function() { if ($(this).text().toLowerCase().includes(modeloQuery)) { $('#fipe-modelo').val($(this).val()).trigger('change'); clearInterval(checkModelos); } }); } }, 500); // Para de tentar após 5 segundos para não travar setTimeout(() => clearInterval(checkModelos), 5000); } } }); }); $('.cat-btn').on('click', function(e) { e.preventDefault(); $('.cat-btn').removeClass('active'); $(this).addClass('active'); tipoGlobal = parseInt($(this).data('type')); $('#fipe-search').val(''); loadMarcas(); }); loadMarcas(); $('#fipe-marca').on('change', function() { const marcaCod = $(this).val(); if(!marcaCod) return; $('#fipe-modelo').prop('disabled', true).html(''); $('#fipe-result-box').hide(); $.getJSON(fipe_vars.ajax_url, { action: 'get_modelos', marca_cod: marcaCod, tipo: tipoGlobal }, function(data) { let html = ''; if(data && data.length > 0) { data.forEach(m => html += ``); $('#fipe-modelo').prop('disabled', false).html(html); } }); }); $('#fipe-modelo').on('change', function() { const marcaCod = $('#fipe-marca').val(); const modeloCod = $(this).val(); if(!modeloCod) return; $('#fipe-ano').prop('disabled', true).html(''); let slug = (tipoGlobal === 2) ? 'motos' : ((tipoGlobal === 3) ? 'caminhoes' : 'carros'); const path = slug + '/marcas/' + marcaCod + '/modelos/' + modeloCod + '/anos'; $.getJSON(fipe_vars.ajax_url, { action: 'get_fipe_proxy', path: path }, function(res) { let html = ''; if(Array.isArray(res)) { res.filter(a => !a.nome.includes("32000")).sort((a,b) => parseInt(b.nome)-parseInt(a.nome)).forEach(a => { html += ``; }); $('#fipe-ano').prop('disabled', false).html(html); } }); }); $('#fipe-ano').on('change', function() { const marcaCod = $('#fipe-marca').val(); const modeloCod = $('#fipe-modelo').val(); const anoCod = $(this).val(); if(!anoCod) return; let slug = (tipoGlobal === 2) ? 'motos' : ((tipoGlobal === 3) ? 'caminhoes' : 'carros'); const path = slug + '/marcas/' + marcaCod + '/modelos/' + modeloCod + '/anos/' + anoCod; $.getJSON(fipe_vars.ajax_url, { action: 'get_fipe_proxy', path: path }, function(res) { const preco = res.Preco || res.valor || res.Valor; if (preco) { $('#final-price').text(preco); $('#final-vehicle-main').text(res.Marca + " " + res.Modelo); $('#final-vehicle-info').text("Ano: " + res.AnoModelo + " | Combustível: " + res.Combustivel + " | Código FIPE: " + res.CodigoFipe); $('#fipe-ref-date').text("Mês de referência: " + res.MesReferencia); $('#fipe-result-box').fadeIn(); } }); }); $('#fipe-print-btn').on('click', function() { window.print(); }); $('#fipe-reset-btn').on('click', function() { $('#fipe-search').val(''); loadMarcas(); }); });