/** 触发事件类型 */ export type TriggerEvent = "ON_CHANGE" | "ON_SUBMIT" | "ON_LOAD" | "ON_VALIDATE" | "ON_BUTTON_CLICK"; /** 字段控制指令 */ export interface FieldAction { field: string; visible?: boolean; required?: boolean; readonly?: boolean; disabled?: boolean; value?: any; /** 选项数据源 - 用于 select/cascade/checkbox 等选项类字段 */ options?: any[]; } /** 规则执行结果(精简版) */ export interface RuleExecutionOutcome { success: boolean; message: string; fieldActions: FieldAction[]; rawContext: Record; } /** 受控字段追踪器 - 记录哪些字段属性由规则引擎控制 */ export interface ControlledFieldTracker { /** 被规则引擎控制的字段属性映射: fieldName -> Set<'visible'|'required'|'readonly'|'disabled'|'value'> */ controlledProps: Map>; /** 标记字段属性为受控 */ markControlled: (fieldName: string, prop: string) => void; /** 检查字段属性是否受控 */ isControlled: (fieldName: string, prop: string) => boolean; /** 清除所有受控记录 */ clear: () => void; } /** * 创建受控字段追踪器 * 用于追踪哪些字段属性由规则引擎控制,避免与已有联动冲突 */ export declare const createControlledFieldTracker: () => ControlledFieldTracker; /** * 规则引擎业务驱动 composable * * 使用示例: * ```ts * const { triggerOnLoad, triggerOnChange, triggerOnSubmit, applyToCompList } = useRuleEngine() * const tracker = createControlledFieldTracker() * * // 表单加载时初始化 * onMounted(async () => { * const outcome = await triggerOnLoad(formId, formData, fieldStates) * applyToCompList(outcome.fieldActions, compList, formData, tracker) * }) * * // 字段变更时触发 - 推荐通过扩展 shplugin relationEventDispatcher 调用 * // 而非新增 deep watch formData * * // 提交前校验 * const handleSubmit = async () => { * const ok = await triggerOnSubmit(formId, formData) * if (ok) { /* 提交逻辑 *\/ } * } * ``` */ export declare const useRuleEngine: () => { executeByForm: (formId: string, triggerEvent: TriggerEvent, formData: Record) => Promise; executeRule: (ruleId: string, formData: Record) => Promise; triggerOnChange: (formId: string, formData: Record, fieldStates?: Record>, debounceMs?: number) => () => Promise; triggerOnLoad: (formId: string, formData: Record, fieldStates?: Record>) => Promise; triggerOnSubmit: (formId: string, formData: Record) => Promise; triggerOnValidate: (formId: string, formData: Record) => Promise; triggerButtonClick: (formId: string, formData: Record, buttonKey?: string, evtName?: string) => Promise; parseFieldActions: (context?: Record) => FieldAction[]; applyFieldActions: (actions: FieldAction[], formData: Record, fieldStates?: Record>) => void; applyToCompList: (actions: FieldAction[], compList: any[], formData?: Record, tracker?: ControlledFieldTracker) => void; };