优化打印预览窗口的参数生成逻辑,支持根据合并字段顺序生成相应的 JSON 数据,增强打印模板的灵活性和可定制性。同时,修复了列级合并逻辑,确保在处理重复键时不会抛出异常。

This commit is contained in:
geht
2026-05-12 18:55:12 +08:00
parent bdb4eb5148
commit d2f49add82
2 changed files with 65 additions and 13 deletions

View File

@@ -1017,14 +1017,18 @@ public static class NativePrintRenderService
var colList = columns.OfType<JsonObject>().ToList();
if (mergeColumnKeys.Length > 0)
{
var byKey = colList.ToDictionary(
c => ReadAsString(c["key"]) ?? string.Empty,
c => ReadAsString(c["bindField"]) ?? ReadAsString(c["field"]) ?? string.Empty);
// 用 GroupBy 兜底,避免重复 key 抛异常;按 mergeColumnKeys 给定顺序输出对应 bindField/field
var byKey = colList
.GroupBy(c => ReadAsString(c["key"]) ?? string.Empty)
.ToDictionary(
g => g.Key,
g => ReadAsString(g.First()["bindField"]) ?? ReadAsString(g.First()["field"]) ?? string.Empty);
return mergeColumnKeys
.Select(k => byKey.TryGetValue(k, out var f) ? f : string.Empty)
.Where(f => !string.IsNullOrEmpty(f))
.ToList();
}
// 兼容老的列级 mergeByValue 开关
return colList
.Where(c => string.Equals(ReadAsString(c["mergeByValue"]), "true", StringComparison.OrdinalIgnoreCase))
.Select(c => ReadAsString(c["bindField"]) ?? ReadAsString(c["field"]) ?? string.Empty)