From 95ad3401ab2bd3810a05a0518e1496313463266a Mon Sep 17 00:00:00 2001 From: marsalva Date: Mon, 16 Mar 2026 08:03:24 +0000 Subject: [PATCH] Actualizar usuarios.html --- usuarios.html | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/usuarios.html b/usuarios.html index 8145b3a..710bb2a 100644 --- a/usuarios.html +++ b/usuarios.html @@ -322,8 +322,31 @@ if(!manualCP) { showToast("Escribe el CP manual en el cuadro", true); return; } if(!manualCityName) { showToast("Falta el nombre de la población", true); return; } - // Si ha puesto varios separados por coma o guion - const cpsArray = manualCP.split(/[,-\s]+/).filter(c => c.trim() !== ""); + // 🚀 NUEVO: Soporte real para rangos (ej: 11201-11205) + let cpsArray = []; + // Separamos por comas o espacios (quitamos el guion del split) + const partes = manualCP.split(/[, \n]+/).filter(c => c.trim() !== ""); + + partes.forEach(parte => { + if (parte.includes('-')) { + // Si hay un guion, calculamos todos los números que hay entre medias + const [start, end] = parte.split('-'); + const numStart = parseInt(start, 10); + const numEnd = parseInt(end, 10); + + if (!isNaN(numStart) && !isNaN(numEnd) && numStart <= numEnd) { + for (let i = numStart; i <= numEnd; i++) { + // Aseguramos que siempre tengan 5 cifras (ej: 08001) + cpsArray.push(String(i).padStart(5, '0')); + } + } else { + cpsArray.push(parte); // Fallback por si lo escriben mal + } + } else { + // Si es un número suelto, lo metemos tal cual + cpsArray.push(parte); + } + }); cpsArray.forEach(cp => { if (!tempUserZones.some(z => z.city === manualCityName && z.cps === cp)) { @@ -346,11 +369,6 @@ document.getElementById('cpInput').value = ""; } - function removeTempCity(cityName) { - tempUserZones = tempUserZones.filter(z => z.city !== cityName); - renderTempZones(); - } - function renderTempZones() { const area = document.getElementById('userZonesArea'); if(!area) return;