diff --git a/servicios.html b/servicios.html index d2bf1e8..3067e35 100644 --- a/servicios.html +++ b/servicios.html @@ -999,73 +999,58 @@ } async function copyClientPortalLink() { - // Aseguramos que leemos los datos correctos - const phoneInput = document.getElementById('editPhone'); - const nameInput = document.getElementById('editName'); - const addrInput = document.getElementById('editAddr'); + // Cogemos los datos (funciona tanto si es input como texto normal) + const phoneEl = document.getElementById('editPhone') || document.getElementById('detPhone'); + const nameEl = document.getElementById('editName') || document.getElementById('detName'); + const addrEl = document.getElementById('editAddr') || document.getElementById('detAddrText'); + + const phone = phoneEl.value || phoneEl.innerText; + const name = nameEl.value || nameEl.innerText; + const addr = addrEl.value || addrEl.innerText; + const serviceId = document.getElementById('detId').value; // Añadimos el ID del servicio - const phone = phoneInput ? phoneInput.value : ""; - const name = nameInput ? nameInput.value : "Cliente"; - const addr = addrInput ? addrInput.value : ""; - - if (!phone || phone.trim() === "" || phone === "Sin Teléfono") { - showToast("⚠️ Falta el teléfono para generar el portal", "warning"); + if (!phone || phone === "Sin Teléfono") { + showToast("No hay un teléfono válido para este cliente.", "warning"); return; } const btn = document.getElementById('btnPortalLink'); const originalHtml = btn.innerHTML; - btn.innerHTML = ' Generando...'; - lucide.createIcons(); try { - // Limpiamos el teléfono antes de enviarlo - const cleanPhone = phone.replace(/\D/g, ""); - const res = await fetch(`${API_URL}/clients/ensure`, { method: 'POST', - headers: { - "Content-Type": "application/json", - "Authorization": `Bearer ${localStorage.getItem("token")}` - }, - body: JSON.stringify({ phone: cleanPhone, name: name, address: addr }) + headers: { "Content-Type": "application/json", "Authorization": `Bearer ${localStorage.getItem("token")}` }, + body: JSON.stringify({ phone: phone, name: name, address: addr }) }); - const data = await res.json(); if (data.ok && data.client && data.client.portal_token) { - const portalLink = `https://portal.integrarepara.es/?token=${data.client.portal_token}`; + const portalLink = `https://portal.integrarepara.es/?token=${data.client.portal_token}&service=${serviceId}`; - // Copiar al portapapeles - try { + // PLAN ANTI-BLOQUEO HTTP (Evita que el navegador bloquee la copia) + if (navigator.clipboard && window.isSecureContext) { await navigator.clipboard.writeText(portalLink); - btn.innerHTML = ' ¡Copiado!'; - btn.classList.replace('text-blue-600', 'text-emerald-600'); - btn.classList.replace('bg-blue-50', 'bg-emerald-50'); - btn.classList.replace('border-blue-100', 'border-emerald-200'); - showToast("✅ Enlace copiado al portapapeles"); - } catch (clipErr) { - // Plan B si el navegador bloquea el portapapeles automático - prompt("Copia este enlace manualmente:", portalLink); - btn.innerHTML = ' Generado'; + } else { + const textArea = document.createElement("textarea"); + textArea.value = portalLink; + document.body.appendChild(textArea); + textArea.select(); + document.execCommand('copy'); + textArea.remove(); } - setTimeout(() => { - btn.innerHTML = originalHtml; - btn.className = "text-[10px] font-black bg-blue-50 border border-blue-100 hover:bg-blue-600 hover:text-white text-blue-600 px-3 py-1.5 rounded-lg flex items-center gap-1.5 transition-all shadow-sm active:scale-95 shrink-0"; - lucide.createIcons(); - }, 3000); + btn.innerHTML = ' ¡Copiado!'; + showToast("Enlace copiado. ¡Listo para pegar en WhatsApp!"); + setTimeout(() => { btn.innerHTML = originalHtml; }, 3000); } else { - showToast("❌ Error al generar el token", "warning"); + showToast("Error generando token", "warning"); btn.innerHTML = originalHtml; - lucide.createIcons(); } } catch (error) { - console.error("Error obteniendo token:", error); - showToast("❌ Error de conexión", "warning"); + showToast("Error de conexión", "warning"); btn.innerHTML = originalHtml; - lucide.createIcons(); } }