@nokecy/qc-ui 1.1.22 → 1.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,6 +15,91 @@ import dayjs from 'dayjs';
15
15
  var esc = function esc(v) {
16
16
  return v.replace(/([(),|,\\]|\/i)/g, '\\$1');
17
17
  };
18
+
19
+ // --- Query Builder Logic Helpers (P0) ---
20
+
21
+ /**
22
+ * 将高级查询规则转换为后端 Filter 字符串
23
+ * 注意: 目前为了保持兼容性,只能尽量将 OR 转换为后端支持的格式(如 A=1|A=2),
24
+ * 复杂的嵌套 OR 可能需要后端升级支持。当前策略是尽力转换。
25
+ */
26
+ export var convertRulesToFilterString = function convertRulesToFilterString(ruleGroup, colDefs) {
27
+ if (!ruleGroup || !ruleGroup.children || ruleGroup.children.length === 0) {
28
+ return "";
29
+ }
30
+ var processGroup = function processGroup(group) {
31
+ var results = [];
32
+ var isAnd = group.logic === 'AND';
33
+ group.children.forEach(function (child) {
34
+ if (child.logic) {
35
+ // Nested Group
36
+ var childFilters = processGroup(child);
37
+ if (childFilters.length > 0) {
38
+ // 简单的嵌套处理,如果顶层是 AND,子组也是 AND,则展开
39
+ // 如果逻辑不一致,目前简单的 Filter String 可能无法完美表达 ((A=1) AND (B=2)) OR (C=3)
40
+ // 现在的降级策略:如果是 OR 组,尝试用逗号分隔(但标准是 AND 用逗号)
41
+ // TODO: 确认后端是否支持 SQL-like filter string。
42
+ // 假设目前只处理最简单的:平铺的 AND
43
+ results.push.apply(results, _toConsumableArray(childFilters)); // 暂时打平
44
+ }
45
+ } else {
46
+ // Rule
47
+ var colDef = colDefs.find(function (c) {
48
+ return c.field === child.field;
49
+ });
50
+ var filter = getRuleFilter(child, colDef);
51
+ if (filter) {
52
+ results.push(filter);
53
+ }
54
+ }
55
+ });
56
+ return results;
57
+ };
58
+
59
+ // 目前为了兼容性,强制打平输出。高级功能的完整支持依赖后端。
60
+ // 这里我们把所有规则都视为可以通过 convertFilterModel 处理的单元
61
+ var filters = processGroup(ruleGroup);
62
+ return filters.join(",");
63
+ };
64
+ var getRuleFilter = function getRuleFilter(rule, colDef) {
65
+ var field = rule.field,
66
+ operator = rule.operator,
67
+ value = rule.value;
68
+ if (value === undefined || value === null || value === "") return "";
69
+ var objectKey = field;
70
+
71
+ // 根据操作符构造查询串
72
+ switch (operator) {
73
+ case '=':
74
+ return "".concat(objectKey, " = ").concat(value);
75
+ case '!=':
76
+ return "".concat(objectKey, " != ").concat(value);
77
+ case '>':
78
+ return "".concat(objectKey, " > ").concat(value);
79
+ case '>=':
80
+ return "".concat(objectKey, " >= ").concat(value);
81
+ case '<':
82
+ return "".concat(objectKey, " < ").concat(value);
83
+ case '<=':
84
+ return "".concat(objectKey, " <= ").concat(value);
85
+ case 'contains':
86
+ return "".concat(objectKey, " =* ").concat(esc(value));
87
+ case 'startsWith':
88
+ return "".concat(objectKey, " ^ ").concat(esc(value));
89
+ case 'endsWith':
90
+ // 后端可能不支持 endWith 语法,暂用 =*
91
+ return "".concat(objectKey, " =* ").concat(esc(value));
92
+ case 'between':
93
+ if (Array.isArray(value)) {
94
+ // 复用现有的 range 逻辑
95
+ return getFilter(objectKey, value, colDef);
96
+ }
97
+ return "";
98
+ default:
99
+ // 默认回退到标准处理
100
+ return getFilter(objectKey, value, colDef);
101
+ }
102
+ };
18
103
  var getFilter = function getFilter(objectKey, value, colDef) {
19
104
  if (typeof value === 'string') {
20
105
  return value && value != "" ? "".concat(objectKey, " ").concat(colDef !== null && colDef !== void 0 && colDef.exactQuery ? '^' : "=*", " ").concat(esc(value)) : "";