feat(ui): redesign client form and enhance UI

- Reverted to a dark/grey theme for UI elements.
- Replaced text-based logout button with a red icon.
- Redesigned the client form to a cleaner, single-column layout.
- Added 'Gender' field to the client form.
- Added a comprehensive section for 'Oncological Patient' status with conditional fields.
- Updated client database schema and API to support new fields.
- Standardized form input styles, including the telephone field.
- Updated version in the footer to 0.3.0.
This commit is contained in:
Marco Gallegos
2025-08-13 09:09:34 -06:00
parent 164eaccac1
commit b59cb2f122
4 changed files with 265 additions and 100 deletions

View File

@@ -4,13 +4,13 @@
- Fondo: #f8f9fa (gris muy claro)
- Texto principal: #212529 (casi negro)
- Bordes/Divisores: #dee2e6 (gris claro)
- Botón primario: #343a40 (gris oscuro)
- Botón secundario: #6c757d (gris medio)
- Primario: #007bff (azul)
- Secundario: #6c757d (gris medio)
*/
/* Estilos generales */
/* Estilos generales y tipografías */
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
font-family: 'Open Sans', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
margin: 0;
background-color: #f8f9fa;
color: #212529;
@@ -27,20 +27,22 @@ body {
box-shadow: 0 4px 20px rgba(0,0,0,0.05);
}
h1, h2 {
h1, h2, h3 {
font-family: 'Montserrat', sans-serif;
font-weight: 600;
color: #212529;
}
h2 {
font-size: 22px;
border-bottom: 1px solid #dee2e6;
padding-bottom: 12px;
margin-top: 0;
margin-bottom: 25px;
}
h1 {
font-size: 28px;
}
h2 {
font-size: 22px;
h3 {
font-size: 18px;
}
.section {
@@ -56,29 +58,38 @@ h2 {
}
label {
font-weight: 500;
font-weight: 600;
text-align: right;
color: #495057;
font-size: 14px;
}
input[type="text"],
input[type="password"],
input[type="number"],
input[type="date"],
input[type="time"],
input[type="tel"],
select,
textarea {
width: 100%;
padding: 10px;
padding: 10px 12px;
border: 1px solid #ced4da;
border-radius: 5px;
box-sizing: border-box;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
font-family: 'Open Sans', sans-serif;
font-size: 15px;
}
input:focus, select:focus, textarea:focus {
border-color: #80bdff;
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
}
input:disabled {
background-color: #e9ecef;
cursor: not-allowed;
}
button {
background-color: #343a40;
@@ -88,7 +99,8 @@ button {
border-radius: 5px;
cursor: pointer;
font-size: 14px;
font-weight: 500;
font-family: 'Open Sans', sans-serif;
font-weight: 600;
margin-right: 10px;
transition: background-color 0.2s;
}
@@ -97,10 +109,10 @@ button:hover {
background-color: #212529;
}
button[type="reset"], button#btnTestTicket, #btnExport {
.btn-secondary, button[type="reset"], button#btnTestTicket, #btnExport {
background-color: #6c757d;
}
button[type="reset"]:hover, button#btnTestTicket:hover, #btnExport:hover, .btn-secondary:hover {
.btn-secondary:hover, button[type="reset"]:hover, button#btnTestTicket:hover, #btnExport:hover {
background-color: #5a6268;
}
@@ -111,17 +123,26 @@ button[type="reset"]:hover, button#btnTestTicket:hover, #btnExport:hover, .btn-s
background-color: #c82333;
}
.form-actions button {
margin-right: 0; /* Remove right margin */
margin-left: 10px; /* Add left margin for spacing */
.btn-icon {
padding: 8px;
line-height: 1;
display: flex;
align-items: center;
justify-content: center;
}
.btn-icon .material-icons-outlined {
font-size: 20px;
}
.form-actions {
/* Empuja los botones a la derecha en el grid */
grid-column-start: 2;
margin-top: 20px; /* Aumentar espacio superior */
margin-top: 20px;
display: flex;
justify-content: flex-end; /* Alinea botones a la derecha */
justify-content: flex-end;
}
.form-actions button {
margin-right: 0;
margin-left: 10px;
}
/* Tabla */
@@ -131,32 +152,36 @@ button[type="reset"]:hover, button#btnTestTicket:hover, #btnExport:hover, .btn-s
border-radius: 5px;
}
#tblMoves, #tblClients {
#tblMoves, #tblClients, #tblUsers {
width: 100%;
border-collapse: collapse;
margin: 0;
}
#tblMoves th, #tblMoves td,
#tblClients th, #tblClients td {
#tblClients th, #tblClients td,
#tblUsers th, #tblUsers td {
border-bottom: 1px solid #dee2e6;
padding: 12px 15px;
text-align: left;
white-space: nowrap;
}
#tblMoves td:last-child, #tblMoves th:last-child,
#tblClients td:last-child, #tblClients th:last-child {
#tblClients td:last-child, #tblClients th:last-child,
#tblUsers td:last-child, #tblUsers th:last-child {
text-align: center;
}
#tblMoves th, #tblClients th {
#tblMoves th, #tblClients th, #tblUsers th {
background-color: #f8f9fa;
font-weight: 600;
font-family: 'Montserrat', sans-serif;
font-weight: 500;
border-bottom-width: 2px;
}
#tblMoves tbody tr:last-child td,
#tblClients tbody tr:last-child td {
#tblClients tbody tr:last-child td,
#tblUsers tbody tr:last-child td {
border-bottom: none;
}
@@ -240,26 +265,48 @@ button.action-btn {
border-bottom: 1px solid #dee2e6;
}
.main-header h1 {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
/* Logo en header */
.main-header .header-logo {
.header-logo {
height: 50px;
width: auto;
margin-right: 2rem;
}
.main-header {
.tabs {
display: flex;
flex-grow: 1;
}
.tab-link {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1.5rem;
padding-bottom: 1rem;
border-bottom: 1px solid var(--color-border);
gap: 8px;
padding: 10px 20px;
cursor: pointer;
background: none;
border: none;
font-family: 'Montserrat', sans-serif;
font-weight: 500;
font-size: 16px;
color: #6c757d;
border-bottom: 2px solid transparent;
margin-bottom: -1px;
transition: color 0.2s, border-color 0.2s;
}
.tab-link:hover {
color: #343a40;
}
.tab-link.active {
color: #343a40;
border-bottom-color: #343a40;
}
.tab-content {
display: none;
}
.tab-content.active {
display: block;
}
/* Dashboard Styles */
@@ -282,13 +329,14 @@ button.action-btn {
margin: 0 0 0.5rem 0;
font-size: 1rem;
color: #555;
font-weight: 500;
}
.stat-card p {
margin: 0;
font-size: 2rem;
font-weight: bold;
color: var(--color-primary);
font-weight: 600;
color: #343a40;
}
.dashboard-chart {
@@ -296,59 +344,48 @@ button.action-btn {
padding: 1.5rem;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.05);
/* Fijar altura para evitar bucle infinito de redibujo de Chart.js */
position: relative;
height: 300px;
}
.tabs {
display: flex;
}
.tab-link {
padding: 10px 20px;
cursor: pointer;
background: none;
border: none;
font-size: 16px;
color: #6c757d;
border-bottom: 2px solid transparent;
margin-bottom: -1px;
}
.tab-link.active {
color: #343a40;
border-bottom-color: #343a40;
}
.tab-content {
display: none;
}
.tab-content.active {
display: block;
}
/* --- Estilos específicos de Clientes --- */
.client-grid {
.form-grid-single {
display: grid;
grid-template-columns: 120px 1fr 120px 1fr; /* Dos columnas de etiquetas y campos */
gap: 18px 12px; /* Espacio vertical y horizontal */
align-items: center;
grid-template-columns: 1fr;
gap: 12px;
}
.form-grid-single label {
text-align: left;
margin-bottom: -5px; /* Acercar la etiqueta al campo */
}
.form-grid-single input[type="tel"] {
max-width: 250px;
}
.form-grid-single .checkbox-container {
margin-top: 10px;
}
.form-grid-single .checkbox-container label {
font-weight: 400; /* Peso normal para checkboxes */
}
.form-actions-single {
margin-top: 20px;
display: flex;
justify-content: flex-end;
}
.client-grid .checkbox-container {
grid-column: 2 / span 3; /* El checkbox ocupa las columnas de la derecha */
.checkbox-container {
display: flex;
align-items: center;
}
.checkbox-container input[type="checkbox"] {
width: auto;
margin-right: 8px;
}
.hidden {
display: none !important;
}
/* --- Estilos de Configuración --- */
.data-location-info {
background-color: #e9ecef;
@@ -361,6 +398,15 @@ button.action-btn {
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
}
.sub-section {
margin-top: 30px;
padding-top: 20px;
border-top: 1px solid #e9ecef;
}
.sub-section h3 {
margin-top: 0;
}
/* --- Estilos del Pie de Página --- */
.main-footer-credits {
text-align: center;