Skip to content

表单全局配置

在使用 FormCreate 生成表单时,可以通过全局配置来管理表单的行为和外观。本文将详细介绍如何设置全局配置,以及如何使用这些配置来增强表单的灵活性和可控性。

设置全局配置

组件模式

在组件模式下,通过 option 属性传递全局配置:

html
<form-create :option="option"></form-create>

全局方法

在使用全局方法创建表单时,也可以传递全局配置:

js
formCreate.create(rule, option)

示例演示

以下是一个简单的示例,展示了如何使用全局配置设置表单的行为:

配置项数据结构

属性名类型默认值作用说明
global{ '*': VNodeRule; [componentName: string]: VNodeRule }-设置组件默认配置:* 为全局通用配置,键名支持指定组件名称(如 input)覆盖特定组件配置。
injectEventObject | Booleanfalse全局开启事件注入(如 onChange),若为对象可自定义事件名与处理逻辑。
previewBooleanfalse是否开启预览模式
forceCoverValueBooleanfalsev-model 是否强制覆盖未定义的字段值(若为 false 则保留未定义字段原值)。
appendValueBooleanfalsev-model 中是否保留规则中未定义的字段值(若为 false 则提交时过滤这些字段)。
ignoreHiddenFieldsBooleantrue表单提交时是否忽略隐藏状态的字段(若为 false 则包含隐藏字段值)。
validateOnSubmitBooleantrue控制表单提交前是否自动触发表单验证。
formDataObject{}设置表单初始值(非双向绑定,仅初始化时生效)。
language{ [name: string]: { [id: string]: string } }-配置多语言内容,键为语言名称(如 zh-CN),值为文本ID与翻译键值对。
elElement-指定表单挂载的DOM元素(非组件模式时必填)。
onSubmit(formData: Object, api: Api) => void-表单提交回调,接收表单数据和API对象。
beforeFetch(config: FetchEffectOption, ctx: { api: Api, rule: Rule }) => void-fetch 请求前修改请求配置(如添加请求头)。
mounted(api: Api) => void-表单创建成功后触发,用于获取API实例或执行初始化逻辑。
reload(api: Api) => void-表单重载后触发(如调用 api.reload() 后)。
colBoolean | (ColProps & { show?: Boolean })true配置 Col 布局组件(栅格系统),show: false 可禁用布局。
rowBoolean | (RowProps & { show?: Boolean })true配置 Row 布局组件,控制表单行的排列方式。
infoBoolean | (VNodeRule & { show?: Boolean, native?: Boolean, ... })true配置悬浮提示组件,icon 可自定义图标,align 控制对齐方向。
wrapBoolean | (VNodeRule & FormItemProps & { show?: Boolean })true配置 FormItem 容器样式,支持覆盖标签宽度、校验提示样式等。
formFormProps-设置表单根组件属性(如 labelWidthsize 等,依赖具体UI框架)。
titleBoolean | (VNodeRule & { show?: Boolean, native?: Boolean, ... })true配置表单项标签(label),native: false 可禁用原生标签样式。
submitBtnBoolean | (ButtonProps & { click?: Function, show?: Boolean, ... })true配置提交按钮,innerText 可修改按钮文字,show: false 隐藏按钮。
resetBtnBoolean | (ButtonProps & { click?: Function, show?: Boolean, ... })true配置重置按钮,支持自定义点击事件或隐藏按钮。

以下是 ElementPlus 版本中 Option 配置项的数据结构示例:

ts
type Option = {
    //设置组件默认配置
    global?: {
      '*':VNodeRule;
      [componentName:string]: VNodeRule;
    };
    //全局开启事件注入
    injectEvent?: Object|Boolean;
    //是否开启预览模式
    preview?: Boolean;
    //v-model是否更新未定义的字段值
    forceCoverValue?: Boolean;
    //v-model中是否保存不在规则中的字段
    appendValue?: Boolean;
    //表单提交时是否忽略表单中隐藏状态的字段
    ignoreHiddenFields?: Boolean;
    //控制是否在表单提交前触发表单验证
    validateOnSubmit?: Boolean;
    //设置表单的初始值(非双向绑定)
    formData?: Object;
    //配置表单多语言内容
    language: {
        //语言名称: {[ID]: 文字}
        [name: string] : {
            [id: string]: string;
        };
    },
    //用于指定表单挂载的 DOM 元素。在组件模式下无需设置。
    el?: Element;
    //表单提交时的回调函数。
    onSubmit?: (formData: Object, api: Api) => void;
    //在 fetch 请求前触发的回调,用于修改请求配置。
    beforeFetch?: (config: FetchEffectOption, form: {
      api: Api,
      rule: Rule
    }) => void;
    //表单创建成功后的回调函数。
    mounted?: (api: Api) => void;
    //表单重载后的回调函数。
    reload?: (api: Api) => void;
    //设置 Col 组件的整体配置。
    col?: Boolean | ColProps & {
        show?: Boolean;
    };
    //设置 Row 组件的整体配置。
    row?: Boolean | RowProps & {
        show?: Boolean;
    };
    //设置悬浮提示组件的配置。
    info?: Boolean | VNodeRule & {
        show?: Boolean;
        native?: Boolean;
        icon?: string;
        align?: 'left' | 'right';
        info?: string;
    };
    //设置 FormItem 组件的整体配置。
    wrap?: Boolean | (VNodeRule & FormItemProps & {show?: Boolean});
    //设置表单的整体配置,对应 UI 框架的表单组件。
    form?: FormProps;
    //设置提交按钮(Button 组件)的配置。
    submitBtn?: Boolean | ButtonProps & {
        click?: Function;
        innerText?: string;
        show?: Boolean;
    };
    //设置重置按钮(Button 组件)的配置。
    resetBtn?: Boolean | ButtonProps & {
        click?: Function;
        innerText?: string;
        show?: Boolean;
    };
    //设置 formItem 组件的 label 区域的配置。
    title?: Boolean | VNodeRule & {
        show?: Boolean;
        native?: Boolean;
        title: string;
    };
}

UI框架配置

FormCreate 支持多个 UI 框架,每个框架的配置项略有不同。以下是各个框架的全局配置指南:

示例

配置表单样式

通过 form 字段控制在表单的样式

vue
<template>
    <div>
        <form-create :option="options"/>
    </div>
</template>
<script setup>
    import {ref} from 'vue';
    const options = ref({
        form:  {
            labelPosition: 'top',
            labelWidth: '150px'
        },
    })
</script>

配置表单默认值

通过 formData 字段控制的默认值, 优先级小于 v-model

vue
<template>
    <div>
        <form-create :option="options"/>
    </div>
</template>
<script setup>
    import {ref} from 'vue';
    const options = ref({
        formData: {
            goods_name: 'default value'
        }
    })
</script>

表单提交时忽略隐藏的表单组件字段

通过 ignoreHiddenFields 字段控制在表单提交时是否提交隐藏的字段

vue
<template>
    <div>
        <form-create :option="options"/>
    </div>
</template>
<script setup>
    import {ref} from 'vue';
    const options = ref({
        ignoreHiddenFields: true,
    })
</script>

关闭表单提交前的默认表单验证

通过 validateOnSubmit 字段控制在表单提交时是否提交隐藏的字段

vue
<template>
    <div>
        <form-create :option="options"/>
    </div>
</template>
<script setup>
    import {ref} from 'vue';
    const options = ref({
        validateOnSubmit: true,
    })
</script>

组件默认配置

通过 global 字段配置组件的公共配置

vue
<template>
    <div>
        <form-create :option="options"/>
    </div>
</template>
<script setup>
    import {ref} from 'vue';
    const options = ref({
         global: {
             upload: {
                 props: {
                     headers: {
                        token: getToken()  
                     },
                     onSuccess(file, res) {
                         file.url = res.data.url
                     }
                 }
             }
         },
    })
</script>

FormCreate 是一个开源项目,基于 MIT 许可证发布,欢迎个人和企业用户免费使用