fix(ui): resolucion del optimizador genetico, superposicion de tarjetas, contraste de logo y traducciones

This commit is contained in:
2026-09-19 16:23:36 -03:00
parent 71fb20a271
commit 4ebc5df4fd
5 changed files with 96 additions and 74 deletions
+68 -54
View File
@@ -83,7 +83,8 @@
<div class="row mb-4">
<!-- Algorithm Status Card -->
<div class="col-lg-4 mb-4">
<div class="card border-0 shadow-sm algorithm-status">
<div class="algorithm-status" style="z-index: 10;">
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-body-tertiary border-0 py-3">
<h5 class="mb-0 h6 fw-bold">
<i class="bi bi-gear-wide-connected text-primary me-2"></i>
@@ -123,14 +124,60 @@
</div>
</div>
<button class="btn btn-sm btn-outline-primary w-100" onclick="geneticManager.getAlgorithmStatus()">
<button class="btn btn-sm btn-outline-primary w-100" onclick="window.refreshStatus()">
<i class="bi bi-arrow-clockwise me-1"></i>
Refresh Status
</button>
</div>
</div>
</div>
<!-- Optimization Controls -->
<div class="card border-0 shadow-sm">
<div class="card-header bg-body-tertiary border-0 py-3">
<h5 class="mb-0 h6 fw-bold">
<i class="bi bi-sliders text-primary me-2"></i>
Optimization Controls
</h5>
</div>
<div class="card-body">
<div class="row align-items-center mb-3">
<div class="col-12">
<div class="mb-3">
<label for="start-date" class="form-label">Start Date</label>
<input type="datetime-local" class="form-control" id="start-date" name="start_date">
</div>
</div>
<div class="col-12">
<div class="mb-3">
<label for="end-date" class="form-label">End Date</label>
<input type="datetime-local" class="form-control" id="end-date" name="end_date">
</div>
</div>
</div>
<div class="d-grid gap-2">
<button class="btn btn-info text-white" id="preview-optimization-btn">
<i class="bi bi-eye me-1"></i>
Preview
</button>
<button class="btn btn-success" id="optimize-assignments-btn">
<i class="bi bi-play-circle me-1"></i>
Run Full Optimization
</button>
<button class="btn btn-warning" id="apply-optimization-btn" style="display: none;">
<i class="bi bi-check-circle me-1"></i>
Apply
</button>
<button class="btn btn-outline-secondary" onclick="resetOptimization()">
<i class="bi bi-arrow-counterclockwise me-1"></i>
Reset
</button>
</div>
</div>
</div>
</div>
</div>
<!-- Commission Selection -->
<div class="col-lg-8">
<div class="card border-0 shadow-sm">
@@ -161,54 +208,7 @@
</div>
</div>
<!-- Optimization Controls -->
<div class="row mb-4">
<div class="col-12">
<div class="card border-0 shadow-sm">
<div class="card-header bg-body-tertiary border-0 py-3">
<h5 class="mb-0 h6 fw-bold">
<i class="bi bi-sliders text-primary me-2"></i>
Optimization Controls
</h5>
</div>
<div class="card-body">
<div class="row align-items-center mb-3">
<div class="col-md-6">
<div class="mb-3">
<label for="start-date" class="form-label">Start Date Range</label>
<input type="datetime-local" class="form-control" id="start-date" name="start_date">
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label for="end-date" class="form-label">End Date Range</label>
<input type="datetime-local" class="form-control" id="end-date" name="end_date">
</div>
</div>
</div>
<div class="d-flex gap-2 flex-wrap">
<button class="btn btn-info text-white" id="preview-optimization-btn">
<i class="bi bi-eye me-1"></i>
Preview Optimization
</button>
<button class="btn btn-success" id="optimize-assignments-btn">
<i class="bi bi-play-circle me-1"></i>
Run Full Optimization
</button>
<button class="btn btn-warning" id="apply-optimization-btn" style="display: none;">
<i class="bi bi-check-circle me-1"></i>
Apply Reservations
</button>
<button class="btn btn-outline-secondary" onclick="resetOptimization()">
<i class="bi bi-arrow-counterclockwise me-1"></i>
Reset
</button>
</div>
</div>
</div>
</div>
</div>
<!-- Results Section -->
<div class="row mb-4">
@@ -292,11 +292,25 @@ function resetOptimization() {
document.getElementById('end-date').value = '';
}
window.refreshStatus = async function() {
if (window.geneticManager) {
try {
const statusResult = await geneticManager.getAlgorithmStatus();
if (statusResult && statusResult.success && statusResult.data) {
const sysStats = statusResult.data.system_status;
document.getElementById('available-classrooms').textContent = sysStats.available_classrooms;
document.getElementById('active-commissions').textContent = sysStats.active_commissions;
document.getElementById('existing-reservations').textContent = sysStats.confirmed_reservations;
}
} catch (e) {
console.error("Error refreshing status:", e);
}
}
}
document.addEventListener('DOMContentLoaded', async function() {
await loadCommissions();
if (window.geneticManager) {
await geneticManager.getAlgorithmStatus();
}
await window.refreshStatus();
});
async function loadCommissions() {