diff --git a/form_cliente.php b/form_cliente.php
index b9ada7c..66fd770 100644
--- a/form_cliente.php
+++ b/form_cliente.php
@@ -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
diff --git a/lab_formulario_builder.php b/lab_formulario_builder.php
index 2a017fd..0b6da64 100644
--- a/lab_formulario_builder.php
+++ b/lab_formulario_builder.php
@@ -708,7 +708,7 @@ function renderPreview() {
function renderCampoPreview(c) {
if (c.tipo === 'separador') {
const condBadge = c.condicion
- ? ` si: ${esc(c.condicion.valor)}`
+ ? (()=>{ const vs=(c.condicion.valores||[c.condicion.valor]).join(', '); return ` si: ${esc(vs)}`; })()
: '';
return `
${esc(c.label)}${condBadge}
`;
}
@@ -786,30 +786,33 @@ function abrirEditorCampo(idx) {
const camposOpciones = _campos.filter(f =>
['checkbox','radio','select'].includes(f.tipo) && f.id !== c.id && (f.options||[]).length
);
- const condCampoId = c.condicion?.campo_id || '';
- const condValor = c.condicion?.valor || '';
- const campoCtrl = camposOpciones.find(f => f.id === condCampoId);
- const optsCtrl = campoCtrl ? (campoCtrl.options||[]) : [];
+ const condCampoId = c.condicion?.campo_id || '';
+ // soporta tanto valor (string) como valores (array)
+ const condValores = c.condicion?.valores || (c.condicion?.valor ? [c.condicion.valor] : []);
+ const campoCtrl = camposOpciones.find(f => f.id === condCampoId);
+ const optsCtrl = campoCtrl ? (campoCtrl.options||[]) : [];
const optsCampos = camposOpciones.map(f =>
``
).join('');
const optsValores = optsCtrl.map(o =>
- ``
+ ``
).join('');
html += `
-
Esta sección (y los campos hasta el siguiente separador) se muestra solo si se cumple la condición.
+
Se muestra si alguno de los valores seleccionados está marcado en el campo elegido. Ctrl+clic para selección múltiple.
-
`;
} else if (c.tipo === 'linked') {
html += `
@@ -913,12 +916,19 @@ function abrirEditorCampo(idx) {
function actualizarOpcionesCondicion(campoId) {
const selValor = document.getElementById('ce-cond-valor');
if (!selValor) return;
- if (!campoId) { selValor.innerHTML = ''; selValor.disabled = true; return; }
+ if (!campoId) {
+ selValor.innerHTML = '';
+ selValor.disabled = true;
+ selValor.style.opacity = '.4';
+ selValor.style.pointerEvents = 'none';
+ return;
+ }
const campo = _campos.find(f => f.id === campoId);
const opts = campo?.options || [];
- selValor.innerHTML = '' +
- opts.map(o => ``).join('');
+ selValor.innerHTML = opts.map(o => ``).join('');
selValor.disabled = false;
+ selValor.style.opacity = '';
+ selValor.style.pointerEvents = '';
}
function _insertarKey(key) {
@@ -967,8 +977,12 @@ function aplicarCampo() {
const condCampo = document.getElementById('ce-cond-campo');
const condValor = document.getElementById('ce-cond-valor');
if (condCampo !== null) {
- if (condCampo.value && condValor.value) {
- c.condicion = { campo_id: condCampo.value, valor: condValor.value };
+ const selVals = condValor
+ ? [...condValor.selectedOptions].map(o => o.value).filter(Boolean)
+ : [];
+ if (condCampo.value && selVals.length) {
+ // ponytail: valores[] siempre, forma unificada
+ c.condicion = { campo_id: condCampo.value, valores: selVals };
} else {
delete c.condicion;
}