@nokecy/qc-ui 1.0.63 → 1.0.66

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.
Files changed (85) hide show
  1. package/dist/cjs/RuleBuilder/LogicSelector.d.ts +23 -0
  2. package/dist/cjs/RuleBuilder/LogicSelector.js +54 -0
  3. package/dist/cjs/RuleBuilder/RuleBuilderContainer.d.ts +20 -0
  4. package/dist/cjs/RuleBuilder/RuleBuilderContainer.js +209 -0
  5. package/dist/cjs/RuleBuilder/RuleCard.d.ts +20 -0
  6. package/dist/cjs/RuleBuilder/RuleCard.js +196 -0
  7. package/dist/cjs/RuleBuilder/RuleGroupEditor.d.ts +25 -0
  8. package/dist/cjs/RuleBuilder/RuleGroupEditor.js +191 -0
  9. package/dist/cjs/RuleBuilder/constants/operators.d.ts +47 -0
  10. package/dist/cjs/RuleBuilder/constants/operators.js +172 -0
  11. package/dist/cjs/RuleBuilder/context/RuleBuilderContext.d.ts +72 -0
  12. package/dist/cjs/RuleBuilder/context/RuleBuilderContext.js +286 -0
  13. package/dist/cjs/RuleBuilder/index.d.ts +25 -0
  14. package/dist/cjs/RuleBuilder/index.js +308 -0
  15. package/dist/cjs/RuleBuilder/inputs/BetweenValueInput.d.ts +23 -0
  16. package/dist/cjs/RuleBuilder/inputs/BetweenValueInput.js +80 -0
  17. package/dist/cjs/RuleBuilder/inputs/MultiValueInput.d.ts +21 -0
  18. package/dist/cjs/RuleBuilder/inputs/MultiValueInput.js +128 -0
  19. package/dist/cjs/RuleBuilder/inputs/SingleValueInput.d.ts +25 -0
  20. package/dist/cjs/RuleBuilder/inputs/SingleValueInput.js +81 -0
  21. package/dist/cjs/RuleBuilder/inputs/ValueInput.d.ts +29 -0
  22. package/dist/cjs/RuleBuilder/inputs/ValueInput.js +80 -0
  23. package/dist/cjs/RuleBuilder/selectors/FieldSelector.d.ts +22 -0
  24. package/dist/cjs/RuleBuilder/selectors/FieldSelector.js +45 -0
  25. package/dist/cjs/RuleBuilder/selectors/OperatorSelector.d.ts +22 -0
  26. package/dist/cjs/RuleBuilder/selectors/OperatorSelector.js +51 -0
  27. package/dist/cjs/RuleBuilder/styles/index.module.less +443 -0
  28. package/dist/cjs/RuleBuilder/styles/index.module.less.d.ts +43 -0
  29. package/dist/cjs/RuleBuilder/types/index.d.ts +232 -0
  30. package/dist/cjs/RuleBuilder/types/index.js +83 -0
  31. package/dist/cjs/RuleBuilder/utils/pathHelpers.d.ts +65 -0
  32. package/dist/cjs/RuleBuilder/utils/pathHelpers.js +241 -0
  33. package/dist/cjs/RuleBuilder/utils/ruleHelpers.d.ts +47 -0
  34. package/dist/cjs/RuleBuilder/utils/ruleHelpers.js +154 -0
  35. package/dist/cjs/RuleBuilder/utils/validation.d.ts +25 -0
  36. package/dist/cjs/RuleBuilder/utils/validation.js +241 -0
  37. package/dist/cjs/generatedListPage/_utils/defaultHandlers.js +24 -11
  38. package/dist/cjs/index.d.ts +3 -1
  39. package/dist/cjs/index.js +7 -0
  40. package/dist/cjs/standardFormDialog/StandardFormDialog.js +26 -5
  41. package/dist/cjs/standardFormDialog/withStandardForm.js +6 -1
  42. package/dist/esm/RuleBuilder/LogicSelector.d.ts +23 -0
  43. package/dist/esm/RuleBuilder/LogicSelector.js +47 -0
  44. package/dist/esm/RuleBuilder/RuleBuilderContainer.d.ts +20 -0
  45. package/dist/esm/RuleBuilder/RuleBuilderContainer.js +203 -0
  46. package/dist/esm/RuleBuilder/RuleCard.d.ts +20 -0
  47. package/dist/esm/RuleBuilder/RuleCard.js +191 -0
  48. package/dist/esm/RuleBuilder/RuleGroupEditor.d.ts +25 -0
  49. package/dist/esm/RuleBuilder/RuleGroupEditor.js +184 -0
  50. package/dist/esm/RuleBuilder/constants/operators.d.ts +47 -0
  51. package/dist/esm/RuleBuilder/constants/operators.js +169 -0
  52. package/dist/esm/RuleBuilder/context/RuleBuilderContext.d.ts +72 -0
  53. package/dist/esm/RuleBuilder/context/RuleBuilderContext.js +271 -0
  54. package/dist/esm/RuleBuilder/index.d.ts +25 -0
  55. package/dist/esm/RuleBuilder/index.js +42 -0
  56. package/dist/esm/RuleBuilder/inputs/BetweenValueInput.d.ts +23 -0
  57. package/dist/esm/RuleBuilder/inputs/BetweenValueInput.js +73 -0
  58. package/dist/esm/RuleBuilder/inputs/MultiValueInput.d.ts +21 -0
  59. package/dist/esm/RuleBuilder/inputs/MultiValueInput.js +121 -0
  60. package/dist/esm/RuleBuilder/inputs/SingleValueInput.d.ts +25 -0
  61. package/dist/esm/RuleBuilder/inputs/SingleValueInput.js +74 -0
  62. package/dist/esm/RuleBuilder/inputs/ValueInput.d.ts +29 -0
  63. package/dist/esm/RuleBuilder/inputs/ValueInput.js +73 -0
  64. package/dist/esm/RuleBuilder/selectors/FieldSelector.d.ts +22 -0
  65. package/dist/esm/RuleBuilder/selectors/FieldSelector.js +38 -0
  66. package/dist/esm/RuleBuilder/selectors/OperatorSelector.d.ts +22 -0
  67. package/dist/esm/RuleBuilder/selectors/OperatorSelector.js +44 -0
  68. package/dist/esm/RuleBuilder/styles/index.module.less +443 -0
  69. package/dist/esm/RuleBuilder/styles/index.module.less.d.ts +43 -0
  70. package/dist/esm/RuleBuilder/types/index.d.ts +232 -0
  71. package/dist/esm/RuleBuilder/types/index.js +91 -0
  72. package/dist/esm/RuleBuilder/utils/pathHelpers.d.ts +65 -0
  73. package/dist/esm/RuleBuilder/utils/pathHelpers.js +228 -0
  74. package/dist/esm/RuleBuilder/utils/ruleHelpers.d.ts +47 -0
  75. package/dist/esm/RuleBuilder/utils/ruleHelpers.js +145 -0
  76. package/dist/esm/RuleBuilder/utils/validation.d.ts +25 -0
  77. package/dist/esm/RuleBuilder/utils/validation.js +236 -0
  78. package/dist/esm/generatedListPage/_utils/defaultHandlers.js +24 -11
  79. package/dist/esm/index.d.ts +3 -1
  80. package/dist/esm/index.js +2 -1
  81. package/dist/esm/standardFormDialog/StandardFormDialog.js +26 -5
  82. package/dist/esm/standardFormDialog/withStandardForm.js +7 -2
  83. package/dist/umd/qc-ui.min.css +1 -1
  84. package/dist/umd/qc-ui.min.js +1 -1
  85. package/package.json +2 -2
@@ -0,0 +1,91 @@
1
+ /**
2
+ * 规则构建器类型定义
3
+ *
4
+ * ⚠️ 重要:与后端定义完全一致
5
+ * - 后端 Domain: Burn.Abp.RuleEngine.Domain.Shared (Rule, RuleGroup)
6
+ * - 后端 DTO: Burn.Abp.LabelManagement.Application.Contracts.RuleEngine (RuleDto, RuleGroupDto)
7
+ *
8
+ * JSON 序列化属性名:
9
+ * - fieldName (不是 FieldName)
10
+ * - operator (不是 Operator)
11
+ * - value, value2
12
+ * - logic, rules, groups
13
+ */
14
+
15
+ /**
16
+ * 操作符显示信息
17
+ */
18
+
19
+ /**
20
+ * 匹配操作符枚举
21
+ *
22
+ * 对应后端: Burn.Abp.RuleEngine.Domain.Shared.MatchOperator
23
+ */
24
+ export var MatchOperator = /*#__PURE__*/function (MatchOperator) {
25
+ MatchOperator[MatchOperator["Equals"] = 0] = "Equals";
26
+ MatchOperator[MatchOperator["NotEquals"] = 1] = "NotEquals";
27
+ MatchOperator[MatchOperator["GreaterThan"] = 2] = "GreaterThan";
28
+ MatchOperator[MatchOperator["GreaterThanOrEqual"] = 3] = "GreaterThanOrEqual";
29
+ MatchOperator[MatchOperator["LessThan"] = 4] = "LessThan";
30
+ MatchOperator[MatchOperator["LessThanOrEqual"] = 5] = "LessThanOrEqual";
31
+ MatchOperator[MatchOperator["In"] = 6] = "In";
32
+ MatchOperator[MatchOperator["NotIn"] = 7] = "NotIn";
33
+ MatchOperator[MatchOperator["Between"] = 8] = "Between";
34
+ MatchOperator[MatchOperator["Like"] = 9] = "Like";
35
+ MatchOperator[MatchOperator["IsNull"] = 10] = "IsNull";
36
+ MatchOperator[MatchOperator["IsNotNull"] = 11] = "IsNotNull";
37
+ return MatchOperator;
38
+ }({});
39
+
40
+ /**
41
+ * 逻辑连接符枚举(与后端保持一致)
42
+ */
43
+ export var MatchLogic = /*#__PURE__*/function (MatchLogic) {
44
+ MatchLogic[MatchLogic["And"] = 0] = "And";
45
+ MatchLogic[MatchLogic["Or"] = 1] = "Or";
46
+ return MatchLogic;
47
+ }({});
48
+
49
+ /**
50
+ * 规则 DTO(与后端保持一致)
51
+ */
52
+
53
+ /**
54
+ * 规则组 DTO(与后端保持一致)
55
+ */
56
+
57
+ /**
58
+ * 字段数据类型
59
+ */
60
+
61
+ /**
62
+ * 字段定义
63
+ */
64
+
65
+ /**
66
+ * 验证错误
67
+ */
68
+
69
+ /**
70
+ * 验证结果
71
+ */
72
+
73
+ /**
74
+ * 规则构建器配置
75
+ */
76
+
77
+ /**
78
+ * 规则构建器 Props
79
+ */
80
+
81
+ /**
82
+ * 规则路径(用于定位嵌套规则)
83
+ */
84
+
85
+ /**
86
+ * 规则构建器内部状态
87
+ */
88
+
89
+ /**
90
+ * 规则构建器 Action
91
+ */
@@ -0,0 +1,65 @@
1
+ /**
2
+ * 路径寻址工具函数
3
+ * 用于定位和操作嵌套规则组中的规则
4
+ */
5
+ import type { RuleDto, RuleGroupDto, RulePath } from '../types';
6
+ /**
7
+ * 根据路径获取规则组
8
+ * @param group 根规则组
9
+ * @param path 路径数组
10
+ * @returns 目标规则组,如果路径无效则返回根组
11
+ */
12
+ export declare function getRuleGroupByPath(group: RuleGroupDto, path: RulePath): RuleGroupDto;
13
+ /**
14
+ * 根据路径获取规则
15
+ * @param group 根规则组
16
+ * @param path 路径数组(最后一个元素是规则索引)
17
+ * @returns 目标规则,如果路径无效则返回 undefined
18
+ */
19
+ export declare function getRuleByPath(group: RuleGroupDto, path: RulePath): RuleDto | undefined;
20
+ /**
21
+ * 根据路径更新规则(不可变更新)
22
+ * @param group 根规则组
23
+ * @param path 路径数组
24
+ * @param rule 新的规则对象
25
+ * @returns 更新后的规则组(新对象)
26
+ */
27
+ export declare function updateRuleAtPath(group: RuleGroupDto, path: RulePath, rule: RuleDto): RuleGroupDto;
28
+ /**
29
+ * 根据路径删除规则(不可变更新)
30
+ * @param group 根规则组
31
+ * @param path 路径数组
32
+ * @returns 更新后的规则组(新对象)
33
+ */
34
+ export declare function deleteRuleAtPath(group: RuleGroupDto, path: RulePath): RuleGroupDto;
35
+ /**
36
+ * 根据路径添加规则(不可变更新)
37
+ * @param group 根规则组
38
+ * @param path 路径数组(指向目标规则组)
39
+ * @param rule 新规则
40
+ * @returns 更新后的规则组(新对象)
41
+ */
42
+ export declare function addRuleAtPath(group: RuleGroupDto, path: RulePath, rule: RuleDto): RuleGroupDto;
43
+ /**
44
+ * 根据路径更新规则组(不可变更新)
45
+ * @param group 根规则组
46
+ * @param path 路径数组
47
+ * @param updatedGroup 新的规则组对象
48
+ * @returns 更新后的规则组(新对象)
49
+ */
50
+ export declare function updateRuleGroupAtPath(group: RuleGroupDto, path: RulePath, updatedGroup: RuleGroupDto): RuleGroupDto;
51
+ /**
52
+ * 根据路径删除规则组(不可变更新)
53
+ * @param group 根规则组
54
+ * @param path 路径数组
55
+ * @returns 更新后的规则组(新对象)
56
+ */
57
+ export declare function deleteRuleGroupAtPath(group: RuleGroupDto, path: RulePath): RuleGroupDto;
58
+ /**
59
+ * 根据路径添加规则组(不可变更新)
60
+ * @param group 根规则组
61
+ * @param path 路径数组(指向目标父规则组)
62
+ * @param newGroup 新规则组
63
+ * @returns 更新后的规则组(新对象)
64
+ */
65
+ export declare function addRuleGroupAtPath(group: RuleGroupDto, path: RulePath, newGroup: RuleGroupDto): RuleGroupDto;
@@ -0,0 +1,228 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
8
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
11
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
12
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
13
+ /**
14
+ * 路径寻址工具函数
15
+ * 用于定位和操作嵌套规则组中的规则
16
+ */
17
+
18
+ /**
19
+ * 根据路径获取规则组
20
+ * @param group 根规则组
21
+ * @param path 路径数组
22
+ * @returns 目标规则组,如果路径无效则返回根组
23
+ */
24
+ export function getRuleGroupByPath(group, path) {
25
+ if (path.length === 0) {
26
+ return group;
27
+ }
28
+
29
+ // 路径格式: [groupIndex, groupIndex, ...]
30
+ // 例如: [0] 表示 groups[0], [0, 1] 表示 groups[0].groups[1]
31
+ var current = group;
32
+ for (var i = 0; i < path.length; i++) {
33
+ var index = path[i];
34
+ if (current.groups && current.groups[index]) {
35
+ current = current.groups[index];
36
+ } else {
37
+ // 路径无效,返回当前层级
38
+ return current;
39
+ }
40
+ }
41
+ return current;
42
+ }
43
+
44
+ /**
45
+ * 根据路径获取规则
46
+ * @param group 根规则组
47
+ * @param path 路径数组(最后一个元素是规则索引)
48
+ * @returns 目标规则,如果路径无效则返回 undefined
49
+ */
50
+ export function getRuleByPath(group, path) {
51
+ if (path.length === 0) {
52
+ return undefined;
53
+ }
54
+
55
+ // 分离出规则索引和组路径
56
+ var ruleIndex = path[path.length - 1];
57
+ var groupPath = path.slice(0, -1);
58
+ var targetGroup = getRuleGroupByPath(group, groupPath);
59
+ return targetGroup.rules[ruleIndex];
60
+ }
61
+
62
+ /**
63
+ * 根据路径更新规则(不可变更新)
64
+ * @param group 根规则组
65
+ * @param path 路径数组
66
+ * @param rule 新的规则对象
67
+ * @returns 更新后的规则组(新对象)
68
+ */
69
+ export function updateRuleAtPath(group, path, rule) {
70
+ if (path.length === 0) {
71
+ return group;
72
+ }
73
+ var ruleIndex = path[path.length - 1];
74
+ var groupPath = path.slice(0, -1);
75
+ if (groupPath.length === 0) {
76
+ // 更新根组中的规则
77
+ var newRules = _toConsumableArray(group.rules);
78
+ newRules[ruleIndex] = rule;
79
+ return _objectSpread(_objectSpread({}, group), {}, {
80
+ rules: newRules
81
+ });
82
+ }
83
+
84
+ // 递归更新嵌套组
85
+ var firstIndex = groupPath[0];
86
+ var restPath = groupPath.slice(1);
87
+ var newGroups = _toConsumableArray(group.groups);
88
+ newGroups[firstIndex] = updateRuleAtPath(newGroups[firstIndex], [].concat(_toConsumableArray(restPath), [ruleIndex]), rule);
89
+ return _objectSpread(_objectSpread({}, group), {}, {
90
+ groups: newGroups
91
+ });
92
+ }
93
+
94
+ /**
95
+ * 根据路径删除规则(不可变更新)
96
+ * @param group 根规则组
97
+ * @param path 路径数组
98
+ * @returns 更新后的规则组(新对象)
99
+ */
100
+ export function deleteRuleAtPath(group, path) {
101
+ if (path.length === 0) {
102
+ return group;
103
+ }
104
+ var ruleIndex = path[path.length - 1];
105
+ var groupPath = path.slice(0, -1);
106
+ if (groupPath.length === 0) {
107
+ // 删除根组中的规则
108
+ var newRules = group.rules.filter(function (_, index) {
109
+ return index !== ruleIndex;
110
+ });
111
+ return _objectSpread(_objectSpread({}, group), {}, {
112
+ rules: newRules
113
+ });
114
+ }
115
+
116
+ // 递归删除嵌套组中的规则
117
+ var firstIndex = groupPath[0];
118
+ var restPath = groupPath.slice(1);
119
+ var newGroups = _toConsumableArray(group.groups);
120
+ newGroups[firstIndex] = deleteRuleAtPath(newGroups[firstIndex], [].concat(_toConsumableArray(restPath), [ruleIndex]));
121
+ return _objectSpread(_objectSpread({}, group), {}, {
122
+ groups: newGroups
123
+ });
124
+ }
125
+
126
+ /**
127
+ * 根据路径添加规则(不可变更新)
128
+ * @param group 根规则组
129
+ * @param path 路径数组(指向目标规则组)
130
+ * @param rule 新规则
131
+ * @returns 更新后的规则组(新对象)
132
+ */
133
+ export function addRuleAtPath(group, path, rule) {
134
+ if (path.length === 0) {
135
+ // 添加到根组
136
+ return _objectSpread(_objectSpread({}, group), {}, {
137
+ rules: [].concat(_toConsumableArray(group.rules), [rule])
138
+ });
139
+ }
140
+
141
+ // 递归添加到嵌套组
142
+ var firstIndex = path[0];
143
+ var restPath = path.slice(1);
144
+ var newGroups = _toConsumableArray(group.groups);
145
+ newGroups[firstIndex] = addRuleAtPath(newGroups[firstIndex], restPath, rule);
146
+ return _objectSpread(_objectSpread({}, group), {}, {
147
+ groups: newGroups
148
+ });
149
+ }
150
+
151
+ /**
152
+ * 根据路径更新规则组(不可变更新)
153
+ * @param group 根规则组
154
+ * @param path 路径数组
155
+ * @param updatedGroup 新的规则组对象
156
+ * @returns 更新后的规则组(新对象)
157
+ */
158
+ export function updateRuleGroupAtPath(group, path, updatedGroup) {
159
+ if (path.length === 0) {
160
+ return updatedGroup;
161
+ }
162
+
163
+ // 递归更新嵌套组
164
+ var firstIndex = path[0];
165
+ var restPath = path.slice(1);
166
+ var newGroups = _toConsumableArray(group.groups);
167
+ newGroups[firstIndex] = updateRuleGroupAtPath(newGroups[firstIndex], restPath, updatedGroup);
168
+ return _objectSpread(_objectSpread({}, group), {}, {
169
+ groups: newGroups
170
+ });
171
+ }
172
+
173
+ /**
174
+ * 根据路径删除规则组(不可变更新)
175
+ * @param group 根规则组
176
+ * @param path 路径数组
177
+ * @returns 更新后的规则组(新对象)
178
+ */
179
+ export function deleteRuleGroupAtPath(group, path) {
180
+ if (path.length === 0) {
181
+ // 不能删除根组
182
+ return group;
183
+ }
184
+ if (path.length === 1) {
185
+ // 删除第一层的组
186
+ var groupIndex = path[0];
187
+ var _newGroups = group.groups.filter(function (_, index) {
188
+ return index !== groupIndex;
189
+ });
190
+ return _objectSpread(_objectSpread({}, group), {}, {
191
+ groups: _newGroups
192
+ });
193
+ }
194
+
195
+ // 递归删除嵌套组
196
+ var firstIndex = path[0];
197
+ var restPath = path.slice(1);
198
+ var newGroups = _toConsumableArray(group.groups);
199
+ newGroups[firstIndex] = deleteRuleGroupAtPath(newGroups[firstIndex], restPath);
200
+ return _objectSpread(_objectSpread({}, group), {}, {
201
+ groups: newGroups
202
+ });
203
+ }
204
+
205
+ /**
206
+ * 根据路径添加规则组(不可变更新)
207
+ * @param group 根规则组
208
+ * @param path 路径数组(指向目标父规则组)
209
+ * @param newGroup 新规则组
210
+ * @returns 更新后的规则组(新对象)
211
+ */
212
+ export function addRuleGroupAtPath(group, path, newGroup) {
213
+ if (path.length === 0) {
214
+ // 添加到根组
215
+ return _objectSpread(_objectSpread({}, group), {}, {
216
+ groups: [].concat(_toConsumableArray(group.groups), [newGroup])
217
+ });
218
+ }
219
+
220
+ // 递归添加到嵌套组
221
+ var firstIndex = path[0];
222
+ var restPath = path.slice(1);
223
+ var newGroups = _toConsumableArray(group.groups);
224
+ newGroups[firstIndex] = addRuleGroupAtPath(newGroups[firstIndex], restPath, newGroup);
225
+ return _objectSpread(_objectSpread({}, group), {}, {
226
+ groups: newGroups
227
+ });
228
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * 规则操作辅助函数
3
+ */
4
+ import type { RuleDto, RuleGroupDto, MatchLogic, FieldDefinition } from '../types';
5
+ /**
6
+ * 创建空规则
7
+ * @param fieldName 可选的字段名
8
+ * @returns 新的空规则对象
9
+ */
10
+ export declare function createEmptyRule(fieldName?: string): RuleDto;
11
+ /**
12
+ * 创建空规则组
13
+ * @param logic 逻辑关系,默认为 And
14
+ * @returns 新的空规则组对象
15
+ */
16
+ export declare function createEmptyRuleGroup(logic?: MatchLogic): RuleGroupDto;
17
+ /**
18
+ * 生成规则的可读描述
19
+ * @param rule 规则对象
20
+ * @param field 字段定义(可选)
21
+ * @returns 可读的规则描述字符串
22
+ */
23
+ export declare function generateRuleDescription(rule: RuleDto, field?: FieldDefinition): string;
24
+ /**
25
+ * 深度克隆规则组(用于不可变更新)
26
+ * @param group 规则组
27
+ * @returns 克隆后的规则组
28
+ */
29
+ export declare function cloneRuleGroup(group: RuleGroupDto): RuleGroupDto;
30
+ /**
31
+ * 检查规则组是否为空
32
+ * @param group 规则组
33
+ * @returns 是否为空
34
+ */
35
+ export declare function isRuleGroupEmpty(group: RuleGroupDto): boolean;
36
+ /**
37
+ * 统计规则组中的规则总数(递归)
38
+ * @param group 规则组
39
+ * @returns 规则总数
40
+ */
41
+ export declare function countRules(group: RuleGroupDto): number;
42
+ /**
43
+ * 获取规则组的最大嵌套深度
44
+ * @param group 规则组
45
+ * @returns 最大深度
46
+ */
47
+ export declare function getMaxDepth(group: RuleGroupDto): number;
@@ -0,0 +1,145 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
3
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
5
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
6
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
7
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
8
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
9
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
10
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
12
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
13
+ /**
14
+ * 规则操作辅助函数
15
+ */
16
+
17
+ import { getOperatorInfo } from "../constants/operators";
18
+
19
+ /**
20
+ * 创建空规则
21
+ * @param fieldName 可选的字段名
22
+ * @returns 新的空规则对象
23
+ */
24
+ export function createEmptyRule(fieldName) {
25
+ return {
26
+ fieldName: fieldName || '',
27
+ operator: 0,
28
+ // Equals
29
+ value: undefined,
30
+ value2: undefined
31
+ };
32
+ }
33
+
34
+ /**
35
+ * 创建空规则组
36
+ * @param logic 逻辑关系,默认为 And
37
+ * @returns 新的空规则组对象
38
+ */
39
+ export function createEmptyRuleGroup() {
40
+ var logic = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
41
+ return {
42
+ logic: logic,
43
+ rules: [],
44
+ groups: []
45
+ };
46
+ }
47
+
48
+ /**
49
+ * 生成规则的可读描述
50
+ * @param rule 规则对象
51
+ * @param field 字段定义(可选)
52
+ * @returns 可读的规则描述字符串
53
+ */
54
+ export function generateRuleDescription(rule, field) {
55
+ var fieldDisplayName = (field === null || field === void 0 ? void 0 : field.displayName) || rule.fieldName;
56
+ var operatorInfo = getOperatorInfo(rule.operator);
57
+ if (!fieldDisplayName) {
58
+ return '请选择字段';
59
+ }
60
+ if (!operatorInfo) {
61
+ return "".concat(fieldDisplayName, " (\u672A\u77E5\u64CD\u4F5C\u7B26)");
62
+ }
63
+
64
+ // IsNull 和 IsNotNull 不需要值
65
+ if (rule.operator === 10 || rule.operator === 11) {
66
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.label);
67
+ }
68
+
69
+ // Between 需要两个值
70
+ if (rule.operator === 8) {
71
+ if (rule.value !== undefined && rule.value2 !== undefined) {
72
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.label, " ").concat(rule.value, " \u548C ").concat(rule.value2);
73
+ }
74
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.label, " (\u8BF7\u8F93\u5165\u8303\u56F4)");
75
+ }
76
+
77
+ // In 和 NotIn 需要多个值
78
+ if (rule.operator === 6 || rule.operator === 7) {
79
+ if (Array.isArray(rule.value) && rule.value.length > 0) {
80
+ var valueStr = rule.value.join(', ');
81
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.label, " [").concat(valueStr, "]");
82
+ }
83
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.label, " (\u8BF7\u8F93\u5165\u503C\u5217\u8868)");
84
+ }
85
+
86
+ // 其他操作符需要单个值
87
+ if (rule.value !== undefined && rule.value !== null && rule.value !== '') {
88
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.symbol, " ").concat(rule.value);
89
+ }
90
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.label, " (\u8BF7\u8F93\u5165\u503C)");
91
+ }
92
+
93
+ /**
94
+ * 深度克隆规则组(用于不可变更新)
95
+ * @param group 规则组
96
+ * @returns 克隆后的规则组
97
+ */
98
+ export function cloneRuleGroup(group) {
99
+ return {
100
+ logic: group.logic,
101
+ rules: group.rules.map(function (rule) {
102
+ return _objectSpread({}, rule);
103
+ }),
104
+ groups: group.groups.map(function (g) {
105
+ return cloneRuleGroup(g);
106
+ })
107
+ };
108
+ }
109
+
110
+ /**
111
+ * 检查规则组是否为空
112
+ * @param group 规则组
113
+ * @returns 是否为空
114
+ */
115
+ export function isRuleGroupEmpty(group) {
116
+ return group.rules.length === 0 && group.groups.length === 0;
117
+ }
118
+
119
+ /**
120
+ * 统计规则组中的规则总数(递归)
121
+ * @param group 规则组
122
+ * @returns 规则总数
123
+ */
124
+ export function countRules(group) {
125
+ var count = group.rules.length;
126
+ group.groups.forEach(function (g) {
127
+ count += countRules(g);
128
+ });
129
+ return count;
130
+ }
131
+
132
+ /**
133
+ * 获取规则组的最大嵌套深度
134
+ * @param group 规则组
135
+ * @returns 最大深度
136
+ */
137
+ export function getMaxDepth(group) {
138
+ if (group.groups.length === 0) {
139
+ return 1;
140
+ }
141
+ var childDepths = group.groups.map(function (g) {
142
+ return getMaxDepth(g);
143
+ });
144
+ return 1 + Math.max.apply(Math, _toConsumableArray(childDepths));
145
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 规则验证逻辑
3
+ */
4
+ import type { RuleDto, RuleGroupDto, FieldDefinition, ValidationResult, ValidationError } from '../types';
5
+ /**
6
+ * 验证规则组
7
+ * @param group 规则组
8
+ * @param fields 字段定义列表
9
+ * @returns 验证结果
10
+ */
11
+ export declare function validateRuleGroup(group: RuleGroupDto, fields: FieldDefinition[]): ValidationResult;
12
+ /**
13
+ * 验证单条规则
14
+ * @param rule 规则
15
+ * @param fields 字段定义列表
16
+ * @returns 错误列表
17
+ */
18
+ export declare function validateRule(rule: RuleDto, fields: FieldDefinition[]): ValidationError[];
19
+ /**
20
+ * 简化的验证(只检查是否有致命错误)
21
+ * @param group 规则组
22
+ * @param fields 字段定义列表
23
+ * @returns 是否有效
24
+ */
25
+ export declare function isRuleGroupValid(group: RuleGroupDto, fields: FieldDefinition[]): boolean;