@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,83 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MatchOperator = exports.MatchLogic = void 0;
7
+ /**
8
+ * 规则构建器类型定义
9
+ *
10
+ * ⚠️ 重要:与后端定义完全一致
11
+ * - 后端 Domain: Burn.Abp.RuleEngine.Domain.Shared (Rule, RuleGroup)
12
+ * - 后端 DTO: Burn.Abp.LabelManagement.Application.Contracts.RuleEngine (RuleDto, RuleGroupDto)
13
+ *
14
+ * JSON 序列化属性名:
15
+ * - fieldName (不是 FieldName)
16
+ * - operator (不是 Operator)
17
+ * - value, value2
18
+ * - logic, rules, groups
19
+ */
20
+ /**
21
+ * 操作符显示信息
22
+ */
23
+ /**
24
+ * 匹配操作符枚举
25
+ *
26
+ * 对应后端: Burn.Abp.RuleEngine.Domain.Shared.MatchOperator
27
+ */
28
+ var MatchOperator = exports.MatchOperator = /*#__PURE__*/function (MatchOperator) {
29
+ MatchOperator[MatchOperator["Equals"] = 0] = "Equals";
30
+ MatchOperator[MatchOperator["NotEquals"] = 1] = "NotEquals";
31
+ MatchOperator[MatchOperator["GreaterThan"] = 2] = "GreaterThan";
32
+ MatchOperator[MatchOperator["GreaterThanOrEqual"] = 3] = "GreaterThanOrEqual";
33
+ MatchOperator[MatchOperator["LessThan"] = 4] = "LessThan";
34
+ MatchOperator[MatchOperator["LessThanOrEqual"] = 5] = "LessThanOrEqual";
35
+ MatchOperator[MatchOperator["In"] = 6] = "In";
36
+ MatchOperator[MatchOperator["NotIn"] = 7] = "NotIn";
37
+ MatchOperator[MatchOperator["Between"] = 8] = "Between";
38
+ MatchOperator[MatchOperator["Like"] = 9] = "Like";
39
+ MatchOperator[MatchOperator["IsNull"] = 10] = "IsNull";
40
+ MatchOperator[MatchOperator["IsNotNull"] = 11] = "IsNotNull";
41
+ return MatchOperator;
42
+ }({});
43
+ /**
44
+ * 逻辑连接符枚举(与后端保持一致)
45
+ */
46
+ var MatchLogic = exports.MatchLogic = /*#__PURE__*/function (MatchLogic) {
47
+ MatchLogic[MatchLogic["And"] = 0] = "And";
48
+ MatchLogic[MatchLogic["Or"] = 1] = "Or";
49
+ return MatchLogic;
50
+ }({});
51
+ /**
52
+ * 规则 DTO(与后端保持一致)
53
+ */
54
+ /**
55
+ * 规则组 DTO(与后端保持一致)
56
+ */
57
+ /**
58
+ * 字段数据类型
59
+ */
60
+ /**
61
+ * 字段定义
62
+ */
63
+ /**
64
+ * 验证错误
65
+ */
66
+ /**
67
+ * 验证结果
68
+ */
69
+ /**
70
+ * 规则构建器配置
71
+ */
72
+ /**
73
+ * 规则构建器 Props
74
+ */
75
+ /**
76
+ * 规则路径(用于定位嵌套规则)
77
+ */
78
+ /**
79
+ * 规则构建器内部状态
80
+ */
81
+ /**
82
+ * 规则构建器 Action
83
+ */
@@ -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,241 @@
1
+ "use strict";
2
+
3
+ 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); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.addRuleAtPath = addRuleAtPath;
8
+ exports.addRuleGroupAtPath = addRuleGroupAtPath;
9
+ exports.deleteRuleAtPath = deleteRuleAtPath;
10
+ exports.deleteRuleGroupAtPath = deleteRuleGroupAtPath;
11
+ exports.getRuleByPath = getRuleByPath;
12
+ exports.getRuleGroupByPath = getRuleGroupByPath;
13
+ exports.updateRuleAtPath = updateRuleAtPath;
14
+ exports.updateRuleGroupAtPath = updateRuleGroupAtPath;
15
+ 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; }
16
+ 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; }
17
+ 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; }
18
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
19
+ 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); }
20
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
21
+ 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."); }
22
+ 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); }
23
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
24
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
25
+ 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; }
26
+ /**
27
+ * 路径寻址工具函数
28
+ * 用于定位和操作嵌套规则组中的规则
29
+ */
30
+
31
+ /**
32
+ * 根据路径获取规则组
33
+ * @param group 根规则组
34
+ * @param path 路径数组
35
+ * @returns 目标规则组,如果路径无效则返回根组
36
+ */
37
+ function getRuleGroupByPath(group, path) {
38
+ if (path.length === 0) {
39
+ return group;
40
+ }
41
+
42
+ // 路径格式: [groupIndex, groupIndex, ...]
43
+ // 例如: [0] 表示 groups[0], [0, 1] 表示 groups[0].groups[1]
44
+ var current = group;
45
+ for (var i = 0; i < path.length; i++) {
46
+ var index = path[i];
47
+ if (current.groups && current.groups[index]) {
48
+ current = current.groups[index];
49
+ } else {
50
+ // 路径无效,返回当前层级
51
+ return current;
52
+ }
53
+ }
54
+ return current;
55
+ }
56
+
57
+ /**
58
+ * 根据路径获取规则
59
+ * @param group 根规则组
60
+ * @param path 路径数组(最后一个元素是规则索引)
61
+ * @returns 目标规则,如果路径无效则返回 undefined
62
+ */
63
+ function getRuleByPath(group, path) {
64
+ if (path.length === 0) {
65
+ return undefined;
66
+ }
67
+
68
+ // 分离出规则索引和组路径
69
+ var ruleIndex = path[path.length - 1];
70
+ var groupPath = path.slice(0, -1);
71
+ var targetGroup = getRuleGroupByPath(group, groupPath);
72
+ return targetGroup.rules[ruleIndex];
73
+ }
74
+
75
+ /**
76
+ * 根据路径更新规则(不可变更新)
77
+ * @param group 根规则组
78
+ * @param path 路径数组
79
+ * @param rule 新的规则对象
80
+ * @returns 更新后的规则组(新对象)
81
+ */
82
+ function updateRuleAtPath(group, path, rule) {
83
+ if (path.length === 0) {
84
+ return group;
85
+ }
86
+ var ruleIndex = path[path.length - 1];
87
+ var groupPath = path.slice(0, -1);
88
+ if (groupPath.length === 0) {
89
+ // 更新根组中的规则
90
+ var newRules = _toConsumableArray(group.rules);
91
+ newRules[ruleIndex] = rule;
92
+ return _objectSpread(_objectSpread({}, group), {}, {
93
+ rules: newRules
94
+ });
95
+ }
96
+
97
+ // 递归更新嵌套组
98
+ var firstIndex = groupPath[0];
99
+ var restPath = groupPath.slice(1);
100
+ var newGroups = _toConsumableArray(group.groups);
101
+ newGroups[firstIndex] = updateRuleAtPath(newGroups[firstIndex], [].concat(_toConsumableArray(restPath), [ruleIndex]), rule);
102
+ return _objectSpread(_objectSpread({}, group), {}, {
103
+ groups: newGroups
104
+ });
105
+ }
106
+
107
+ /**
108
+ * 根据路径删除规则(不可变更新)
109
+ * @param group 根规则组
110
+ * @param path 路径数组
111
+ * @returns 更新后的规则组(新对象)
112
+ */
113
+ function deleteRuleAtPath(group, path) {
114
+ if (path.length === 0) {
115
+ return group;
116
+ }
117
+ var ruleIndex = path[path.length - 1];
118
+ var groupPath = path.slice(0, -1);
119
+ if (groupPath.length === 0) {
120
+ // 删除根组中的规则
121
+ var newRules = group.rules.filter(function (_, index) {
122
+ return index !== ruleIndex;
123
+ });
124
+ return _objectSpread(_objectSpread({}, group), {}, {
125
+ rules: newRules
126
+ });
127
+ }
128
+
129
+ // 递归删除嵌套组中的规则
130
+ var firstIndex = groupPath[0];
131
+ var restPath = groupPath.slice(1);
132
+ var newGroups = _toConsumableArray(group.groups);
133
+ newGroups[firstIndex] = deleteRuleAtPath(newGroups[firstIndex], [].concat(_toConsumableArray(restPath), [ruleIndex]));
134
+ return _objectSpread(_objectSpread({}, group), {}, {
135
+ groups: newGroups
136
+ });
137
+ }
138
+
139
+ /**
140
+ * 根据路径添加规则(不可变更新)
141
+ * @param group 根规则组
142
+ * @param path 路径数组(指向目标规则组)
143
+ * @param rule 新规则
144
+ * @returns 更新后的规则组(新对象)
145
+ */
146
+ function addRuleAtPath(group, path, rule) {
147
+ if (path.length === 0) {
148
+ // 添加到根组
149
+ return _objectSpread(_objectSpread({}, group), {}, {
150
+ rules: [].concat(_toConsumableArray(group.rules), [rule])
151
+ });
152
+ }
153
+
154
+ // 递归添加到嵌套组
155
+ var firstIndex = path[0];
156
+ var restPath = path.slice(1);
157
+ var newGroups = _toConsumableArray(group.groups);
158
+ newGroups[firstIndex] = addRuleAtPath(newGroups[firstIndex], restPath, rule);
159
+ return _objectSpread(_objectSpread({}, group), {}, {
160
+ groups: newGroups
161
+ });
162
+ }
163
+
164
+ /**
165
+ * 根据路径更新规则组(不可变更新)
166
+ * @param group 根规则组
167
+ * @param path 路径数组
168
+ * @param updatedGroup 新的规则组对象
169
+ * @returns 更新后的规则组(新对象)
170
+ */
171
+ function updateRuleGroupAtPath(group, path, updatedGroup) {
172
+ if (path.length === 0) {
173
+ return updatedGroup;
174
+ }
175
+
176
+ // 递归更新嵌套组
177
+ var firstIndex = path[0];
178
+ var restPath = path.slice(1);
179
+ var newGroups = _toConsumableArray(group.groups);
180
+ newGroups[firstIndex] = updateRuleGroupAtPath(newGroups[firstIndex], restPath, updatedGroup);
181
+ return _objectSpread(_objectSpread({}, group), {}, {
182
+ groups: newGroups
183
+ });
184
+ }
185
+
186
+ /**
187
+ * 根据路径删除规则组(不可变更新)
188
+ * @param group 根规则组
189
+ * @param path 路径数组
190
+ * @returns 更新后的规则组(新对象)
191
+ */
192
+ function deleteRuleGroupAtPath(group, path) {
193
+ if (path.length === 0) {
194
+ // 不能删除根组
195
+ return group;
196
+ }
197
+ if (path.length === 1) {
198
+ // 删除第一层的组
199
+ var groupIndex = path[0];
200
+ var _newGroups = group.groups.filter(function (_, index) {
201
+ return index !== groupIndex;
202
+ });
203
+ return _objectSpread(_objectSpread({}, group), {}, {
204
+ groups: _newGroups
205
+ });
206
+ }
207
+
208
+ // 递归删除嵌套组
209
+ var firstIndex = path[0];
210
+ var restPath = path.slice(1);
211
+ var newGroups = _toConsumableArray(group.groups);
212
+ newGroups[firstIndex] = deleteRuleGroupAtPath(newGroups[firstIndex], restPath);
213
+ return _objectSpread(_objectSpread({}, group), {}, {
214
+ groups: newGroups
215
+ });
216
+ }
217
+
218
+ /**
219
+ * 根据路径添加规则组(不可变更新)
220
+ * @param group 根规则组
221
+ * @param path 路径数组(指向目标父规则组)
222
+ * @param newGroup 新规则组
223
+ * @returns 更新后的规则组(新对象)
224
+ */
225
+ function addRuleGroupAtPath(group, path, newGroup) {
226
+ if (path.length === 0) {
227
+ // 添加到根组
228
+ return _objectSpread(_objectSpread({}, group), {}, {
229
+ groups: [].concat(_toConsumableArray(group.groups), [newGroup])
230
+ });
231
+ }
232
+
233
+ // 递归添加到嵌套组
234
+ var firstIndex = path[0];
235
+ var restPath = path.slice(1);
236
+ var newGroups = _toConsumableArray(group.groups);
237
+ newGroups[firstIndex] = addRuleGroupAtPath(newGroups[firstIndex], restPath, newGroup);
238
+ return _objectSpread(_objectSpread({}, group), {}, {
239
+ groups: newGroups
240
+ });
241
+ }
@@ -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,154 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cloneRuleGroup = cloneRuleGroup;
7
+ exports.countRules = countRules;
8
+ exports.createEmptyRule = createEmptyRule;
9
+ exports.createEmptyRuleGroup = createEmptyRuleGroup;
10
+ exports.generateRuleDescription = generateRuleDescription;
11
+ exports.getMaxDepth = getMaxDepth;
12
+ exports.isRuleGroupEmpty = isRuleGroupEmpty;
13
+ var _operators = require("../constants/operators");
14
+ 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); }
15
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
16
+ 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."); }
17
+ 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); }
18
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
19
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
20
+ 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; }
21
+ 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; }
22
+ 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; }
23
+ 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; }
24
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
25
+ 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); } /**
26
+ * 规则操作辅助函数
27
+ */
28
+ /**
29
+ * 创建空规则
30
+ * @param fieldName 可选的字段名
31
+ * @returns 新的空规则对象
32
+ */
33
+ function createEmptyRule(fieldName) {
34
+ return {
35
+ fieldName: fieldName || '',
36
+ operator: 0,
37
+ // Equals
38
+ value: undefined,
39
+ value2: undefined
40
+ };
41
+ }
42
+
43
+ /**
44
+ * 创建空规则组
45
+ * @param logic 逻辑关系,默认为 And
46
+ * @returns 新的空规则组对象
47
+ */
48
+ function createEmptyRuleGroup() {
49
+ var logic = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
50
+ return {
51
+ logic: logic,
52
+ rules: [],
53
+ groups: []
54
+ };
55
+ }
56
+
57
+ /**
58
+ * 生成规则的可读描述
59
+ * @param rule 规则对象
60
+ * @param field 字段定义(可选)
61
+ * @returns 可读的规则描述字符串
62
+ */
63
+ function generateRuleDescription(rule, field) {
64
+ var fieldDisplayName = (field === null || field === void 0 ? void 0 : field.displayName) || rule.fieldName;
65
+ var operatorInfo = (0, _operators.getOperatorInfo)(rule.operator);
66
+ if (!fieldDisplayName) {
67
+ return '请选择字段';
68
+ }
69
+ if (!operatorInfo) {
70
+ return "".concat(fieldDisplayName, " (\u672A\u77E5\u64CD\u4F5C\u7B26)");
71
+ }
72
+
73
+ // IsNull 和 IsNotNull 不需要值
74
+ if (rule.operator === 10 || rule.operator === 11) {
75
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.label);
76
+ }
77
+
78
+ // Between 需要两个值
79
+ if (rule.operator === 8) {
80
+ if (rule.value !== undefined && rule.value2 !== undefined) {
81
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.label, " ").concat(rule.value, " \u548C ").concat(rule.value2);
82
+ }
83
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.label, " (\u8BF7\u8F93\u5165\u8303\u56F4)");
84
+ }
85
+
86
+ // In 和 NotIn 需要多个值
87
+ if (rule.operator === 6 || rule.operator === 7) {
88
+ if (Array.isArray(rule.value) && rule.value.length > 0) {
89
+ var valueStr = rule.value.join(', ');
90
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.label, " [").concat(valueStr, "]");
91
+ }
92
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.label, " (\u8BF7\u8F93\u5165\u503C\u5217\u8868)");
93
+ }
94
+
95
+ // 其他操作符需要单个值
96
+ if (rule.value !== undefined && rule.value !== null && rule.value !== '') {
97
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.symbol, " ").concat(rule.value);
98
+ }
99
+ return "".concat(fieldDisplayName, " ").concat(operatorInfo.label, " (\u8BF7\u8F93\u5165\u503C)");
100
+ }
101
+
102
+ /**
103
+ * 深度克隆规则组(用于不可变更新)
104
+ * @param group 规则组
105
+ * @returns 克隆后的规则组
106
+ */
107
+ function cloneRuleGroup(group) {
108
+ return {
109
+ logic: group.logic,
110
+ rules: group.rules.map(function (rule) {
111
+ return _objectSpread({}, rule);
112
+ }),
113
+ groups: group.groups.map(function (g) {
114
+ return cloneRuleGroup(g);
115
+ })
116
+ };
117
+ }
118
+
119
+ /**
120
+ * 检查规则组是否为空
121
+ * @param group 规则组
122
+ * @returns 是否为空
123
+ */
124
+ function isRuleGroupEmpty(group) {
125
+ return group.rules.length === 0 && group.groups.length === 0;
126
+ }
127
+
128
+ /**
129
+ * 统计规则组中的规则总数(递归)
130
+ * @param group 规则组
131
+ * @returns 规则总数
132
+ */
133
+ function countRules(group) {
134
+ var count = group.rules.length;
135
+ group.groups.forEach(function (g) {
136
+ count += countRules(g);
137
+ });
138
+ return count;
139
+ }
140
+
141
+ /**
142
+ * 获取规则组的最大嵌套深度
143
+ * @param group 规则组
144
+ * @returns 最大深度
145
+ */
146
+ function getMaxDepth(group) {
147
+ if (group.groups.length === 0) {
148
+ return 1;
149
+ }
150
+ var childDepths = group.groups.map(function (g) {
151
+ return getMaxDepth(g);
152
+ });
153
+ return 1 + Math.max.apply(Math, _toConsumableArray(childDepths));
154
+ }
@@ -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;