/** * schema 字段的 dependsOn 规则求值。sourceValue 是规则引用的数据对象 * (fieldset 值 / repeater 行 / 弹窗草稿)。 */ export function matchDependency(rule, sourceValue) { if (!rule) return true const source = sourceValue && typeof sourceValue === 'object' ? sourceValue : {} if (rule.all) return rule.all.every(item => matchDependency(item, source)) if (rule.any) return rule.any.some(item => matchDependency(item, source)) const value = source[rule.key] if (rule.operator === 'truthy') return !!value if (rule.operator === 'falsy') return !value if (rule.operator === 'not_empty') return Array.isArray(value) ? value.length > 0 : value !== '' && value != null if (rule.operator === 'empty') return Array.isArray(value) ? value.length === 0 : value === '' || value == null if (rule.operator === 'eq') return value === rule.value if (rule.operator === 'neq') return value !== rule.value return rule.value === undefined || value === rule.value }