@nokecy/qc-ui 1.0.65 → 1.0.67
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.
- package/dist/cjs/RuleBuilder/LogicSelector.d.ts +23 -0
- package/dist/cjs/RuleBuilder/LogicSelector.js +54 -0
- package/dist/cjs/RuleBuilder/RuleBuilderContainer.d.ts +20 -0
- package/dist/cjs/RuleBuilder/RuleBuilderContainer.js +209 -0
- package/dist/cjs/RuleBuilder/RuleCard.d.ts +20 -0
- package/dist/cjs/RuleBuilder/RuleCard.js +196 -0
- package/dist/cjs/RuleBuilder/RuleGroupEditor.d.ts +25 -0
- package/dist/cjs/RuleBuilder/RuleGroupEditor.js +191 -0
- package/dist/cjs/RuleBuilder/constants/operators.d.ts +47 -0
- package/dist/cjs/RuleBuilder/constants/operators.js +172 -0
- package/dist/cjs/RuleBuilder/context/RuleBuilderContext.d.ts +72 -0
- package/dist/cjs/RuleBuilder/context/RuleBuilderContext.js +286 -0
- package/dist/cjs/RuleBuilder/index.d.ts +25 -0
- package/dist/cjs/RuleBuilder/index.js +308 -0
- package/dist/cjs/RuleBuilder/inputs/BetweenValueInput.d.ts +23 -0
- package/dist/cjs/RuleBuilder/inputs/BetweenValueInput.js +80 -0
- package/dist/cjs/RuleBuilder/inputs/MultiValueInput.d.ts +21 -0
- package/dist/cjs/RuleBuilder/inputs/MultiValueInput.js +128 -0
- package/dist/cjs/RuleBuilder/inputs/SingleValueInput.d.ts +25 -0
- package/dist/cjs/RuleBuilder/inputs/SingleValueInput.js +81 -0
- package/dist/cjs/RuleBuilder/inputs/ValueInput.d.ts +29 -0
- package/dist/cjs/RuleBuilder/inputs/ValueInput.js +80 -0
- package/dist/cjs/RuleBuilder/selectors/FieldSelector.d.ts +22 -0
- package/dist/cjs/RuleBuilder/selectors/FieldSelector.js +45 -0
- package/dist/cjs/RuleBuilder/selectors/OperatorSelector.d.ts +22 -0
- package/dist/cjs/RuleBuilder/selectors/OperatorSelector.js +51 -0
- package/dist/cjs/RuleBuilder/styles/index.module.less +443 -0
- package/dist/cjs/RuleBuilder/styles/index.module.less.d.ts +43 -0
- package/dist/cjs/RuleBuilder/types/index.d.ts +232 -0
- package/dist/cjs/RuleBuilder/types/index.js +83 -0
- package/dist/cjs/RuleBuilder/utils/pathHelpers.d.ts +65 -0
- package/dist/cjs/RuleBuilder/utils/pathHelpers.js +241 -0
- package/dist/cjs/RuleBuilder/utils/ruleHelpers.d.ts +47 -0
- package/dist/cjs/RuleBuilder/utils/ruleHelpers.js +154 -0
- package/dist/cjs/RuleBuilder/utils/validation.d.ts +25 -0
- package/dist/cjs/RuleBuilder/utils/validation.js +241 -0
- package/dist/cjs/components/RegexEditor/core/RegexEditor.d.ts +34 -0
- package/dist/cjs/components/RegexEditor/core/RegexEditor.js +223 -0
- package/dist/cjs/components/RegexEditor/core/RegexEditor.less +119 -0
- package/dist/cjs/components/RegexEditor/core/extensions/errorMarker.d.ts +49 -0
- package/dist/cjs/components/RegexEditor/core/extensions/errorMarker.js +158 -0
- package/dist/cjs/components/RegexEditor/core/types.d.ts +79 -0
- package/dist/cjs/components/RegexEditor/core/types.js +5 -0
- package/dist/cjs/components/RegexEditor/hooks/index.d.ts +9 -0
- package/dist/cjs/components/RegexEditor/hooks/index.js +19 -0
- package/dist/cjs/components/RegexEditor/hooks/useRegexTester.d.ts +95 -0
- package/dist/cjs/components/RegexEditor/hooks/useRegexTester.js +234 -0
- package/dist/cjs/components/RegexEditor/hooks/useRegexValidation.d.ts +71 -0
- package/dist/cjs/components/RegexEditor/hooks/useRegexValidation.js +215 -0
- package/dist/cjs/components/RegexEditor/hooks/useTemplateManager.d.ts +64 -0
- package/dist/cjs/components/RegexEditor/hooks/useTemplateManager.js +438 -0
- package/dist/cjs/components/RegexEditor/index.d.ts +16 -0
- package/dist/cjs/components/RegexEditor/index.js +232 -0
- package/dist/cjs/components/RegexEditor/templates/TemplateSelector.d.ts +36 -0
- package/dist/cjs/components/RegexEditor/templates/TemplateSelector.js +322 -0
- package/dist/cjs/components/RegexEditor/templates/builtinTemplates.d.ts +36 -0
- package/dist/cjs/components/RegexEditor/templates/builtinTemplates.js +340 -0
- package/dist/cjs/components/RegexEditor/templates/index.d.ts +10 -0
- package/dist/cjs/components/RegexEditor/templates/index.js +184 -0
- package/dist/cjs/components/RegexEditor/templates/storage.d.ts +74 -0
- package/dist/cjs/components/RegexEditor/templates/storage.js +337 -0
- package/dist/cjs/components/RegexEditor/templates/templateManager.d.ts +67 -0
- package/dist/cjs/components/RegexEditor/templates/templateManager.js +277 -0
- package/dist/cjs/components/RegexEditor/templates/types.d.ts +111 -0
- package/dist/cjs/components/RegexEditor/templates/types.js +94 -0
- package/dist/cjs/components/RegexEditor/testing/types.d.ts +55 -0
- package/dist/cjs/components/RegexEditor/testing/types.js +5 -0
- package/dist/cjs/components/RegexEditor/validation/complexity.d.ts +22 -0
- package/dist/cjs/components/RegexEditor/validation/complexity.js +196 -0
- package/dist/cjs/components/RegexEditor/validation/parser.d.ts +53 -0
- package/dist/cjs/components/RegexEditor/validation/parser.js +129 -0
- package/dist/cjs/components/RegexEditor/validation/types.d.ts +146 -0
- package/dist/cjs/components/RegexEditor/validation/types.js +5 -0
- package/dist/cjs/components/RegexEditor/validation/validator.d.ts +60 -0
- package/dist/cjs/components/RegexEditor/validation/validator.js +218 -0
- package/dist/cjs/components/RegexEditor/visualizer/FlagsSelector.d.ts +20 -0
- package/dist/cjs/components/RegexEditor/visualizer/FlagsSelector.js +98 -0
- package/dist/cjs/components/RegexEditor/visualizer/MatchItem.d.ts +25 -0
- package/dist/cjs/components/RegexEditor/visualizer/MatchItem.js +201 -0
- package/dist/cjs/components/RegexEditor/visualizer/RegexRailroadDiagram.d.ts +32 -0
- package/dist/cjs/components/RegexEditor/visualizer/RegexRailroadDiagram.js +192 -0
- package/dist/cjs/components/RegexEditor/visualizer/RegexTester.d.ts +22 -0
- package/dist/cjs/components/RegexEditor/visualizer/RegexTester.js +255 -0
- package/dist/cjs/components/RegexEditor/visualizer/astToRailroad.d.ts +19 -0
- package/dist/cjs/components/RegexEditor/visualizer/astToRailroad.js +155 -0
- package/dist/cjs/components/RegexEditor/visualizer/index.d.ts +12 -0
- package/dist/cjs/components/RegexEditor/visualizer/index.js +76 -0
- package/dist/cjs/components/RegexEditor/visualizer/types.d.ts +131 -0
- package/dist/cjs/components/RegexEditor/visualizer/types.js +5 -0
- package/dist/cjs/components/RegexEditor/visualizer/utils.d.ts +106 -0
- package/dist/cjs/components/RegexEditor/visualizer/utils.js +268 -0
- package/dist/cjs/index.d.ts +5 -1
- package/dist/cjs/index.js +62 -0
- package/dist/cjs/standardFormDialog/StandardFormDialog.js +26 -5
- package/dist/cjs/standardFormDialog/useStandardFormSchema.d.ts +1 -1
- package/dist/cjs/standardFormDialog/withStandardForm.d.ts +2 -2
- package/dist/cjs/types/railroad-diagrams.d.ts +59 -0
- package/dist/cjs/types/regexp-tree.d.ts +175 -0
- package/dist/esm/RuleBuilder/LogicSelector.d.ts +23 -0
- package/dist/esm/RuleBuilder/LogicSelector.js +47 -0
- package/dist/esm/RuleBuilder/RuleBuilderContainer.d.ts +20 -0
- package/dist/esm/RuleBuilder/RuleBuilderContainer.js +203 -0
- package/dist/esm/RuleBuilder/RuleCard.d.ts +20 -0
- package/dist/esm/RuleBuilder/RuleCard.js +191 -0
- package/dist/esm/RuleBuilder/RuleGroupEditor.d.ts +25 -0
- package/dist/esm/RuleBuilder/RuleGroupEditor.js +184 -0
- package/dist/esm/RuleBuilder/constants/operators.d.ts +47 -0
- package/dist/esm/RuleBuilder/constants/operators.js +169 -0
- package/dist/esm/RuleBuilder/context/RuleBuilderContext.d.ts +72 -0
- package/dist/esm/RuleBuilder/context/RuleBuilderContext.js +271 -0
- package/dist/esm/RuleBuilder/index.d.ts +25 -0
- package/dist/esm/RuleBuilder/index.js +42 -0
- package/dist/esm/RuleBuilder/inputs/BetweenValueInput.d.ts +23 -0
- package/dist/esm/RuleBuilder/inputs/BetweenValueInput.js +73 -0
- package/dist/esm/RuleBuilder/inputs/MultiValueInput.d.ts +21 -0
- package/dist/esm/RuleBuilder/inputs/MultiValueInput.js +121 -0
- package/dist/esm/RuleBuilder/inputs/SingleValueInput.d.ts +25 -0
- package/dist/esm/RuleBuilder/inputs/SingleValueInput.js +74 -0
- package/dist/esm/RuleBuilder/inputs/ValueInput.d.ts +29 -0
- package/dist/esm/RuleBuilder/inputs/ValueInput.js +73 -0
- package/dist/esm/RuleBuilder/selectors/FieldSelector.d.ts +22 -0
- package/dist/esm/RuleBuilder/selectors/FieldSelector.js +38 -0
- package/dist/esm/RuleBuilder/selectors/OperatorSelector.d.ts +22 -0
- package/dist/esm/RuleBuilder/selectors/OperatorSelector.js +44 -0
- package/dist/esm/RuleBuilder/styles/index.module.less +443 -0
- package/dist/esm/RuleBuilder/styles/index.module.less.d.ts +43 -0
- package/dist/esm/RuleBuilder/types/index.d.ts +232 -0
- package/dist/esm/RuleBuilder/types/index.js +91 -0
- package/dist/esm/RuleBuilder/utils/pathHelpers.d.ts +65 -0
- package/dist/esm/RuleBuilder/utils/pathHelpers.js +228 -0
- package/dist/esm/RuleBuilder/utils/ruleHelpers.d.ts +47 -0
- package/dist/esm/RuleBuilder/utils/ruleHelpers.js +145 -0
- package/dist/esm/RuleBuilder/utils/validation.d.ts +25 -0
- package/dist/esm/RuleBuilder/utils/validation.js +236 -0
- package/dist/esm/components/RegexEditor/core/RegexEditor.d.ts +34 -0
- package/dist/esm/components/RegexEditor/core/RegexEditor.js +214 -0
- package/dist/esm/components/RegexEditor/core/RegexEditor.less +119 -0
- package/dist/esm/components/RegexEditor/core/extensions/errorMarker.d.ts +49 -0
- package/dist/esm/components/RegexEditor/core/extensions/errorMarker.js +154 -0
- package/dist/esm/components/RegexEditor/core/types.d.ts +79 -0
- package/dist/esm/components/RegexEditor/core/types.js +1 -0
- package/dist/esm/components/RegexEditor/hooks/index.d.ts +9 -0
- package/dist/esm/components/RegexEditor/hooks/index.js +8 -0
- package/dist/esm/components/RegexEditor/hooks/useRegexTester.d.ts +95 -0
- package/dist/esm/components/RegexEditor/hooks/useRegexTester.js +230 -0
- package/dist/esm/components/RegexEditor/hooks/useRegexValidation.d.ts +71 -0
- package/dist/esm/components/RegexEditor/hooks/useRegexValidation.js +211 -0
- package/dist/esm/components/RegexEditor/hooks/useTemplateManager.d.ts +64 -0
- package/dist/esm/components/RegexEditor/hooks/useTemplateManager.js +430 -0
- package/dist/esm/components/RegexEditor/index.d.ts +16 -0
- package/dist/esm/components/RegexEditor/index.js +27 -0
- package/dist/esm/components/RegexEditor/templates/TemplateSelector.d.ts +36 -0
- package/dist/esm/components/RegexEditor/templates/TemplateSelector.js +316 -0
- package/dist/esm/components/RegexEditor/templates/builtinTemplates.d.ts +36 -0
- package/dist/esm/components/RegexEditor/templates/builtinTemplates.js +335 -0
- package/dist/esm/components/RegexEditor/templates/index.d.ts +10 -0
- package/dist/esm/components/RegexEditor/templates/index.js +19 -0
- package/dist/esm/components/RegexEditor/templates/storage.d.ts +74 -0
- package/dist/esm/components/RegexEditor/templates/storage.js +335 -0
- package/dist/esm/components/RegexEditor/templates/templateManager.d.ts +67 -0
- package/dist/esm/components/RegexEditor/templates/templateManager.js +274 -0
- package/dist/esm/components/RegexEditor/templates/types.d.ts +111 -0
- package/dist/esm/components/RegexEditor/templates/types.js +90 -0
- package/dist/esm/components/RegexEditor/testing/types.d.ts +55 -0
- package/dist/esm/components/RegexEditor/testing/types.js +1 -0
- package/dist/esm/components/RegexEditor/validation/complexity.d.ts +22 -0
- package/dist/esm/components/RegexEditor/validation/complexity.js +190 -0
- package/dist/esm/components/RegexEditor/validation/parser.d.ts +53 -0
- package/dist/esm/components/RegexEditor/validation/parser.js +123 -0
- package/dist/esm/components/RegexEditor/validation/types.d.ts +145 -0
- package/dist/esm/components/RegexEditor/validation/types.js +1 -0
- package/dist/esm/components/RegexEditor/validation/validator.d.ts +60 -0
- package/dist/esm/components/RegexEditor/validation/validator.js +213 -0
- package/dist/esm/components/RegexEditor/visualizer/FlagsSelector.d.ts +20 -0
- package/dist/esm/components/RegexEditor/visualizer/FlagsSelector.js +93 -0
- package/dist/esm/components/RegexEditor/visualizer/MatchItem.d.ts +25 -0
- package/dist/esm/components/RegexEditor/visualizer/MatchItem.js +194 -0
- package/dist/esm/components/RegexEditor/visualizer/RegexRailroadDiagram.d.ts +32 -0
- package/dist/esm/components/RegexEditor/visualizer/RegexRailroadDiagram.js +186 -0
- package/dist/esm/components/RegexEditor/visualizer/RegexTester.d.ts +22 -0
- package/dist/esm/components/RegexEditor/visualizer/RegexTester.js +248 -0
- package/dist/esm/components/RegexEditor/visualizer/astToRailroad.d.ts +18 -0
- package/dist/esm/components/RegexEditor/visualizer/astToRailroad.js +150 -0
- package/dist/esm/components/RegexEditor/visualizer/index.d.ts +12 -0
- package/dist/esm/components/RegexEditor/visualizer/index.js +17 -0
- package/dist/esm/components/RegexEditor/visualizer/types.d.ts +131 -0
- package/dist/esm/components/RegexEditor/visualizer/types.js +1 -0
- package/dist/esm/components/RegexEditor/visualizer/utils.d.ts +106 -0
- package/dist/esm/components/RegexEditor/visualizer/utils.js +256 -0
- package/dist/esm/index.d.ts +5 -1
- package/dist/esm/index.js +6 -2
- package/dist/esm/standardFormDialog/StandardFormDialog.js +26 -5
- package/dist/esm/types/railroad-diagrams.d.ts +59 -0
- package/dist/esm/types/regexp-tree.d.ts +175 -0
- package/dist/umd/qc-ui.min.css +1 -1
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +23 -7
|
@@ -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;
|