/** * 规则构建器类型定义 * * ⚠️ 重要:与后端定义完全一致 * - 后端 Domain: Burn.Abp.RuleEngine.Domain.Shared (Rule, RuleGroup) * - 后端 DTO: Burn.Abp.LabelManagement.Application.Contracts.RuleEngine (RuleDto, RuleGroupDto) * * JSON 序列化属性名: * - fieldName (不是 FieldName) * - operator (不是 Operator) * - value, value2, valueField * - logic, rules, groups */ /** * 操作符显示信息 */ export interface OperatorInfo { value: MatchOperator; label: string; symbol: string; description: string; /** 是否需要输入值 */ requiresValue: boolean; /** 是否需要第二个值(Between) */ requiresValue2: boolean; /** 是否需要多个值(In/NotIn) */ requiresMultiValue: boolean; } /** * 匹配操作符枚举 * * 对应后端: Burn.Abp.RuleEngine.Domain.Shared.MatchOperator */ export declare enum MatchOperator { /** 等于 (=) */ Equals = 0, /** 不等于 (!=) */ NotEquals = 1, /** 大于 (>) */ GreaterThan = 2, /** 大于等于 (>=) */ GreaterThanOrEqual = 3, /** 小于 (<) */ LessThan = 4, /** 小于等于 (<=) */ LessThanOrEqual = 5, /** 包含于 (IN) */ In = 6, /** 不包含于 (NOT IN) */ NotIn = 7, /** 区间 (BETWEEN) */ Between = 8, /** 模糊匹配 (LIKE) */ Like = 9, /** 为空 (IS NULL) */ IsNull = 10, /** 不为空 (IS NOT NULL) */ IsNotNull = 11 } /** * 逻辑连接符枚举(与后端保持一致) */ export declare enum MatchLogic { /** 逻辑与(所有条件都满足) */ And = 0, /** 逻辑或(任一条件满足) */ Or = 1 } /** * 规则 DTO(与后端保持一致) */ export interface RuleDto { /** 字段名称 */ fieldName: string; /** 匹配操作符 */ operator: MatchOperator; /** 匹配值 */ value?: any; /** 第二个值(用于 Between 操作符) */ value2?: any; /** * 比较字段:与另一个字段的值比较,与 value 互斥,仅 6 个比较操作符可用。 * undefined 为固定值模式;空字符串表示已切到字段模式但尚未选择。 * @author nokecy */ valueField?: string; } /** * 规则组 DTO(与后端保持一致) */ export interface RuleGroupDto { /** 逻辑关系 (And/Or) */ logic: MatchLogic; /** 规则列表 */ rules: RuleDto[]; /** 嵌套规则组列表 */ groups: RuleGroupDto[]; } /** * 字段数据类型 */ export type FieldDataType = 'string' | 'number' | 'date' | 'boolean'; /** * 字段定义 */ export interface FieldDefinition { /** 字段名(与后端字段名对应) */ name: string; /** 显示名称(UI 展示) */ displayName: string; /** 数据类型 */ dataType: FieldDataType; /** 字段说明 */ description?: string; /** 允许的操作符(如不指定则根据数据类型自动过滤) */ allowedOperators?: MatchOperator[]; } /** * 验证错误 */ export interface ValidationError { /** 错误位置路径 */ path: number[]; /** 错误信息 */ message: string; /** 相关字段 */ field?: string; } /** * 验证结果 */ export interface ValidationResult { /** 是否有效 */ isValid: boolean; /** 错误列表 */ errors: ValidationError[]; /** 警告列表 */ warnings: ValidationError[]; } /** * 规则构建器配置 */ export interface RuleBuilderConfig { /** 静态字段定义 */ staticFields?: FieldDefinition[]; /** 动态字段 API 端点 */ fieldsApiUrl?: string; /** 最大嵌套层级(默认 5) */ maxNestingLevel?: number; /** 是否显示 JSON 预览 */ showJsonPreview?: boolean; /** * 是否允许规则与另一个字段比较(valueField)。 * 需要后端规则引擎与调用方的格式转换都支持 valueField 才能开启,默认关闭。 * @author nokecy */ allowFieldComparison?: boolean; /** 自定义验证器 */ validator?: (rule: RuleGroupDto) => ValidationResult; } /** * 规则构建器 Props */ export interface RuleBuilderProps { /** 初始规则(编辑模式) */ value?: RuleGroupDto | null; /** 值变更回调 */ onChange?: (rule: RuleGroupDto | null) => void; /** 配置 */ config?: RuleBuilderConfig; /** 是否只读 */ readonly?: boolean; } /** * 规则路径(用于定位嵌套规则) */ export type RulePath = number[]; /** * 规则构建器内部状态 */ export interface RuleBuilderState { /** 当前规则组 */ ruleGroup: RuleGroupDto; /** 字段定义列表 */ fields: FieldDefinition[]; /** 是否加载中 */ loading: boolean; /** 验证结果 */ validationResult: ValidationResult; /** 是否已修改 */ isDirty: boolean; } /** * 规则构建器 Action */ export type RuleBuilderAction = { type: 'SET_RULE_GROUP'; payload: RuleGroupDto; } | { type: 'SET_FIELDS'; payload: FieldDefinition[]; } | { type: 'SET_LOADING'; payload: boolean; } | { type: 'UPDATE_RULE'; payload: { path: RulePath; rule: RuleDto; }; } | { type: 'DELETE_RULE'; payload: { path: RulePath; }; } | { type: 'ADD_RULE'; payload: { path: RulePath; rule: RuleDto; }; } | { type: 'UPDATE_RULE_GROUP'; payload: { path: RulePath; group: RuleGroupDto; }; } | { type: 'DELETE_RULE_GROUP'; payload: { path: RulePath; }; } | { type: 'ADD_RULE_GROUP'; payload: { path: RulePath; group: RuleGroupDto; }; } | { type: 'SET_VALIDATION_RESULT'; payload: ValidationResult; } | { type: 'RESET'; };