Fix: visibilidad de secciones de tomas por examen seleccionado
- _mpApplyExamVisibility(): oculta/muestra secciones en el DOM usando sep_id de _mpAllGroups, sin depender de condicion en el esquema - Funciona aunque la BD no tenga condiciones restauradas aún - _restore_tomas_conditions.php: migración para restaurar condiciones en separadores usando prefijo del label vs opciones de _c8j2g16 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
da2b67589e
commit
bf0fc39fee
@@ -1288,23 +1288,63 @@ function _mpGetGroupsForExam(examName) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// Visibilidad de secciones de tomas según examen seleccionado
|
||||
// (funciona aunque la BD no tenga condiciones, usando sep_id de _mpAllGroups)
|
||||
function _mpApplyExamVisibility(selectedExam) {
|
||||
// Construir mapa sep_id → exam_name
|
||||
var sepToExam = {};
|
||||
for (var gk in _mpAllGroups) {
|
||||
var parts = gk.split('|').filter(Boolean);
|
||||
var isExamGrp = parts.some(function(p) { return _mpExamOptions.indexOf(p) !== -1; });
|
||||
if (isExamGrp) {
|
||||
_mpAllGroups[gk].forEach(function(sec) {
|
||||
if (sec.sep_id) sepToExam[sec.sep_id] = parts[0];
|
||||
});
|
||||
}
|
||||
}
|
||||
if (!Object.keys(sepToExam).length) return;
|
||||
|
||||
// Recorrer todos los elementos con data-campo-id dentro del doc-body
|
||||
var docBody = document.querySelector('.doc-body');
|
||||
if (!docBody) return;
|
||||
var inHidden = false;
|
||||
docBody.querySelectorAll('[data-campo-id]').forEach(function(el) {
|
||||
var cid = el.getAttribute('data-campo-id');
|
||||
if (el.classList.contains('esquema-sep')) {
|
||||
if (sepToExam[cid] !== undefined) {
|
||||
// Separador de toma: mostrar solo si es del examen seleccionado
|
||||
inHidden = (sepToExam[cid] !== selectedExam);
|
||||
el.style.display = inHidden ? 'none' : '';
|
||||
} else {
|
||||
// Separador genérico (ej: Datos del paciente) — siempre visible
|
||||
inHidden = false;
|
||||
el.style.display = '';
|
||||
}
|
||||
} else {
|
||||
el.style.display = inHidden ? 'none' : '';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Escuchar selección de tipo de examen
|
||||
document.addEventListener('change', function(e) {
|
||||
if (!_mpModoTurnero) return;
|
||||
if (_mpTomasConfig !== null) return; // ya configurado
|
||||
var el = e.target;
|
||||
if (el.type !== 'radio' || el.name !== '_c8j2g16') return;
|
||||
var examName = el.value;
|
||||
var groups = _mpGetGroupsForExam(examName);
|
||||
_mpApplyExamVisibility(examName);
|
||||
if (_mpTomasConfig !== null) return; // ya configurado, no mostrar panel
|
||||
var groups = _mpGetGroupsForExam(examName);
|
||||
if (!Object.keys(groups).length) return;
|
||||
_mpShowCfgPanel(examName, groups);
|
||||
});
|
||||
|
||||
// Si al cargar ya hay examen seleccionado pero sin _tomas_config → mostrar panel
|
||||
// Al cargar: aplicar visibilidad si hay examen seleccionado
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
if (!_mpModoTurnero || _mpTomasConfig !== null) return;
|
||||
var radio = document.querySelector('[name="_c8j2g16"]:checked');
|
||||
if (!radio) return;
|
||||
_mpApplyExamVisibility(radio.value);
|
||||
if (!_mpModoTurnero || _mpTomasConfig !== null) return;
|
||||
var groups = _mpGetGroupsForExam(radio.value);
|
||||
if (Object.keys(groups).length) _mpShowCfgPanel(radio.value, groups);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user