From 9bfa9417e7323089d94ce95d04c1a3ddfb4c9eec Mon Sep 17 00:00:00 2001 From: marsalva Date: Sun, 15 Feb 2026 17:51:41 +0000 Subject: [PATCH] Actualizar usuarios.html --- usuarios.html | 98 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 73 insertions(+), 25 deletions(-) diff --git a/usuarios.html b/usuarios.html index 0382d5e..9f50b89 100644 --- a/usuarios.html +++ b/usuarios.html @@ -401,34 +401,82 @@ }); } - function renderUsersTable() { - const tbody = document.getElementById('usersListBody'); - tbody.innerHTML = currentUsers.length === 0 ? `Cargando equipo...` : ""; - currentUsers.forEach(u => { - const uGuildNames = (u.guilds || []).map(gid => availableGuilds.find(ag => ag.id === gid)?.name).filter(Boolean).join(", "); - const groupedZones = (u.zones || []).reduce((acc, curr) => { - if (!acc[curr.city]) acc[curr.city] = []; - if (!acc[curr.city].includes(curr.cps)) acc[curr.city].push(curr.cps); - return acc; - }, {}); + function renderUsersTable() { + const tbody = document.getElementById('usersListBody'); + tbody.innerHTML = currentUsers.length === 0 ? `Cargando equipo...` : ""; + + currentUsers.forEach(u => { + // Determinamos si el usuario está activo basándonos en el campo 'status' del servidor + const isActive = (u.status === 'active' || u.status === null); + const uGuildNames = (u.guilds || []).map(gid => availableGuilds.find(ag => ag.id === gid)?.name).filter(Boolean).join(", "); + + const groupedZones = (u.zones || []).reduce((acc, curr) => { + if (!acc[curr.city]) acc[curr.city] = []; + if (!acc[curr.city].includes(curr.cps)) acc[curr.city].push(curr.cps); + return acc; + }, {}); - const uZonesHtml = Object.keys(groupedZones).map(city => { - return `
📍 ${city} (${groupedZones[city].join(", ")})
`; - }).join("") || 'Sin zona'; + const uZonesHtml = Object.keys(groupedZones).map(city => { + return `
+ 📍 ${city} + (${groupedZones[city].join(", ")}) +
`; + }).join("") || 'Sin zona'; - tbody.innerHTML += ` - -
${u.full_name}${u.email}
- ${u.phone} - ${u.role}

${uGuildNames || '-'}

-
${uZonesHtml}
- - - - - `; - }); + // Aplicamos clases CSS de "grisado" si no está activo + tbody.innerHTML += ` + + +
+
+ ${!isActive ? '' : ''} + ${u.full_name} +
+ ${u.email} + ${!isActive ? '[ Baja Temporal ]' : ''} +
+ + ${u.phone} + + ${u.role} +

${uGuildNames || '-'}

+ +
${uZonesHtml}
+ + + + + + + + `; + }); + lucide.createIcons(); // Importante para que se vea el candado +} + +// Asegúrate de tener también esta función para que los botones de la tabla funcionen +async function toggleUserStatus(id, currentStatus) { + const newStatus = currentStatus === 'active' ? 'inactive' : 'active'; + if(!confirm(`¿Deseas cambiar el estado de este operario?`)) return; + + try { + const res = await fetch(`${API_URL}/admin/users/${id}/status`, { + method: 'PATCH', + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${localStorage.getItem("token")}` + }, + body: JSON.stringify({ status: newStatus }) + }); + if(await res.json()) { + showToast(newStatus === 'active' ? "Operario activado" : "Operario en baja temporal"); + fetchUsers(); } + } catch(e) { showToast("Error", true); } +} function showToast(msg, err=false){ const t=document.getElementById('toast'), m=document.getElementById('toastMsg');