From fd8cd2af29e5bdbfa41aaefa81e779fe42359152 Mon Sep 17 00:00:00 2001 From: marsalva Date: Sun, 15 Feb 2026 18:09:41 +0000 Subject: [PATCH] Actualizar usuarios.html --- usuarios.html | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/usuarios.html b/usuarios.html index 9f50b89..53ffe28 100644 --- a/usuarios.html +++ b/usuarios.html @@ -401,15 +401,18 @@ }); } - function renderUsersTable() { + function renderUsersTable() { const tbody = document.getElementById('usersListBody'); + if (!tbody) return; + 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); + // Detectamos si el operario está activo o de baja + const isActive = u.status === 'active'; const uGuildNames = (u.guilds || []).map(gid => availableGuilds.find(ag => ag.id === gid)?.name).filter(Boolean).join(", "); + // Agrupación visual de zonas 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); @@ -423,7 +426,7 @@ `; }).join("") || 'Sin zona'; - // Aplicamos clases CSS de "grisado" si no está activo + // Aplicamos el estilo gris y opacidad si es baja temporal tbody.innerHTML += ` @@ -433,7 +436,7 @@ ${u.full_name} ${u.email} - ${!isActive ? '[ Baja Temporal ]' : ''} + ${!isActive ? '[ Baja Temporal ]' : ''} ${u.phone} @@ -457,6 +460,29 @@ lucide.createIcons(); // Importante para que se vea el candado } +// Nueva función para el botón de Baja/Activar +async function toggleUserStatus(id, currentStatus) { + const newStatus = currentStatus === 'active' ? 'inactive' : 'active'; + const msg = newStatus === 'active' ? "¿Reactivar operario?" : "¿Dar de baja temporal?"; + if(!confirm(msg)) 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 }) + }); + const data = await res.json(); + if(data.ok) { + showToast(newStatus === 'active' ? "Operario activado" : "Operario en baja temporal"); + fetchUsers(); + } + } catch(e) { showToast("Error de conexión", true); } +} + // 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';