From 61cf133db09c62d85efff569ac1417f224b826cc Mon Sep 17 00:00:00 2001 From: yubaolee Date: Fri, 16 May 2025 14:34:16 +0800 Subject: [PATCH] fix: #I7XLQK --- OpenAuth.App/Flow/FlowLine.cs | 62 +++++++++++++++++++++++++++++--- OpenAuth.App/Flow/FlowRuntime.cs | 8 ++++- 2 files changed, 65 insertions(+), 5 deletions(-) diff --git a/OpenAuth.App/Flow/FlowLine.cs b/OpenAuth.App/Flow/FlowLine.cs index 80433646..7b80669f 100644 --- a/OpenAuth.App/Flow/FlowLine.cs +++ b/OpenAuth.App/Flow/FlowLine.cs @@ -34,11 +34,31 @@ namespace OpenAuth.App.Flow bool result = true; foreach (var compare in Compares) { + object objVal = frmDataJson.GetValue(compare.FieldName.ToLower()); + string fieldVal = null; + List fieldVals = new List(); + if(compare.FieldType == "checkbox") + { + if (objVal is JArray jArray) + { + var tempvals = jArray.ToObject>(); + if (tempvals != null && tempvals.Any()) + { + fieldVals.AddRange(tempvals); + } + } + } + else + { + fieldVal = objVal?.ToString(); + } + + // 判断是否为空值操作符 if (compare.Operation == DataCompare.IsNull || compare.Operation == DataCompare.IsNotNull) { - var fieldExists = frmDataJson.GetValue(compare.FieldName.ToLower()) != null; - var fieldEmpty = !fieldExists || string.IsNullOrWhiteSpace(frmDataJson.GetValue(compare.FieldName.ToLower())?.ToString()); + var fieldExists = objVal != null; + var fieldEmpty = !fieldExists || string.IsNullOrWhiteSpace(objVal.ToString()); if (compare.Operation == DataCompare.IsNull) { @@ -52,14 +72,48 @@ namespace OpenAuth.App.Flow } // 确保字段存在且不为空 - if (frmDataJson.GetValue(compare.FieldName.ToLower()) == null) + if (objVal == null) { result = false; continue; } - var fieldVal = frmDataJson.GetValue(compare.FieldName.ToLower()).ToString(); + // checkbox类型特殊处理 + if (compare.FieldType == "checkbox") + { + // 针对checkbox的IN和NOT IN操作 + if (compare.Operation == DataCompare.In || compare.Operation == DataCompare.NotIn) + { + if (compare.ValueList == null || compare.ValueList.Length == 0) + { + result = false; + continue; + } + // 检查是否有交集 + bool hasIntersection = fieldVals.Any(v => compare.ValueList.Contains(v)); + result &= compare.Operation == DataCompare.In ? hasIntersection : !hasIntersection; + continue; + } + + // 针对checkbox的相等和不等操作 + if (compare.Operation == DataCompare.Equal) + { + result &= fieldVals.Contains(compare.Value); + continue; + } + else if (compare.Operation == DataCompare.NotEqual) + { + result &= !fieldVals.Contains(compare.Value); + continue; + } + + // 其他操作不适用于checkbox,默认为false + result = false; + continue; + } + + // 以下是非checkbox类型的处理逻辑 // 范围操作符处理 if (compare.Operation == DataCompare.In || compare.Operation == DataCompare.NotIn) { diff --git a/OpenAuth.App/Flow/FlowRuntime.cs b/OpenAuth.App/Flow/FlowRuntime.cs index 0311fc6c..299f68d5 100644 --- a/OpenAuth.App/Flow/FlowRuntime.cs +++ b/OpenAuth.App/Flow/FlowRuntime.cs @@ -124,8 +124,14 @@ namespace OpenAuth.App.Flow if (FrmData == "" || FrmData == "{}") return lines[0].to; - FrmData = FrmData.ToLower(); //统一转小写 var frmDataJson = FrmData.ToJObject(); //获取数据内容 + // 将frmDataJson中的所有key转小写 + var properties = frmDataJson.Properties().ToList(); + foreach (var property in properties) + { + frmDataJson[property.Name.ToLower()] = property.Value; + frmDataJson.Remove(property.Name); + } foreach (var l in lines) {