diff --git a/usuarios.html b/usuarios.html index 5026cf6..5604e70 100644 --- a/usuarios.html +++ b/usuarios.html @@ -175,7 +175,6 @@ }); } - // LÓGICA DE CARGA USANDO TU PROPIA BASE DE DATOS async function fetchMunicipios(provName) { const selMun = document.getElementById('selMunicipio'); const loader = document.getElementById('loaderMun'); @@ -183,49 +182,89 @@ selMun.disabled = true; if(!provName) return; - loader.classList.remove('hidden'); + if (loader) loader.classList.remove('hidden'); + try { - // Llamada a tu propio endpoint del server - async function fetchMunicipios(provName) { - const selMun = document.getElementById('selMunicipio'); - const loader = document.getElementById('loaderMun'); - - selMun.innerHTML = ''; - selMun.disabled = true; - if(!provName) return; - - if (loader) loader.classList.remove('hidden'); - - try { - // Llamamos a tu propia base de datos a través del servidor - const res = await fetch(`${API_URL}/api/geo/municipios/${provName}`, { - headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } - }); - const data = await res.json(); - - if (data.ok && data.municipios.length > 0) { - selMun.innerHTML = ''; - data.municipios.forEach(m => { - const opt = document.createElement('option'); - opt.value = m.municipio; - opt.dataset.cp = m.codigo_postal; - opt.innerText = `${m.municipio.toUpperCase()} (${m.codigo_postal})`; - selMun.appendChild(opt); - }); - selMun.innerHTML += ''; - selMun.disabled = false; - } else { - // Si la provincia no tiene datos aún en la DB, mostramos la opción manual - selMun.innerHTML = ''; - selMun.disabled = false; + const res = await fetch(`${API_URL}/api/geo/municipios/${provName}`, { + headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } + }); + const data = await res.json(); + + if (data.ok && data.municipios.length > 0) { + selMun.innerHTML = ''; + data.municipios.forEach(m => { + const opt = document.createElement('option'); + opt.value = m.municipio; + opt.dataset.cp = m.codigo_postal; + opt.innerText = `${m.municipio.toUpperCase()} (${m.codigo_postal})`; + selMun.appendChild(opt); + }); + selMun.innerHTML += ''; + selMun.disabled = false; + } else { + selMun.innerHTML = ''; + selMun.disabled = false; + } + } catch (e) { + console.error("Error de conexión con la DB geográfica"); + } finally { + if (loader) loader.classList.add('hidden'); + lucide.createIcons(); + } + } + + function autoFillCP(munName) { + const sel = document.getElementById('selMunicipio'); + const selectedOpt = sel.options[sel.selectedIndex]; + if (munName === "OTRO") { + const customMun = prompt("Nombre del Municipio:"); + if (customMun) { + const newOpt = document.createElement('option'); + newOpt.value = customMun.toUpperCase(); + newOpt.innerText = customMun.toUpperCase(); + newOpt.selected = true; + sel.appendChild(newOpt); + document.getElementById('cpInput').focus(); + } + return; + } + if(selectedOpt && selectedOpt.dataset.cp) { + document.getElementById('cpInput').value = selectedOpt.dataset.cp; + } + } + + function addZoneToUser() { + const prov = document.getElementById('selProvince').value; + const mun = document.getElementById('selMunicipio').value; + const cp = document.getElementById('cpInput').value.trim(); + if (!prov || !mun || !cp || mun === "OTRO") { showToast("Completa los datos de zona", true); return; } + + if (tempUserZones.some(z => z.city === mun && z.cps === cp)) { + showToast("Esta zona ya está añadida", true); return; + } + + tempUserZones.push({ province: prov, city: mun, cps: cp }); + renderTempZones(); + document.getElementById('cpInput').value = ""; + } + + function removeTempZone(idx) { + tempUserZones.splice(idx, 1); + renderTempZones(); + } + + function renderTempZones() { + const area = document.getElementById('userZonesArea'); + area.innerHTML = tempUserZones.length === 0 ? '
Sin zonas añadidas...
' : ""; + tempUserZones.forEach((z, i) => { + area.innerHTML += ` + + ${z.city} (${z.cps}) + + `; + }); + lucide.createIcons(); } - } catch (e) { - console.error("Error de conexión con la DB geográfica"); - } finally { - if (loader) loader.classList.add('hidden'); - lucide.createIcons(); - } -} async function fetchGuilds() { try { @@ -361,7 +400,7 @@ const area = document.getElementById('guildsCheckboxArea'); area.innerHTML = availableGuilds.length === 0 ? 'No hay gremios registrados...
' : ""; availableGuilds.forEach(g => { - area.innerHTML += ``; + area.innerHTML += ``; }); }