diff --git a/src/components/Form/src/BasicForm.vue b/src/components/Form/src/BasicForm.vue index d9844721e..56fa45087 100644 --- a/src/components/Form/src/BasicForm.vue +++ b/src/components/Form/src/BasicForm.vue @@ -64,7 +64,6 @@ import { basicProps } from './props'; import { useDesign } from '/@/hooks/web/useDesign'; import { cloneDeep } from 'lodash-es'; - import { isFunction, isArray } from '/@/utils/is'; export default defineComponent({ name: 'BasicForm', @@ -245,14 +244,11 @@ function setFormModel(key: string, value: any, schema: FormSchema) { formModel[key] = value; - const { validateTrigger } = unref(getBindValue); - if (isFunction(schema.dynamicRules) || isArray(schema.rules)) { - return; - } - if (!validateTrigger || validateTrigger === 'change') { + emit('field-value-change', key, value); + // TODO 优化验证,这里如果是autoLink=false手动关联的情况下才会再次触发此函数 + if (schema && schema.itemProps && !schema.itemProps.autoLink) { validateFields([key]).catch((_) => {}); } - emit('field-value-change', key, value); } function handleEnterPress(e: KeyboardEvent) { diff --git a/src/components/Form/src/components/FormItem.vue b/src/components/Form/src/components/FormItem.vue index 2142364cd..595b4a929 100644 --- a/src/components/Form/src/components/FormItem.vue +++ b/src/components/Form/src/components/FormItem.vue @@ -9,7 +9,11 @@ import { BasicHelp } from '/@/components/Basic'; import { isBoolean, isFunction, isNull } from '/@/utils/is'; import { getSlot } from '/@/utils/helper/tsxHelper'; - import { createPlaceholderMessage, setComponentRuleType } from '../helper'; + import { + createPlaceholderMessage, + NO_AUTO_LINK_COMPONENTS, + setComponentRuleType, + } from '../helper'; import { cloneDeep, upperFirst } from 'lodash-es'; import { useItemLabelWidth } from '../hooks/useLabelWidth'; import { useI18n } from '/@/hooks/web/useI18n'; @@ -347,6 +351,15 @@ const showSuffix = !!suffix; const getSuffix = isFunction(suffix) ? suffix(unref(getValues)) : suffix; + // TODO 自定义组件验证会出现问题,因此这里框架默认将自定义组件设置手动触发验证,如果其他组件还有此问题请手动设置autoLink=false + if (NO_AUTO_LINK_COMPONENTS.includes(component)) { + props.schema && + (props.schema.itemProps! = { + autoLink: false, + ...props.schema.itemProps, + }); + } + return (