Update web/historial-consultas.html
Browse files- web/historial-consultas.html +67 -84
web/historial-consultas.html
CHANGED
|
@@ -13,7 +13,7 @@
|
|
| 13 |
<!-- Fonts CSS -->
|
| 14 |
<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">
|
| 15 |
<!-- Icons CSS -->
|
| 16 |
-
<
|
| 17 |
<link rel="stylesheet" href="css/select2.css">
|
| 18 |
<link rel="stylesheet" href="css/daterangepicker.css">
|
| 19 |
<!-- App CSS -->
|
|
@@ -26,14 +26,14 @@
|
|
| 26 |
<!-- Top Navigation -->
|
| 27 |
<nav class="topnav navbar navbar-light">
|
| 28 |
<button type="button" class="navbar-toggler text-muted mt-2 p-0 mr-3 collapseSidebar">
|
| 29 |
-
<i
|
| 30 |
</button>
|
| 31 |
|
| 32 |
<ul class="nav">
|
| 33 |
<!--
|
| 34 |
<li class="nav-item">
|
| 35 |
<a class="nav-link text-muted my-2" href="#" id="modeSwitcher" data-mode="light">
|
| 36 |
-
<i
|
| 37 |
</a>
|
| 38 |
</li>
|
| 39 |
-->
|
|
@@ -54,7 +54,7 @@
|
|
| 54 |
<!-- Sidebar -->
|
| 55 |
<aside class="sidebar-left border-right bg-white shadow" id="leftSidebar" data-simplebar>
|
| 56 |
<a href="#" class="btn collapseSidebar toggle-btn d-lg-none text-muted ml-2 mt-3" data-toggle="toggle">
|
| 57 |
-
<i
|
| 58 |
</a>
|
| 59 |
<nav class="vertnav navbar navbar-light">
|
| 60 |
<!-- nav bar -->
|
|
@@ -68,31 +68,31 @@
|
|
| 68 |
<ul class="navbar-nav flex-fill w-100 mb-2">
|
| 69 |
<li class="nav-item">
|
| 70 |
<a class="nav-link" href="./index.html">
|
| 71 |
-
<i
|
| 72 |
<span class="ml-3 item-text">Dashboard</span>
|
| 73 |
</a>
|
| 74 |
</li>
|
| 75 |
<li class="nav-item">
|
| 76 |
<a class="nav-link" href="./diagnosis.html">
|
| 77 |
-
<i
|
| 78 |
<span class="ml-3 item-text">Diagnóstico</span>
|
| 79 |
</a>
|
| 80 |
</li>
|
| 81 |
<li class="nav-item">
|
| 82 |
<a class="nav-link" href="./patients.html">
|
| 83 |
-
<i
|
| 84 |
<span class="ml-3 item-text">Pacientes</span>
|
| 85 |
</a>
|
| 86 |
</li>
|
| 87 |
<li class="nav-item active">
|
| 88 |
<a class="nav-link" href="./historial-consultas.html">
|
| 89 |
-
<i
|
| 90 |
<span class="ml-3 item-text">Consultas</span>
|
| 91 |
</a>
|
| 92 |
</li>
|
| 93 |
<li class="nav-item active">
|
| 94 |
<a class="nav-link" href="./users.html">
|
| 95 |
-
<i
|
| 96 |
<span class="ml-3 item-text">Usuarios</span>
|
| 97 |
</a>
|
| 98 |
</li>
|
|
@@ -113,7 +113,7 @@
|
|
| 113 |
</div>
|
| 114 |
<div class="col-auto">
|
| 115 |
<button class="btn btn-primary" onclick="refreshConsultations()">
|
| 116 |
-
<i
|
| 117 |
</button>
|
| 118 |
</div>
|
| 119 |
</div>
|
|
@@ -126,7 +126,7 @@
|
|
| 126 |
<div class="row align-items-center">
|
| 127 |
<div class="col-3 text-center">
|
| 128 |
<span class="circle circle-sm bg-primary">
|
| 129 |
-
<i
|
| 130 |
</span>
|
| 131 |
</div>
|
| 132 |
<div class="col pr-0">
|
|
@@ -143,7 +143,7 @@
|
|
| 143 |
<div class="row align-items-center">
|
| 144 |
<div class="col-3 text-center">
|
| 145 |
<span class="circle circle-sm bg-warning">
|
| 146 |
-
<i
|
| 147 |
</span>
|
| 148 |
</div>
|
| 149 |
<div class="col pr-0">
|
|
@@ -160,7 +160,7 @@
|
|
| 160 |
<div class="row align-items-center">
|
| 161 |
<div class="col-3 text-center">
|
| 162 |
<span class="circle circle-sm bg-success">
|
| 163 |
-
<i
|
| 164 |
</span>
|
| 165 |
</div>
|
| 166 |
<div class="col pr-0">
|
|
@@ -177,7 +177,7 @@
|
|
| 177 |
<div class="row align-items-center">
|
| 178 |
<div class="col-3 text-center">
|
| 179 |
<span class="circle circle-sm bg-info">
|
| 180 |
-
<i
|
| 181 |
</span>
|
| 182 |
</div>
|
| 183 |
<div class="col pr-0">
|
|
@@ -194,7 +194,7 @@
|
|
| 194 |
<div class="card shadow mb-4">
|
| 195 |
<div class="card-header">
|
| 196 |
<h6 class="card-title mb-0">
|
| 197 |
-
<i
|
| 198 |
</h6>
|
| 199 |
</div>
|
| 200 |
<div class="card-body">
|
|
@@ -230,7 +230,7 @@
|
|
| 230 |
<div class="form-group">
|
| 231 |
<label> </label>
|
| 232 |
<button type="button" class="btn btn-primary btn-block" onclick="applyFilters()">
|
| 233 |
-
<i
|
| 234 |
</button>
|
| 235 |
</div>
|
| 236 |
</div>
|
|
@@ -242,7 +242,7 @@
|
|
| 242 |
<div class="card shadow">
|
| 243 |
<div class="card-header">
|
| 244 |
<h6 class="card-title mb-0">
|
| 245 |
-
<i
|
| 246 |
<span class="badge badge-secondary ml-2" id="recordCount">0 registros</span>
|
| 247 |
</h6>
|
| 248 |
</div>
|
|
@@ -294,11 +294,11 @@
|
|
| 294 |
|
| 295 |
<!-- Empty State -->
|
| 296 |
<div id="emptyState" class="text-center py-5" style="display: none;">
|
| 297 |
-
<i
|
| 298 |
<h6 class="text-muted">No se encontraron consultas</h6>
|
| 299 |
<p class="text-muted">No hay consultas que coincidan con los filtros seleccionados.</p>
|
| 300 |
<button class="btn btn-outline-primary" onclick="clearFilters()">
|
| 301 |
-
<i
|
| 302 |
</button>
|
| 303 |
</div>
|
| 304 |
</div>
|
|
@@ -315,7 +315,7 @@
|
|
| 315 |
<div class="modal-content">
|
| 316 |
<div class="modal-header">
|
| 317 |
<h5 class="modal-title" id="consultationModalLabel">
|
| 318 |
-
<i
|
| 319 |
</h5>
|
| 320 |
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
| 321 |
<span aria-hidden="true">×</span>
|
|
@@ -327,7 +327,7 @@
|
|
| 327 |
<div class="modal-footer">
|
| 328 |
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cerrar</button>
|
| 329 |
<button type="button" class="btn btn-danger" id="deleteConsultationBtn" onclick="deleteConsultation()">
|
| 330 |
-
<i
|
| 331 |
</button>
|
| 332 |
</div>
|
| 333 |
</div>
|
|
@@ -505,12 +505,12 @@
|
|
| 505 |
<button class="btn btn-sm btn-outline-primary"
|
| 506 |
onclick="viewConsultationDetails(${consultation.consultationID})"
|
| 507 |
title="Ver detalles">
|
| 508 |
-
<i
|
| 509 |
</button>
|
| 510 |
<button class="btn btn-sm btn-outline-danger"
|
| 511 |
onclick="confirmDeleteConsultation(${consultation.consultationID})"
|
| 512 |
title="Eliminar">
|
| 513 |
-
<i
|
| 514 |
</button>
|
| 515 |
</div>
|
| 516 |
</td>
|
|
@@ -534,7 +534,7 @@
|
|
| 534 |
container.append(`
|
| 535 |
<li class="page-item ${prevDisabled}">
|
| 536 |
<a class="page-link" href="#" onclick="changePage(${pagination.current_page - 1})" ${prevDisabled ? 'tabindex="-1"' : ''}>
|
| 537 |
-
<i
|
| 538 |
</a>
|
| 539 |
</li>
|
| 540 |
`);
|
|
@@ -582,7 +582,7 @@
|
|
| 582 |
container.append(`
|
| 583 |
<li class="page-item ${nextDisabled}">
|
| 584 |
<a class="page-link" href="#" onclick="changePage(${pagination.current_page + 1})" ${nextDisabled ? 'tabindex="-1"' : ''}>
|
| 585 |
-
<i
|
| 586 |
</a>
|
| 587 |
</li>
|
| 588 |
`);
|
|
@@ -600,33 +600,14 @@
|
|
| 600 |
console.log(`Viendo detalles de consulta: ${consultationId}`);
|
| 601 |
currentConsultationId = consultationId;
|
| 602 |
|
| 603 |
-
|
| 604 |
-
|
| 605 |
-
|
| 606 |
-
|
| 607 |
-
|
| 608 |
-
</div>
|
| 609 |
-
`);
|
| 610 |
-
$('#consultationModal').modal('show');
|
| 611 |
-
|
| 612 |
-
api.getConsultation(consultationId).then(function(response) {
|
| 613 |
-
if (response && response.success) {
|
| 614 |
-
renderConsultationModal(response.consultation, response.consultation.riskFactors || []);
|
| 615 |
} else {
|
| 616 |
-
|
| 617 |
-
<div class="alert alert-danger">
|
| 618 |
-
<i class="fe fe-alert-circle mr-2"></i>
|
| 619 |
-
${response?.message || 'No se pudo cargar la consulta.'}
|
| 620 |
-
</div>
|
| 621 |
-
`);
|
| 622 |
}
|
| 623 |
-
}).catch(function() {
|
| 624 |
-
$('#consultationModalBody').html(`
|
| 625 |
-
<div class="alert alert-danger">
|
| 626 |
-
<i class="fe fe-alert-circle mr-2"></i>
|
| 627 |
-
Error de conexión al cargar la consulta.
|
| 628 |
-
</div>
|
| 629 |
-
`);
|
| 630 |
});
|
| 631 |
}
|
| 632 |
|
|
@@ -640,9 +621,9 @@
|
|
| 640 |
new Date(consultation.consultationDate).toLocaleString('es-ES') : 'N/A';
|
| 641 |
|
| 642 |
const confidence = consultation.confidence ?
|
| 643 |
-
`${
|
| 644 |
|
| 645 |
-
// Calcular edad
|
| 646 |
let age = 'N/A';
|
| 647 |
if (consultation.birthDate) {
|
| 648 |
try {
|
|
@@ -654,13 +635,11 @@
|
|
| 654 |
age--;
|
| 655 |
}
|
| 656 |
age += ' años';
|
| 657 |
-
} catch (e) {
|
|
|
|
|
|
|
| 658 |
}
|
| 659 |
|
| 660 |
-
// Género legible
|
| 661 |
-
const genderMap = { 'M': 'Masculino', 'F': 'Femenino' };
|
| 662 |
-
const genderText = genderMap[consultation.gender] || consultation.gender || 'N/A';
|
| 663 |
-
|
| 664 |
// Factores de riesgo
|
| 665 |
let riskFactorsHtml = '';
|
| 666 |
if (riskFactors && riskFactors.length > 0) {
|
|
@@ -668,24 +647,19 @@
|
|
| 668 |
`<span class="badge badge-secondary mr-1 mb-1">${rf.name}</span>`
|
| 669 |
).join('');
|
| 670 |
} else {
|
| 671 |
-
riskFactorsHtml = '<span class="text-muted
|
| 672 |
}
|
| 673 |
|
| 674 |
-
// Badge del doctor que registró la consulta
|
| 675 |
-
const doctorBadge = consultation.doctorName
|
| 676 |
-
? `<span class="badge badge-info ml-1">${consultation.doctorName}</span>`
|
| 677 |
-
: '';
|
| 678 |
-
|
| 679 |
const modalContent = `
|
| 680 |
<div class="row">
|
| 681 |
<div class="col-md-6">
|
| 682 |
<h6 class="mb-3">
|
| 683 |
-
<i
|
| 684 |
</h6>
|
| 685 |
<table class="table table-sm">
|
| 686 |
<tr>
|
| 687 |
<td><strong>Nombre:</strong></td>
|
| 688 |
-
<td>${consultation.patientName || 'N/A'}</td>
|
| 689 |
</tr>
|
| 690 |
<tr>
|
| 691 |
<td><strong>Edad:</strong></td>
|
|
@@ -693,7 +667,7 @@
|
|
| 693 |
</tr>
|
| 694 |
<tr>
|
| 695 |
<td><strong>Género:</strong></td>
|
| 696 |
-
<td>${
|
| 697 |
</tr>
|
| 698 |
<tr>
|
| 699 |
<td><strong>Tipo Diabetes:</strong></td>
|
|
@@ -703,7 +677,7 @@
|
|
| 703 |
</div>
|
| 704 |
<div class="col-md-6">
|
| 705 |
<h6 class="mb-3">
|
| 706 |
-
<i
|
| 707 |
</h6>
|
| 708 |
<table class="table table-sm">
|
| 709 |
<tr>
|
|
@@ -719,16 +693,16 @@
|
|
| 719 |
<td>${confidence}</td>
|
| 720 |
</tr>
|
| 721 |
<tr>
|
| 722 |
-
<td><strong>
|
| 723 |
-
<td>${
|
| 724 |
</tr>
|
| 725 |
</table>
|
| 726 |
</div>
|
| 727 |
</div>
|
| 728 |
|
| 729 |
-
<div class="row mt-
|
| 730 |
<div class="col-12">
|
| 731 |
-
<div class="alert ${resultClass} d-flex align-items-center
|
| 732 |
<i class="fe ${resultIcon} fe-24 mr-3"></i>
|
| 733 |
<div>
|
| 734 |
<h6 class="mb-1">${resultText}</h6>
|
|
@@ -738,24 +712,15 @@
|
|
| 738 |
</div>
|
| 739 |
</div>
|
| 740 |
|
| 741 |
-
<div class="row mt-3">
|
| 742 |
-
<div class="col-12">
|
| 743 |
-
<h6 class="mb-2">
|
| 744 |
-
<i class="fe fe-shield mr-2"></i>Factores de Riesgo del Paciente
|
| 745 |
-
</h6>
|
| 746 |
-
<div>${riskFactorsHtml}</div>
|
| 747 |
-
</div>
|
| 748 |
-
</div>
|
| 749 |
-
|
| 750 |
${consultation.notes ? `
|
| 751 |
-
<div class="row
|
| 752 |
<div class="col-12">
|
| 753 |
<h6 class="mb-2">
|
| 754 |
-
<i
|
| 755 |
</h6>
|
| 756 |
<div class="card bg-light">
|
| 757 |
-
<div class="card-body
|
| 758 |
-
<p class="mb-0
|
| 759 |
</div>
|
| 760 |
</div>
|
| 761 |
</div>
|
|
@@ -986,5 +951,23 @@
|
|
| 986 |
|
| 987 |
<!-- App scripts -->
|
| 988 |
<script src="js/apps.js"></script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 989 |
</body>
|
| 990 |
</html>
|
|
|
|
| 13 |
<!-- Fonts CSS -->
|
| 14 |
<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">
|
| 15 |
<!-- Icons CSS -->
|
| 16 |
+
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 17 |
<link rel="stylesheet" href="css/select2.css">
|
| 18 |
<link rel="stylesheet" href="css/daterangepicker.css">
|
| 19 |
<!-- App CSS -->
|
|
|
|
| 26 |
<!-- Top Navigation -->
|
| 27 |
<nav class="topnav navbar navbar-light">
|
| 28 |
<button type="button" class="navbar-toggler text-muted mt-2 p-0 mr-3 collapseSidebar">
|
| 29 |
+
<i data-feather="menu" class="navbar-toggler-icon"></i>
|
| 30 |
</button>
|
| 31 |
|
| 32 |
<ul class="nav">
|
| 33 |
<!--
|
| 34 |
<li class="nav-item">
|
| 35 |
<a class="nav-link text-muted my-2" href="#" id="modeSwitcher" data-mode="light">
|
| 36 |
+
<i data-feather="sun" class="fe-16"></i>
|
| 37 |
</a>
|
| 38 |
</li>
|
| 39 |
-->
|
|
|
|
| 54 |
<!-- Sidebar -->
|
| 55 |
<aside class="sidebar-left border-right bg-white shadow" id="leftSidebar" data-simplebar>
|
| 56 |
<a href="#" class="btn collapseSidebar toggle-btn d-lg-none text-muted ml-2 mt-3" data-toggle="toggle">
|
| 57 |
+
<i data-feather="x"><span class="sr-only"></span></i>
|
| 58 |
</a>
|
| 59 |
<nav class="vertnav navbar navbar-light">
|
| 60 |
<!-- nav bar -->
|
|
|
|
| 68 |
<ul class="navbar-nav flex-fill w-100 mb-2">
|
| 69 |
<li class="nav-item">
|
| 70 |
<a class="nav-link" href="./index.html">
|
| 71 |
+
<i data-feather="home" class="fe-16"></i>
|
| 72 |
<span class="ml-3 item-text">Dashboard</span>
|
| 73 |
</a>
|
| 74 |
</li>
|
| 75 |
<li class="nav-item">
|
| 76 |
<a class="nav-link" href="./diagnosis.html">
|
| 77 |
+
<i data-feather="eye" class="fe-16"></i>
|
| 78 |
<span class="ml-3 item-text">Diagnóstico</span>
|
| 79 |
</a>
|
| 80 |
</li>
|
| 81 |
<li class="nav-item">
|
| 82 |
<a class="nav-link" href="./patients.html">
|
| 83 |
+
<i data-feather="users" class="fe-16"></i>
|
| 84 |
<span class="ml-3 item-text">Pacientes</span>
|
| 85 |
</a>
|
| 86 |
</li>
|
| 87 |
<li class="nav-item active">
|
| 88 |
<a class="nav-link" href="./historial-consultas.html">
|
| 89 |
+
<i data-feather="file-text" class="fe-16"></i>
|
| 90 |
<span class="ml-3 item-text">Consultas</span>
|
| 91 |
</a>
|
| 92 |
</li>
|
| 93 |
<li class="nav-item active">
|
| 94 |
<a class="nav-link" href="./users.html">
|
| 95 |
+
<i data-feather="user" class="fe-16"></i>
|
| 96 |
<span class="ml-3 item-text">Usuarios</span>
|
| 97 |
</a>
|
| 98 |
</li>
|
|
|
|
| 113 |
</div>
|
| 114 |
<div class="col-auto">
|
| 115 |
<button class="btn btn-primary" onclick="refreshConsultations()">
|
| 116 |
+
<i data-feather="refresh-cw" class="fe-16 mr-2"></i>Actualizar
|
| 117 |
</button>
|
| 118 |
</div>
|
| 119 |
</div>
|
|
|
|
| 126 |
<div class="row align-items-center">
|
| 127 |
<div class="col-3 text-center">
|
| 128 |
<span class="circle circle-sm bg-primary">
|
| 129 |
+
<i data-feather="clipboard" class="fe-16 text-white"></i>
|
| 130 |
</span>
|
| 131 |
</div>
|
| 132 |
<div class="col pr-0">
|
|
|
|
| 143 |
<div class="row align-items-center">
|
| 144 |
<div class="col-3 text-center">
|
| 145 |
<span class="circle circle-sm bg-warning">
|
| 146 |
+
<i data-feather="alert-triangle" class="fe-16 text-white"></i>
|
| 147 |
</span>
|
| 148 |
</div>
|
| 149 |
<div class="col pr-0">
|
|
|
|
| 160 |
<div class="row align-items-center">
|
| 161 |
<div class="col-3 text-center">
|
| 162 |
<span class="circle circle-sm bg-success">
|
| 163 |
+
<i data-feather="check" class="fe-16 text-white"></i>
|
| 164 |
</span>
|
| 165 |
</div>
|
| 166 |
<div class="col pr-0">
|
|
|
|
| 177 |
<div class="row align-items-center">
|
| 178 |
<div class="col-3 text-center">
|
| 179 |
<span class="circle circle-sm bg-info">
|
| 180 |
+
<i data-feather="users" class="fe-16 text-white"></i>
|
| 181 |
</span>
|
| 182 |
</div>
|
| 183 |
<div class="col pr-0">
|
|
|
|
| 194 |
<div class="card shadow mb-4">
|
| 195 |
<div class="card-header">
|
| 196 |
<h6 class="card-title mb-0">
|
| 197 |
+
<i data-feather="filter" class="mr-2"></i>Filtros y Búsqueda
|
| 198 |
</h6>
|
| 199 |
</div>
|
| 200 |
<div class="card-body">
|
|
|
|
| 230 |
<div class="form-group">
|
| 231 |
<label> </label>
|
| 232 |
<button type="button" class="btn btn-primary btn-block" onclick="applyFilters()">
|
| 233 |
+
<i data-feather="search" class="mr-1"></i>Buscar
|
| 234 |
</button>
|
| 235 |
</div>
|
| 236 |
</div>
|
|
|
|
| 242 |
<div class="card shadow">
|
| 243 |
<div class="card-header">
|
| 244 |
<h6 class="card-title mb-0">
|
| 245 |
+
<i data-feather="clipboard" class="mr-2"></i>Lista de Consultas
|
| 246 |
<span class="badge badge-secondary ml-2" id="recordCount">0 registros</span>
|
| 247 |
</h6>
|
| 248 |
</div>
|
|
|
|
| 294 |
|
| 295 |
<!-- Empty State -->
|
| 296 |
<div id="emptyState" class="text-center py-5" style="display: none;">
|
| 297 |
+
<i data-feather="inbox" class="fe-48 text-muted mb-3"></i>
|
| 298 |
<h6 class="text-muted">No se encontraron consultas</h6>
|
| 299 |
<p class="text-muted">No hay consultas que coincidan con los filtros seleccionados.</p>
|
| 300 |
<button class="btn btn-outline-primary" onclick="clearFilters()">
|
| 301 |
+
<i data-feather="refresh-cw" class="mr-1"></i>Limpiar Filtros
|
| 302 |
</button>
|
| 303 |
</div>
|
| 304 |
</div>
|
|
|
|
| 315 |
<div class="modal-content">
|
| 316 |
<div class="modal-header">
|
| 317 |
<h5 class="modal-title" id="consultationModalLabel">
|
| 318 |
+
<i data-feather="eye" class="mr-2"></i>Detalles de Consulta
|
| 319 |
</h5>
|
| 320 |
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
| 321 |
<span aria-hidden="true">×</span>
|
|
|
|
| 327 |
<div class="modal-footer">
|
| 328 |
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cerrar</button>
|
| 329 |
<button type="button" class="btn btn-danger" id="deleteConsultationBtn" onclick="deleteConsultation()">
|
| 330 |
+
<i data-feather="trash-2" class="mr-1"></i>Eliminar
|
| 331 |
</button>
|
| 332 |
</div>
|
| 333 |
</div>
|
|
|
|
| 505 |
<button class="btn btn-sm btn-outline-primary"
|
| 506 |
onclick="viewConsultationDetails(${consultation.consultationID})"
|
| 507 |
title="Ver detalles">
|
| 508 |
+
<i data-feather="eye" class="fe-12"></i>
|
| 509 |
</button>
|
| 510 |
<button class="btn btn-sm btn-outline-danger"
|
| 511 |
onclick="confirmDeleteConsultation(${consultation.consultationID})"
|
| 512 |
title="Eliminar">
|
| 513 |
+
<i data-feather="trash-2" class="fe-12"></i>
|
| 514 |
</button>
|
| 515 |
</div>
|
| 516 |
</td>
|
|
|
|
| 534 |
container.append(`
|
| 535 |
<li class="page-item ${prevDisabled}">
|
| 536 |
<a class="page-link" href="#" onclick="changePage(${pagination.current_page - 1})" ${prevDisabled ? 'tabindex="-1"' : ''}>
|
| 537 |
+
<i data-feather="chevron-left"></i>
|
| 538 |
</a>
|
| 539 |
</li>
|
| 540 |
`);
|
|
|
|
| 582 |
container.append(`
|
| 583 |
<li class="page-item ${nextDisabled}">
|
| 584 |
<a class="page-link" href="#" onclick="changePage(${pagination.current_page + 1})" ${nextDisabled ? 'tabindex="-1"' : ''}>
|
| 585 |
+
<i data-feather="chevron-right"></i>
|
| 586 |
</a>
|
| 587 |
</li>
|
| 588 |
`);
|
|
|
|
| 600 |
console.log(`Viendo detalles de consulta: ${consultationId}`);
|
| 601 |
currentConsultationId = consultationId;
|
| 602 |
|
| 603 |
+
api.getConsultations(1, 100).then(function(response) {
|
| 604 |
+
const consultation = (response.consultations || []).find(c => c.consultationID === consultationId);
|
| 605 |
+
if (consultation) {
|
| 606 |
+
renderConsultationModal(consultation, []);
|
| 607 |
+
$('#consultationModal').modal('show');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 608 |
} else {
|
| 609 |
+
showAlert('error', 'Consulta no encontrada');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 610 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 611 |
});
|
| 612 |
}
|
| 613 |
|
|
|
|
| 621 |
new Date(consultation.consultationDate).toLocaleString('es-ES') : 'N/A';
|
| 622 |
|
| 623 |
const confidence = consultation.confidence ?
|
| 624 |
+
`${consultation.confidence.toFixed(1)}%` : 'N/A';
|
| 625 |
|
| 626 |
+
// Calcular edad si hay fecha de nacimiento
|
| 627 |
let age = 'N/A';
|
| 628 |
if (consultation.birthDate) {
|
| 629 |
try {
|
|
|
|
| 635 |
age--;
|
| 636 |
}
|
| 637 |
age += ' años';
|
| 638 |
+
} catch (e) {
|
| 639 |
+
age = 'N/A';
|
| 640 |
+
}
|
| 641 |
}
|
| 642 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 643 |
// Factores de riesgo
|
| 644 |
let riskFactorsHtml = '';
|
| 645 |
if (riskFactors && riskFactors.length > 0) {
|
|
|
|
| 647 |
`<span class="badge badge-secondary mr-1 mb-1">${rf.name}</span>`
|
| 648 |
).join('');
|
| 649 |
} else {
|
| 650 |
+
riskFactorsHtml = '<span class="text-muted">No se han registrado factores de riesgo</span>';
|
| 651 |
}
|
| 652 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 653 |
const modalContent = `
|
| 654 |
<div class="row">
|
| 655 |
<div class="col-md-6">
|
| 656 |
<h6 class="mb-3">
|
| 657 |
+
<i data-feather="user" class="mr-2"></i>Información del Paciente
|
| 658 |
</h6>
|
| 659 |
<table class="table table-sm">
|
| 660 |
<tr>
|
| 661 |
<td><strong>Nombre:</strong></td>
|
| 662 |
+
<td>${consultation.patientName || consultation.patient_name || 'N/A'}</td>
|
| 663 |
</tr>
|
| 664 |
<tr>
|
| 665 |
<td><strong>Edad:</strong></td>
|
|
|
|
| 667 |
</tr>
|
| 668 |
<tr>
|
| 669 |
<td><strong>Género:</strong></td>
|
| 670 |
+
<td>${consultation.gender || 'N/A'}</td>
|
| 671 |
</tr>
|
| 672 |
<tr>
|
| 673 |
<td><strong>Tipo Diabetes:</strong></td>
|
|
|
|
| 677 |
</div>
|
| 678 |
<div class="col-md-6">
|
| 679 |
<h6 class="mb-3">
|
| 680 |
+
<i data-feather="clipboard" class="mr-2"></i>Información de la Consulta
|
| 681 |
</h6>
|
| 682 |
<table class="table table-sm">
|
| 683 |
<tr>
|
|
|
|
| 693 |
<td>${confidence}</td>
|
| 694 |
</tr>
|
| 695 |
<tr>
|
| 696 |
+
<td><strong>Imagen:</strong></td>
|
| 697 |
+
<td>${consultation.imagePath || 'N/A'}</td>
|
| 698 |
</tr>
|
| 699 |
</table>
|
| 700 |
</div>
|
| 701 |
</div>
|
| 702 |
|
| 703 |
+
<div class="row mt-4">
|
| 704 |
<div class="col-12">
|
| 705 |
+
<div class="alert ${resultClass} d-flex align-items-center">
|
| 706 |
<i class="fe ${resultIcon} fe-24 mr-3"></i>
|
| 707 |
<div>
|
| 708 |
<h6 class="mb-1">${resultText}</h6>
|
|
|
|
| 712 |
</div>
|
| 713 |
</div>
|
| 714 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 715 |
${consultation.notes ? `
|
| 716 |
+
<div class="row">
|
| 717 |
<div class="col-12">
|
| 718 |
<h6 class="mb-2">
|
| 719 |
+
<i data-feather="edit-2" class="mr-2"></i>Notas de la Consulta
|
| 720 |
</h6>
|
| 721 |
<div class="card bg-light">
|
| 722 |
+
<div class="card-body">
|
| 723 |
+
<p class="mb-0">${consultation.notes}</p>
|
| 724 |
</div>
|
| 725 |
</div>
|
| 726 |
</div>
|
|
|
|
| 951 |
|
| 952 |
<!-- App scripts -->
|
| 953 |
<script src="js/apps.js"></script>
|
| 954 |
+
<script>
|
| 955 |
+
// Feather Icons: reemplaza <i data-feather="X"> con SVG inline
|
| 956 |
+
// Inmune a problemas de fuentes locales
|
| 957 |
+
function _initFeather() {
|
| 958 |
+
if (typeof feather !== 'undefined') feather.replace({ 'stroke-width': 1.8 });
|
| 959 |
+
}
|
| 960 |
+
document.addEventListener('DOMContentLoaded', _initFeather);
|
| 961 |
+
// Re-render al inyectar HTML dinámico (modals, cards, tablas)
|
| 962 |
+
var _fObserver = new MutationObserver(function(mutations) {
|
| 963 |
+
var needsRefresh = mutations.some(function(m) {
|
| 964 |
+
return m.addedNodes.length > 0;
|
| 965 |
+
});
|
| 966 |
+
if (needsRefresh) _initFeather();
|
| 967 |
+
});
|
| 968 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 969 |
+
_fObserver.observe(document.body, { childList: true, subtree: true });
|
| 970 |
+
});
|
| 971 |
+
</script>
|
| 972 |
</body>
|
| 973 |
</html>
|