Appearance
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 | 必填,动态表单Ref | Array | [] |
| dataList | 必填,动态表单数据 | Array | [] |
| initItem | 必填,新增表单项时的默认数据 | Object | {} |
返回方法 #
| 方法名 | 说明 | 传参 | 返回值 |
|---|---|---|---|
| addDynamicItem | 新增表单项 | - | - |
| minusDynamicItem | 删除表单项 | 当前删除数据-Object | - |
| dynamicFormValid | 校验表单 | - | 校验结果-Boolean |
| dynamicFormClearValid | 清除表单校验 | - | - |
| getDynamicFormData | 获得表单数据 | - | 表单数据-Array |
| resetDynamicFormData | 重置表单数据 | - | - |