fix: selección de empresa/convenio rota por JSON en atributo HTML
JSON.stringify(e) dentro de onmousedown="..." producía comillas dobles que el parser HTML interpretaba como cierre del atributo, dejando la función con un objeto incompleto. Ahora los resultados se guardan en _empresaResultados[] y el handler pasa solo el índice numérico. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
c22c38a58f
commit
123ab0e034
@@ -2142,6 +2142,7 @@ function resetCheckboxes() {
|
|||||||
// ── Empresa / Convenio ────────────────────────────────────────
|
// ── Empresa / Convenio ────────────────────────────────────────
|
||||||
let _empresaActiva = null;
|
let _empresaActiva = null;
|
||||||
let _empresaBusqTimer;
|
let _empresaBusqTimer;
|
||||||
|
let _empresaResultados = [];
|
||||||
|
|
||||||
function buscarEmpresa() {
|
function buscarEmpresa() {
|
||||||
clearTimeout(_empresaBusqTimer);
|
clearTimeout(_empresaBusqTimer);
|
||||||
@@ -2154,12 +2155,12 @@ async function _doEmpresaSearch() {
|
|||||||
if (q.length < 2) { ul.classList.add('d-none'); return; }
|
if (q.length < 2) { ul.classList.add('d-none'); return; }
|
||||||
const res = await fetch(`${BASE_URL_API_LAB}empresas.php?action=list&search=${encodeURIComponent(q)}&activa=1&limit=10`);
|
const res = await fetch(`${BASE_URL_API_LAB}empresas.php?action=list&search=${encodeURIComponent(q)}&activa=1&limit=10`);
|
||||||
const j = await res.json();
|
const j = await res.json();
|
||||||
const list = j.empresas || [];
|
_empresaResultados = j.empresas || [];
|
||||||
if (!list.length) { ul.innerHTML = '<li class="px-3 py-2 text-muted small">Sin resultados</li>'; ul.classList.remove('d-none'); return; }
|
if (!_empresaResultados.length) { ul.innerHTML = '<li class="px-3 py-2 text-muted small">Sin resultados</li>'; ul.classList.remove('d-none'); return; }
|
||||||
ul.innerHTML = list.map(e => `
|
ul.innerHTML = _empresaResultados.map((e, i) => `
|
||||||
<li class="px-3 py-2 cursor-pointer hover-bg"
|
<li class="px-3 py-2 cursor-pointer hover-bg"
|
||||||
style="cursor:pointer;border-bottom:1px solid #f1f5f9"
|
style="cursor:pointer;border-bottom:1px solid #f1f5f9"
|
||||||
onmousedown="seleccionarEmpresa(${JSON.stringify(e)})">
|
onmousedown="_seleccionarEmpresaIdx(${i})">
|
||||||
<div class="fw-semibold small">${escHtml(e.nombre)}</div>
|
<div class="fw-semibold small">${escHtml(e.nombre)}</div>
|
||||||
<div class="text-muted" style="font-size:.75rem">NIT ${escHtml(e.nit)}${e.tarifa_nombre ? ' · ' + escHtml(e.tarifa_nombre) : ''}</div>
|
<div class="text-muted" style="font-size:.75rem">NIT ${escHtml(e.nit)}${e.tarifa_nombre ? ' · ' + escHtml(e.tarifa_nombre) : ''}</div>
|
||||||
</li>
|
</li>
|
||||||
@@ -2167,6 +2168,10 @@ async function _doEmpresaSearch() {
|
|||||||
ul.classList.remove('d-none');
|
ul.classList.remove('d-none');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _seleccionarEmpresaIdx(i) {
|
||||||
|
seleccionarEmpresa(_empresaResultados[i]);
|
||||||
|
}
|
||||||
|
|
||||||
async function seleccionarEmpresa(e) {
|
async function seleccionarEmpresa(e) {
|
||||||
document.getElementById('empresa-resultados').classList.add('d-none');
|
document.getElementById('empresa-resultados').classList.add('d-none');
|
||||||
document.getElementById('empresa-buscador').classList.add('d-none');
|
document.getElementById('empresa-buscador').classList.add('d-none');
|
||||||
|
|||||||
Reference in New Issue
Block a user