feat: condición multi-valor en visibilidad condicional de formularios
Builder: - Picker de valor ahora es <select multiple> — Ctrl+clic para varios - Al re-editar un separador, los valores guardados quedan preseleccionados - aplicarCampo() guarda siempre como condicion.valores (array) - Badge en canvas muestra todos los valores separados por coma form_cliente.php / iniciarCondiciones(): - Soporta tanto .valor (string legacy) como .valores (array nuevo) - Evaluación: activo si CUALQUIER valor de la lista está marcado BD (ya aplicado): - Formulario id=15 actualizado con condiciones en los separadores - Taukit → valor único; Heliprobe → valor único - Glicemia/Prolactina/etc. → valores[] con todos los prolongados - Cortisol AM/PM → valores[] para sección de tomas hora fija Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
21e7c6a836
commit
8bf3614fa0
+5
-6
@@ -1126,21 +1126,20 @@ function iniciarCondiciones(esquema) {
|
||||
|
||||
function evaluar() {
|
||||
condicionales.forEach(sec => {
|
||||
const { campo_id, valor } = sec.condicion;
|
||||
// Leer valor del campo controlador
|
||||
const { campo_id, valor, valores } = sec.condicion;
|
||||
const valoresCond = valores ? valores : (valor ? [valor] : []);
|
||||
const ctrl = document.querySelector(`[data-campo-id="${campo_id}"]`);
|
||||
if (!ctrl) return;
|
||||
|
||||
let activo = false;
|
||||
const checks = ctrl.querySelectorAll('input[type="checkbox"]');
|
||||
if (checks.length) {
|
||||
// checkbox múltiple: activo si alguno con ese valor está checked
|
||||
checks.forEach(cb => { if (cb.value === valor && cb.checked) activo = true; });
|
||||
checks.forEach(cb => { if (valoresCond.includes(cb.value) && cb.checked) activo = true; });
|
||||
} else {
|
||||
const radio = ctrl.querySelector(`input[type="radio"]:checked`);
|
||||
const sel = ctrl.querySelector('select');
|
||||
if (radio) activo = radio.value === valor;
|
||||
else if (sel) activo = sel.value === valor;
|
||||
const v = radio ? radio.value : (sel ? sel.value : '');
|
||||
activo = valoresCond.includes(v);
|
||||
}
|
||||
|
||||
// Mostrar u ocultar toda la sección
|
||||
|
||||
Reference in New Issue
Block a user