Update web/users.html
Browse files- web/users.html +39 -21
web/users.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
| 10 |
|
| 11 |
<link rel="stylesheet" href="css/simplebar.css">
|
| 12 |
<link href="https://fonts.googleapis.com/css2?family=Overpass:ital,wght@0,100;0,200;0,300;0,400;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
|
| 13 |
-
<
|
| 14 |
<link rel="stylesheet" href="css/app-light.css" id="lightTheme">
|
| 15 |
<link rel="stylesheet" href="css/app-dark.css" id="darkTheme" disabled>
|
| 16 |
</head>
|
|
@@ -20,7 +20,7 @@
|
|
| 20 |
<!-- Top Navigation -->
|
| 21 |
<nav class="topnav navbar navbar-light">
|
| 22 |
<button type="button" class="navbar-toggler text-muted mt-2 p-0 mr-3 collapseSidebar">
|
| 23 |
-
<i
|
| 24 |
</button>
|
| 25 |
|
| 26 |
<ul class="nav">
|
|
@@ -40,7 +40,7 @@
|
|
| 40 |
<!-- Sidebar -->
|
| 41 |
<aside class="sidebar-left border-right bg-white shadow" id="leftSidebar" data-simplebar>
|
| 42 |
<a href="#" class="btn collapseSidebar toggle-btn d-lg-none text-muted ml-2 mt-3" data-toggle="toggle">
|
| 43 |
-
<i
|
| 44 |
</a>
|
| 45 |
<nav class="vertnav navbar navbar-light">
|
| 46 |
<!-- nav bar -->
|
|
@@ -53,31 +53,31 @@
|
|
| 53 |
<ul class="navbar-nav flex-fill w-100 mb-2">
|
| 54 |
<li class="nav-item">
|
| 55 |
<a class="nav-link" href="./index.html">
|
| 56 |
-
<i
|
| 57 |
<span class="ml-3 item-text">Dashboard</span>
|
| 58 |
</a>
|
| 59 |
</li>
|
| 60 |
<li class="nav-item">
|
| 61 |
<a class="nav-link" href="./diagnosis.html">
|
| 62 |
-
<i
|
| 63 |
<span class="ml-3 item-text">Diagnóstico</span>
|
| 64 |
</a>
|
| 65 |
</li>
|
| 66 |
<li class="nav-item">
|
| 67 |
<a class="nav-link" href="./patients.html">
|
| 68 |
-
<i
|
| 69 |
<span class="ml-3 item-text">Pacientes</span>
|
| 70 |
</a>
|
| 71 |
</li>
|
| 72 |
<li class="nav-item">
|
| 73 |
<a class="nav-link" href="./historial-consultas.html">
|
| 74 |
-
<i
|
| 75 |
<span class="ml-3 item-text">Consultas</span>
|
| 76 |
</a>
|
| 77 |
</li>
|
| 78 |
<li class="nav-item active">
|
| 79 |
<a class="nav-link" href="./users.html">
|
| 80 |
-
<i
|
| 81 |
<span class="ml-3 item-text">Usuarios</span>
|
| 82 |
</a>
|
| 83 |
</li>
|
|
@@ -97,10 +97,10 @@
|
|
| 97 |
</div>
|
| 98 |
<div class="col-auto">
|
| 99 |
<button class="btn btn-primary" onclick="loadUsers()">
|
| 100 |
-
<i
|
| 101 |
</button>
|
| 102 |
<button class="btn btn-success ml-2" onclick="showAddUserModal()">
|
| 103 |
-
<i
|
| 104 |
</button>
|
| 105 |
</div>
|
| 106 |
</div>
|
|
@@ -109,7 +109,7 @@
|
|
| 109 |
<div class="card shadow">
|
| 110 |
<div class="card-header">
|
| 111 |
<h6 class="card-title mb-0">
|
| 112 |
-
<i
|
| 113 |
</h6>
|
| 114 |
</div>
|
| 115 |
<div class="card-body">
|
|
@@ -140,11 +140,11 @@
|
|
| 140 |
</div>
|
| 141 |
|
| 142 |
<div id="emptyState" class="text-center py-5" style="display: none;">
|
| 143 |
-
<i
|
| 144 |
<h6 class="text-muted">No se encontraron usuarios</h6>
|
| 145 |
<p class="text-muted">No hay usuarios registrados en el sistema.</p>
|
| 146 |
<button class="btn btn-primary" onclick="showAddUserModal()">
|
| 147 |
-
<i
|
| 148 |
</button>
|
| 149 |
</div>
|
| 150 |
</div>
|
|
@@ -161,7 +161,7 @@
|
|
| 161 |
<div class="modal-content">
|
| 162 |
<div class="modal-header">
|
| 163 |
<h5 class="modal-title" id="userModalLabel">
|
| 164 |
-
<i
|
| 165 |
</h5>
|
| 166 |
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
| 167 |
<span aria-hidden="true">×</span>
|
|
@@ -267,12 +267,12 @@
|
|
| 267 |
<button class="btn btn-sm btn-outline-primary"
|
| 268 |
onclick="editUser(${user.userID})"
|
| 269 |
title="Editar">
|
| 270 |
-
<i
|
| 271 |
</button>
|
| 272 |
<button class="btn btn-sm btn-outline-danger"
|
| 273 |
onclick="confirmDeleteUser(${user.userID})"
|
| 274 |
title="Eliminar">
|
| 275 |
-
<i
|
| 276 |
</button>
|
| 277 |
</div>
|
| 278 |
</td>
|
|
@@ -285,7 +285,7 @@
|
|
| 285 |
function showAddUserModal() {
|
| 286 |
$('#userForm')[0].reset();
|
| 287 |
$('#userId').val('');
|
| 288 |
-
$('#userModalLabel').html('<i
|
| 289 |
$('#userModal').modal('show');
|
| 290 |
}
|
| 291 |
|
|
@@ -300,7 +300,7 @@
|
|
| 300 |
$('#password').val('');
|
| 301 |
$('#confirmPassword').val('');
|
| 302 |
|
| 303 |
-
$('#userModalLabel').html('<i
|
| 304 |
$('#userModal').modal('show');
|
| 305 |
}
|
| 306 |
}
|
|
@@ -432,12 +432,12 @@
|
|
| 432 |
`<button class="btn btn-sm btn-outline-danger"
|
| 433 |
onclick="confirmDeleteUser(${user.userID})"
|
| 434 |
title="Eliminar">
|
| 435 |
-
<i
|
| 436 |
</button>` :
|
| 437 |
`<button class="btn btn-sm btn-outline-secondary"
|
| 438 |
disabled
|
| 439 |
title="No puedes eliminar tu propia cuenta">
|
| 440 |
-
<i
|
| 441 |
</button>`;
|
| 442 |
|
| 443 |
const row = `
|
|
@@ -458,7 +458,7 @@
|
|
| 458 |
<button class="btn btn-sm btn-outline-primary"
|
| 459 |
onclick="editUser(${user.userID})"
|
| 460 |
title="Editar">
|
| 461 |
-
<i
|
| 462 |
</button>
|
| 463 |
${deleteButton}
|
| 464 |
</div>
|
|
@@ -548,5 +548,23 @@
|
|
| 548 |
window.addEventListener('focus', centerWindow);
|
| 549 |
})();
|
| 550 |
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 551 |
</body>
|
| 552 |
</html>
|
|
|
|
| 10 |
|
| 11 |
<link rel="stylesheet" href="css/simplebar.css">
|
| 12 |
<link href="https://fonts.googleapis.com/css2?family=Overpass:ital,wght@0,100;0,200;0,300;0,400;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
|
| 13 |
+
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 14 |
<link rel="stylesheet" href="css/app-light.css" id="lightTheme">
|
| 15 |
<link rel="stylesheet" href="css/app-dark.css" id="darkTheme" disabled>
|
| 16 |
</head>
|
|
|
|
| 20 |
<!-- Top Navigation -->
|
| 21 |
<nav class="topnav navbar navbar-light">
|
| 22 |
<button type="button" class="navbar-toggler text-muted mt-2 p-0 mr-3 collapseSidebar">
|
| 23 |
+
<i data-feather="menu" class="navbar-toggler-icon"></i>
|
| 24 |
</button>
|
| 25 |
|
| 26 |
<ul class="nav">
|
|
|
|
| 40 |
<!-- Sidebar -->
|
| 41 |
<aside class="sidebar-left border-right bg-white shadow" id="leftSidebar" data-simplebar>
|
| 42 |
<a href="#" class="btn collapseSidebar toggle-btn d-lg-none text-muted ml-2 mt-3" data-toggle="toggle">
|
| 43 |
+
<i data-feather="x"><span class="sr-only"></span></i>
|
| 44 |
</a>
|
| 45 |
<nav class="vertnav navbar navbar-light">
|
| 46 |
<!-- nav bar -->
|
|
|
|
| 53 |
<ul class="navbar-nav flex-fill w-100 mb-2">
|
| 54 |
<li class="nav-item">
|
| 55 |
<a class="nav-link" href="./index.html">
|
| 56 |
+
<i data-feather="home" class="fe-16"></i>
|
| 57 |
<span class="ml-3 item-text">Dashboard</span>
|
| 58 |
</a>
|
| 59 |
</li>
|
| 60 |
<li class="nav-item">
|
| 61 |
<a class="nav-link" href="./diagnosis.html">
|
| 62 |
+
<i data-feather="eye" class="fe-16"></i>
|
| 63 |
<span class="ml-3 item-text">Diagnóstico</span>
|
| 64 |
</a>
|
| 65 |
</li>
|
| 66 |
<li class="nav-item">
|
| 67 |
<a class="nav-link" href="./patients.html">
|
| 68 |
+
<i data-feather="users" class="fe-16"></i>
|
| 69 |
<span class="ml-3 item-text">Pacientes</span>
|
| 70 |
</a>
|
| 71 |
</li>
|
| 72 |
<li class="nav-item">
|
| 73 |
<a class="nav-link" href="./historial-consultas.html">
|
| 74 |
+
<i data-feather="file-text" class="fe-16"></i>
|
| 75 |
<span class="ml-3 item-text">Consultas</span>
|
| 76 |
</a>
|
| 77 |
</li>
|
| 78 |
<li class="nav-item active">
|
| 79 |
<a class="nav-link" href="./users.html">
|
| 80 |
+
<i data-feather="user" class="fe-16"></i>
|
| 81 |
<span class="ml-3 item-text">Usuarios</span>
|
| 82 |
</a>
|
| 83 |
</li>
|
|
|
|
| 97 |
</div>
|
| 98 |
<div class="col-auto">
|
| 99 |
<button class="btn btn-primary" onclick="loadUsers()">
|
| 100 |
+
<i data-feather="refresh-cw" class="fe-16 mr-2"></i>Actualizar
|
| 101 |
</button>
|
| 102 |
<button class="btn btn-success ml-2" onclick="showAddUserModal()">
|
| 103 |
+
<i data-feather="plus" class="fe-16 mr-2"></i>Nuevo Usuario
|
| 104 |
</button>
|
| 105 |
</div>
|
| 106 |
</div>
|
|
|
|
| 109 |
<div class="card shadow">
|
| 110 |
<div class="card-header">
|
| 111 |
<h6 class="card-title mb-0">
|
| 112 |
+
<i data-feather="users" class="mr-2"></i>Lista de Usuarios
|
| 113 |
</h6>
|
| 114 |
</div>
|
| 115 |
<div class="card-body">
|
|
|
|
| 140 |
</div>
|
| 141 |
|
| 142 |
<div id="emptyState" class="text-center py-5" style="display: none;">
|
| 143 |
+
<i data-feather="users" class="fe-48 text-muted mb-3"></i>
|
| 144 |
<h6 class="text-muted">No se encontraron usuarios</h6>
|
| 145 |
<p class="text-muted">No hay usuarios registrados en el sistema.</p>
|
| 146 |
<button class="btn btn-primary" onclick="showAddUserModal()">
|
| 147 |
+
<i data-feather="plus" class="mr-1"></i>Crear Primer Usuario
|
| 148 |
</button>
|
| 149 |
</div>
|
| 150 |
</div>
|
|
|
|
| 161 |
<div class="modal-content">
|
| 162 |
<div class="modal-header">
|
| 163 |
<h5 class="modal-title" id="userModalLabel">
|
| 164 |
+
<i data-feather="user" class="mr-2"></i>Nuevo Usuario
|
| 165 |
</h5>
|
| 166 |
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
| 167 |
<span aria-hidden="true">×</span>
|
|
|
|
| 267 |
<button class="btn btn-sm btn-outline-primary"
|
| 268 |
onclick="editUser(${user.userID})"
|
| 269 |
title="Editar">
|
| 270 |
+
<i data-feather="edit" class="fe-12"></i>
|
| 271 |
</button>
|
| 272 |
<button class="btn btn-sm btn-outline-danger"
|
| 273 |
onclick="confirmDeleteUser(${user.userID})"
|
| 274 |
title="Eliminar">
|
| 275 |
+
<i data-feather="trash-2" class="fe-12"></i>
|
| 276 |
</button>
|
| 277 |
</div>
|
| 278 |
</td>
|
|
|
|
| 285 |
function showAddUserModal() {
|
| 286 |
$('#userForm')[0].reset();
|
| 287 |
$('#userId').val('');
|
| 288 |
+
$('#userModalLabel').html('<i data-feather="user-plus" class="mr-2"></i>Nuevo Usuario');
|
| 289 |
$('#userModal').modal('show');
|
| 290 |
}
|
| 291 |
|
|
|
|
| 300 |
$('#password').val('');
|
| 301 |
$('#confirmPassword').val('');
|
| 302 |
|
| 303 |
+
$('#userModalLabel').html('<i data-feather="edit" class="mr-2"></i>Editar Usuario');
|
| 304 |
$('#userModal').modal('show');
|
| 305 |
}
|
| 306 |
}
|
|
|
|
| 432 |
`<button class="btn btn-sm btn-outline-danger"
|
| 433 |
onclick="confirmDeleteUser(${user.userID})"
|
| 434 |
title="Eliminar">
|
| 435 |
+
<i data-feather="trash-2" class="fe-12"></i>
|
| 436 |
</button>` :
|
| 437 |
`<button class="btn btn-sm btn-outline-secondary"
|
| 438 |
disabled
|
| 439 |
title="No puedes eliminar tu propia cuenta">
|
| 440 |
+
<i data-feather="user-x" class="fe-12"></i>
|
| 441 |
</button>`;
|
| 442 |
|
| 443 |
const row = `
|
|
|
|
| 458 |
<button class="btn btn-sm btn-outline-primary"
|
| 459 |
onclick="editUser(${user.userID})"
|
| 460 |
title="Editar">
|
| 461 |
+
<i data-feather="edit" class="fe-12"></i>
|
| 462 |
</button>
|
| 463 |
${deleteButton}
|
| 464 |
</div>
|
|
|
|
| 548 |
window.addEventListener('focus', centerWindow);
|
| 549 |
})();
|
| 550 |
</script>
|
| 551 |
+
<script>
|
| 552 |
+
// Feather Icons: reemplaza <i data-feather="X"> con SVG inline
|
| 553 |
+
// Inmune a problemas de fuentes locales
|
| 554 |
+
function _initFeather() {
|
| 555 |
+
if (typeof feather !== 'undefined') feather.replace({ 'stroke-width': 1.8 });
|
| 556 |
+
}
|
| 557 |
+
document.addEventListener('DOMContentLoaded', _initFeather);
|
| 558 |
+
// Re-render al inyectar HTML dinámico (modals, cards, tablas)
|
| 559 |
+
var _fObserver = new MutationObserver(function(mutations) {
|
| 560 |
+
var needsRefresh = mutations.some(function(m) {
|
| 561 |
+
return m.addedNodes.length > 0;
|
| 562 |
+
});
|
| 563 |
+
if (needsRefresh) _initFeather();
|
| 564 |
+
});
|
| 565 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 566 |
+
_fObserver.observe(document.body, { childList: true, subtree: true });
|
| 567 |
+
});
|
| 568 |
+
</script>
|
| 569 |
</body>
|
| 570 |
</html>
|