Skip to content
On this page

BDynamicForms

动态表单,可增减表单项、校验表单和获取表单数据

组件注册

js
import { dynamicFormOperate } from '@fesjs/traction-widget';
const formRef = ref([]);
const dataList = ref([
    {
        type: 'fruit',
        goods:'西瓜',
    },
]);
const initItem = {
    type: '',
    goods: '',
};
const {
    addDynamicItem,
    minusDynamicItem,
    dynamicFormValid,
    dynamicFormClearValid,
    getDynamicFormData
} = dynamicFormOperate(formRef.value,dataList.value,initItem)

代码演示

基础用法

动态表单函数使用范例

Play
<template>
    <div style="background: #f6f6f7;">
        <div v-for="(data, index) in dataList" :key="index" style="padding:16px 16px 16px 16px; margin-bottom: -30px">
            <FForm
                :ref="el => { if (el) formRef[index] = el; }"
                label-width="120px"
                :model="dataList[index]"
                :labelPosition="`right`"
                :labelWidth="84"
                :rules="ruleValidate"
                layout="inline"

            >
                <FFormItem prop="type">
                    <FSelect
                        v-model="dataList[index].type"
                        filterable
                        :placeholder="'种类'"
                        :options="typeList"
                        @change="dataList[index].goods = ''"
                    >
                    </FSelect>
                </FFormItem>
                <FFormItem prop="goods" >
                    <FInput v-model="dataList[index].goods" :placeholder="`物品`" />
                </FFormItem>
                <FFormItem props="icon">
                    <MinusCircleOutlined @click="minusDynamicItem(dataList[index])" />
                </FFormItem>
            </FForm>
        </div>
        <FButton
            type="link"
            class="init-button"
            @click="addDynamicItem"
        >
            <template #icon>
                <PlusCircleOutlined />
            </template>添加
        </FButton>
    </div>
    <div style="margin: 16px">
        <FSpace>
            <FButton
                class="init-button"
                @click="dynamicFormValid"
            >
                校验表单
            </FButton>
            <FButton
                class="init-button"
                @click="dynamicFormClearValid"
            >
                清空校验表单
            </FButton>
            <FButton
                class="init-button"
                @click="resetDynamicFormData"
            >
                重置表单
            </FButton>
            <FButton
                class="init-button"
                @click="getData"
            >
                获取数据
            </FButton>
        </FSpace>
    </div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { dynamicFormOperate } from '@fesjs/traction-widget';
import { PlusCircleOutlined, MinusCircleOutlined } from '@fesjs/fes-design/icon';
import { FButton, FForm, FFormItem, FInput, FSelect, FSpace } from '@fesjs/fes-design';


const formRef = ref([]);
const dataList = ref([
    {
        type: 'fruit',
        goods:'西瓜',
    },
]);
const initItem = {
    type: '',
    goods: '',
};
const {
    addDynamicItem,
    minusDynamicItem,
    dynamicFormValid,
    dynamicFormClearValid,
    getDynamicFormData,
    resetDynamicFormData
} = dynamicFormOperate(formRef.value,dataList.value,initItem)

const getData = () => {
    const data = getDynamicFormData();
    console.log('表单数据:', data);
}
const ruleValidate = ref({
    type: [
        { trigger: ['change', 'blur'], required: true, message: '不能为空' },
    ],
    goods: [
        { trigger: ['change', 'blur'], required: true, message: '不能为空' },
    ],
});
const typeList = [
    {
        value: 'vegetable',
        label: '蔬菜',
    },
    {
        value: 'fruit',
        label: '水果'
    }
]
</script>
查看代码

参数说明

入参

属性说明类型默认值
formRef必填,动态表单RefArray[]
dataList必填,动态表单数据Array[]
initItem必填,新增表单项时的默认数据Object{}

返回方法

方法名说明传参返回值
addDynamicItem新增表单项--
minusDynamicItem删除表单项当前删除数据-Object-
dynamicFormValid校验表单-校验结果-Boolean
dynamicFormClearValid清除表单校验--
getDynamicFormData获得表单数据-表单数据-Array
resetDynamicFormData重置表单数据--

Released under the MIT License.