import { Ref } from 'vue'; import { FieldAction } from './useRuleEngine'; /** 表单字段元数据(从 compList 提取) */ export interface FormFieldMeta { fieldName: string; label: string; itemType: string; type: string; } /** 规则验证结果 */ export interface RuleValidationResult { /** 是否验证通过 */ valid: boolean; /** 验证消息 */ message?: string; } /** 规则引擎运行时配置 */ export interface RuleRuntimeOptions { /** 表单ID,用于调用 executeByForm */ formId: Ref | string; /** 表单字段列表(compList / formInfo) */ formFields: Ref; /** 表单数据(响应式 formData) */ formData: Ref>; /** 是否启用规则引擎(默认 true) */ enabled?: Ref | boolean; } /** * 从 compList 中提取字段元数据列表 * 用于规则设计器中的字段选择下拉 * * 实现说明(双轨制 + 互补): * 1. 主路径:star-horse-lowcode 的 analysisCompDatas(与表单渲染侧一致) * 2. 补充路径:直接遍历原始 compList,捕获 analysisCompDatas 可能遗漏的字段 * * analysisCompDatas 内部结构(zie/Aie/Eie/qie/Pie/Mie/$ie 函数): * - 普通字段:Aie 返回 {fieldName: preps.name ?? e.fieldName, label, type: itemType, ...} * - box 容器:Eie 返回二维数组 [[fieldInfo|fieldInfo[], staticData, empty, ...], ...], * zie 中 o.push(...i) 扁平化一维 → fieldList 中**直接出现数组元素** * - dytable 容器:返回 {fieldName:"", dytableList:二维数组, preps} * - table 容器:返回 {containerType:"table", containerFields:[{fieldList:[...]}], preps} * - tab/card/collapse/splitter:返回 {fieldName, tabList/cardList/...:[{fieldList}], preps} * - condition 容器:返回 {fieldName, children:[...], compType:"container", itemType:"condition"} * * 关键陷阱: * - 遍历 fieldList 时必须处理"元素本身是数组"的嵌套结构(box 二维数组扁平化结果) * - 原始 compList 项中,容器(compType=='container')的 preps.name 不是字段名,必须跳过 * - tab/card 等容器的 preps.elements 项含 items(不是 columns) */ export declare const extractFieldMetaList: (compList: any[]) => FormFieldMeta[]; /** * 规则引擎 - 表单运行时桥接 Composable * * 使用示例: * ```ts * // 在 FormPage.vue 中 * const { triggerOnLoad, triggerOnSubmit, applyRuleActions, loading } = useFormRuleRuntime({ * formId: computed(() => props.compList?.[0]?.formId ?? ''), * formFields: tableFieldList, * formData: computed(() => formPageRef.value?.getFormData()?.value ?? {}), * }) * * // ON_LOAD: 在 StarHorseForm 的 @dataLoaded 事件中调用 * const onFormLoad = async () => { * await triggerOnLoad() * } * * // ON_SUBMIT: 在 merge 前调用 * const handleMerge = async (type: string) => { * const ok = await triggerOnSubmit() * if (!ok) return * formPageRef.value?.merge(type) * } * ``` */ export declare const useFormRuleRuntime: (options: RuleRuntimeOptions) => { loading: Ref; triggerOnLoad: () => Promise; triggerOnChange: () => Promise<{ success: boolean; fieldActions: FieldAction[]; }>; triggerOnSubmit: () => Promise; triggerOnValidate: () => Promise<{ success: boolean; fieldActions: FieldAction[]; }>; triggerButtonClick: (buttonKey?: string, evtName?: string) => Promise<{ success: boolean; fieldActions: FieldAction[]; }>; applyRuleActions: (actions: FieldAction[]) => void; extractFormData: () => Record; extractFieldMetaList: (compList: any[]) => FormFieldMeta[]; fieldMetaList: import('vue').ComputedRef; currentFormId: import('vue').ComputedRef; isEnabled: import('vue').ComputedRef; }; /** * 验证规则 - 用于表单提交前的字段级验证 * @param rules 规则列表 * @param formData 表单数据 * @returns 验证结果列表,包含每个验证规则的结果 */ export declare function validateRule(rules: any[], formData: Record): RuleValidationResult[];