Actualizar usuarios.html
This commit is contained in:
@@ -466,18 +466,25 @@
|
|||||||
|
|
||||||
let roleBadge = "OP. NORMAL";
|
let roleBadge = "OP. NORMAL";
|
||||||
let roleColor = "bg-blue-50 text-blue-600 border-blue-100";
|
let roleColor = "bg-blue-50 text-blue-600 border-blue-100";
|
||||||
|
let toggleRoleBtnText = "Bolsa Off"; // Botón para cambiar rol
|
||||||
|
|
||||||
if (u.role === 'operario_cerrado') {
|
if (u.role === 'operario_cerrado') {
|
||||||
roleBadge = "OP. CERRADO (SIN BOLSA)";
|
roleBadge = "OP. CERRADO";
|
||||||
roleColor = "bg-amber-50 text-amber-600 border-amber-200";
|
roleColor = "bg-amber-50 text-amber-600 border-amber-200";
|
||||||
|
toggleRoleBtnText = "Bolsa On";
|
||||||
} else if (u.role === 'admin') {
|
} else if (u.role === 'admin') {
|
||||||
roleBadge = "ADMINISTRADOR";
|
roleBadge = "ADMINISTRADOR";
|
||||||
roleColor = "bg-purple-50 text-purple-600 border-purple-200";
|
roleColor = "bg-purple-50 text-purple-600 border-purple-200";
|
||||||
|
toggleRoleBtnText = ""; // Los admin no tienen esto
|
||||||
} else if (u.role === 'facturacion') {
|
} else if (u.role === 'facturacion') {
|
||||||
roleBadge = "FACTURACIÓN";
|
roleBadge = "FACTURACIÓN";
|
||||||
roleColor = "bg-emerald-50 text-emerald-600 border-emerald-200";
|
roleColor = "bg-emerald-50 text-emerald-600 border-emerald-200";
|
||||||
|
toggleRoleBtnText = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Generar el botón de alternar bolsa si aplica
|
||||||
|
const toggleRoleHtml = toggleRoleBtnText ? `<button onclick="toggleUserRole(${u.id}, '${u.role}')" class="text-purple-600 hover:text-white hover:bg-purple-600 border-purple-200 font-black text-[9px] uppercase tracking-widest border px-3 py-1.5 rounded-lg transition-all shadow-sm">${toggleRoleBtnText}</button>` : '';
|
||||||
|
|
||||||
tbody.innerHTML += `
|
tbody.innerHTML += `
|
||||||
<tr class="${isActive ? 'bg-white' : 'bg-slate-50 opacity-70'} hover:bg-slate-50/80 transition-colors border-b border-slate-100">
|
<tr class="${isActive ? 'bg-white' : 'bg-slate-50 opacity-70'} hover:bg-slate-50/80 transition-colors border-b border-slate-100">
|
||||||
<td class="p-4">
|
<td class="p-4">
|
||||||
@@ -497,6 +504,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="p-4 text-left"><div class="max-h-24 overflow-y-auto no-scrollbar">${uZonesHtml}</div></td>
|
<td class="p-4 text-left"><div class="max-h-24 overflow-y-auto no-scrollbar">${uZonesHtml}</div></td>
|
||||||
<td class="p-4 text-right space-x-2">
|
<td class="p-4 text-right space-x-2">
|
||||||
|
${toggleRoleHtml}
|
||||||
<button onclick="editUser(${u.id})" class="text-blue-500 hover:text-white hover:bg-blue-500 font-black text-[9px] uppercase tracking-widest border border-blue-200 px-3 py-1.5 rounded-lg transition-all shadow-sm">Editar</button>
|
<button onclick="editUser(${u.id})" class="text-blue-500 hover:text-white hover:bg-blue-500 font-black text-[9px] uppercase tracking-widest border border-blue-200 px-3 py-1.5 rounded-lg transition-all shadow-sm">Editar</button>
|
||||||
<button onclick="toggleUserStatus(${u.id}, '${u.status || 'active'}')" class="${isActive ? 'text-amber-600 hover:bg-amber-500 hover:text-white border-amber-200' : 'text-emerald-600 hover:bg-emerald-500 hover:text-white border-emerald-200'} font-black text-[9px] uppercase tracking-widest border px-3 py-1.5 rounded-lg transition-all shadow-sm">
|
<button onclick="toggleUserStatus(${u.id}, '${u.status || 'active'}')" class="${isActive ? 'text-amber-600 hover:bg-amber-500 hover:text-white border-amber-200' : 'text-emerald-600 hover:bg-emerald-500 hover:text-white border-emerald-200'} font-black text-[9px] uppercase tracking-widest border px-3 py-1.5 rounded-lg transition-all shadow-sm">
|
||||||
${isActive ? 'Pausar' : 'Activar'}
|
${isActive ? 'Pausar' : 'Activar'}
|
||||||
@@ -508,6 +516,44 @@
|
|||||||
lucide.createIcons();
|
lucide.createIcons();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Nueva función para alternar rápidamente el rol de un operario
|
||||||
|
async function toggleUserRole(id, currentRole) {
|
||||||
|
const newRole = currentRole === 'operario' ? 'operario_cerrado' : 'operario';
|
||||||
|
const msg = newRole === 'operario_cerrado' ? "¿Quitar acceso a la Bolsa Libre a este operario?" : "¿Devolver acceso a la Bolsa Libre a este operario?";
|
||||||
|
if(!confirm(msg)) return;
|
||||||
|
|
||||||
|
// Recogemos el usuario para enviar el objeto completo (el endpoint PUT lo requiere)
|
||||||
|
const user = currentUsers.find(u => u.id === id);
|
||||||
|
if (!user) return;
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
fullName: user.full_name,
|
||||||
|
email: user.email,
|
||||||
|
phone: user.phone,
|
||||||
|
role: newRole,
|
||||||
|
guilds: user.guilds || [],
|
||||||
|
zones: user.zones || []
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
const res = await fetch(`${API_URL}/admin/users/${id}`, {
|
||||||
|
method: 'PUT',
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"Authorization": `Bearer ${localStorage.getItem("token")}`
|
||||||
|
},
|
||||||
|
body: JSON.stringify(data)
|
||||||
|
});
|
||||||
|
const json = await res.json();
|
||||||
|
if(json.ok) {
|
||||||
|
showToast(newRole === 'operario_cerrado' ? "Acceso a bolsa denegado" : "Acceso a bolsa permitido");
|
||||||
|
fetchUsers();
|
||||||
|
} else {
|
||||||
|
showToast("Error al cambiar permisos", true);
|
||||||
|
}
|
||||||
|
} catch(e) { showToast("Error de conexión", true); }
|
||||||
|
}
|
||||||
|
|
||||||
async function toggleUserStatus(id, currentStatus) {
|
async function toggleUserStatus(id, currentStatus) {
|
||||||
const newStatus = currentStatus === 'active' ? 'inactive' : 'active';
|
const newStatus = currentStatus === 'active' ? 'inactive' : 'active';
|
||||||
const msg = newStatus === 'active' ? "¿Reactivar operario para que reciba avisos?" : "¿Dar de baja temporal? (No verá avisos)";
|
const msg = newStatus === 'active' ? "¿Reactivar operario para que reciba avisos?" : "¿Dar de baja temporal? (No verá avisos)";
|
||||||
|
|||||||
Reference in New Issue
Block a user