Consulte el listado de documentos disponibles, incluyendo archivos y descripciones asociados, publicados por el sistema.
'; return; } let html = `
| Grupo | Código | Esquema | Documento | Acción |
`; html += items.map(doc => { return ` | ${escapeHtml(doc.grupo || '-')} | ${escapeHtml(doc.codigo || '-')} | ${escapeHtml(doc.esquema || doc.tipo || '-')} | ${escapeHtml(doc.nombre_original || '-')} | ${fileIconByExt(doc.nombre_original)} Descargar |
`; }).join(''); html += `
`; resultsEl.innerHTML = html; } // ── PAGINACIÓN ─────────────────────────── function renderPagination(data) { const current = data.current_page; const last = data.last_page; const total = data.total; document.getElementById('total_results').textContent = `Mostrando ${data.from ?? 0}–${data.to ?? 0} de ${total} resultado(s)`; if (last <= 1) { paginationEl.innerHTML = ''; return; } let html = ''; if (current > 1) html += `
`; if (current > 1) html += `
`; const range = 3; for (let p = Math.max(1, current - range); p <= Math.min(last, current + range); p++) { html += `
`; } if (current < last) html += `
`; if (current < last) html += `
`; paginationEl.innerHTML = html; paginationEl.querySelectorAll('button[data-p]').forEach(btn => { btn.addEventListener('click', () => fetchPage(parseInt(btn.dataset.p))); }); } // ── FETCH ──────────────────────────────── function fetchPage(page) { resultsEl.innerHTML = ''; paginationEl.innerHTML = ''; document.getElementById('total_results').textContent = ''; showLoader(true); // Capturar valores de los filtros const grupo = encodeURIComponent(document.getElementById('grupo').value.trim()); const codigo = encodeURIComponent(document.getElementById('codigo').value.trim()); const esquema = encodeURIComponent(document.getElementById('esquema').value.trim()); const documento = encodeURIComponent(document.getElementById('documento').value.trim()); let url = `${apiBase}/buscardoc_api?per_page=${perPage}&page=${page}`; if (grupo && grupo !== '') url += `&grupo=${grupo}`; if (codigo && codigo !== '') url += `&codigo=${codigo}`; if (esquema && esquema !== '') url += `&esquema=${esquema}`; if (documento && documento !== '') url += `&documento=${documento}`; fetch(url) .then(r => r.json()) .then(data => { renderResults(data.data || []); renderPagination(data); }) .catch(() => { resultsEl.innerHTML = '
Error al cargar los datos.
'; }) .finally(() => showLoader(false)); } // ── EVENTOS ────────────────────────────── // Función debounce para evitar búsquedas excesivas function debounce(func, wait) { let timeout; return function executedFunction(...args) { const later = () => { clearTimeout(timeout); func(...args); }; clearTimeout(timeout); timeout = setTimeout(later, wait); }; } // Búsqueda automática con debounce para inputs de texto const searchInputs = [document.getElementById('codigo'), document.getElementById('documento')]; searchInputs.forEach(input => { input.addEventListener('input', debounce(() => fetchPage(1), 500)); }); // Búsqueda automática inmediata para select y grupo document.getElementById('grupo').addEventListener('change', () => fetchPage(1)); document.getElementById('esquema').addEventListener('change', () => fetchPage(1)); // Mantener el botón buscar por si acaso buscarBtn.addEventListener('click', () => fetchPage(1)); // Presionar Enter en cualquier input dispara la búsqueda (opcional, ya que es automático) [document.getElementById('grupo'), document.getElementById('codigo'), document.getElementById('esquema'), document.getElementById('documento')] .forEach(input => { input.addEventListener('keydown', e => { if (e.key === 'Enter') { e.preventDefault(); fetchPage(1); } }); }); limpiarBtn.addEventListener('click', () => { document.getElementById('grupo').value = ''; document.getElementById('codigo').value = ''; document.getElementById('esquema').value = ''; document.getElementById('documento').value = ''; fetchPage(1); }); // Carga inicial fetchPage(1); })(); function fileIconByExt(filename) { if (!filename) return '
'; const ext = filename.split('.').pop().toLowerCase(); if (ext === 'pdf') { return '
'; } if (ext === 'doc' || ext === 'docx') { return '
'; } if (ext === 'xls' || ext === 'xlsx') { return '
'; } if (ext === 'jpg' || ext === 'png' || ext === 'gif' || ext === 'jpeg') { return '
'; } return '
'; }