mirror of
https://github.com/vbenjs/vben-admin-thin-next.git
synced 2025-01-24 10:33:47 +08:00
parent
bd83eccdc5
commit
85b92a9add
@ -7,4 +7,5 @@ export default {
|
|||||||
ruleForm: 'Form validation',
|
ruleForm: 'Form validation',
|
||||||
dynamicForm: 'Dynamic',
|
dynamicForm: 'Dynamic',
|
||||||
customerForm: 'Custom',
|
customerForm: 'Custom',
|
||||||
|
appendForm: 'Append',
|
||||||
};
|
};
|
||||||
|
@ -7,4 +7,5 @@ export default {
|
|||||||
ruleForm: '表单验证',
|
ruleForm: '表单验证',
|
||||||
dynamicForm: '动态表单',
|
dynamicForm: '动态表单',
|
||||||
customerForm: '自定义组件',
|
customerForm: '自定义组件',
|
||||||
|
appendForm: '表单增删示例',
|
||||||
};
|
};
|
||||||
|
@ -47,6 +47,10 @@ const menu: MenuModule = {
|
|||||||
path: 'customerForm',
|
path: 'customerForm',
|
||||||
name: t('routes.demo.form.customerForm'),
|
name: t('routes.demo.form.customerForm'),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'appendForm',
|
||||||
|
name: t('routes.demo.form.appendForm'),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -89,6 +89,14 @@ const comp: AppRouteModule = {
|
|||||||
title: t('routes.demo.form.customerForm'),
|
title: t('routes.demo.form.customerForm'),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'appendForm',
|
||||||
|
name: 'appendFormDemo',
|
||||||
|
component: () => import('/@/views/demo/form/AppendForm.vue'),
|
||||||
|
meta: {
|
||||||
|
title: t('routes.demo.form.appendForm'),
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
117
src/views/demo/form/AppendForm.vue
Normal file
117
src/views/demo/form/AppendForm.vue
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
<template>
|
||||||
|
<PageWrapper title="表单增删示例">
|
||||||
|
<CollapseContainer title="表单增删">
|
||||||
|
<BasicForm @register="register" @submit="handleSubmit">
|
||||||
|
<template #add="{ field }">
|
||||||
|
<Button v-if="field === 1" @click="add">+</Button>
|
||||||
|
<Button v-if="field > 1" @click="del(field)">-</Button>
|
||||||
|
</template>
|
||||||
|
</BasicForm>
|
||||||
|
</CollapseContainer>
|
||||||
|
</PageWrapper>
|
||||||
|
</template>
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, ref } from 'vue';
|
||||||
|
import { BasicForm, useForm } from '/@/components/Form/index';
|
||||||
|
import { CollapseContainer } from '/@/components/Container/index';
|
||||||
|
import { Input } from 'ant-design-vue';
|
||||||
|
import { PageWrapper } from '/@/components/Page';
|
||||||
|
import { Button } from '/@/components/Button';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
components: { BasicForm, CollapseContainer, PageWrapper, [Input.name]: Input, Button },
|
||||||
|
setup() {
|
||||||
|
const [register, { appendSchemaByField, removeSchemaByFiled, validate }] = useForm({
|
||||||
|
schemas: [
|
||||||
|
{
|
||||||
|
field: 'field1a',
|
||||||
|
component: 'Input',
|
||||||
|
label: '字段1',
|
||||||
|
colProps: {
|
||||||
|
span: 8,
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'field1b',
|
||||||
|
component: 'Input',
|
||||||
|
label: '字段1',
|
||||||
|
colProps: {
|
||||||
|
span: 8,
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: '1',
|
||||||
|
component: 'Input',
|
||||||
|
label: ' ',
|
||||||
|
colProps: {
|
||||||
|
span: 8,
|
||||||
|
},
|
||||||
|
slot: 'add',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
labelWidth: 100,
|
||||||
|
actionColOptions: { span: 24 },
|
||||||
|
});
|
||||||
|
|
||||||
|
async function handleSubmit() {
|
||||||
|
try {
|
||||||
|
const data = await validate();
|
||||||
|
console.log(data);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const n = ref(2);
|
||||||
|
|
||||||
|
function add() {
|
||||||
|
appendSchemaByField(
|
||||||
|
{
|
||||||
|
field: 'field' + n.value + 'a',
|
||||||
|
component: 'Input',
|
||||||
|
label: '字段2',
|
||||||
|
colProps: {
|
||||||
|
span: 8,
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
''
|
||||||
|
);
|
||||||
|
appendSchemaByField(
|
||||||
|
{
|
||||||
|
field: 'field' + n.value + 'b',
|
||||||
|
component: 'Input',
|
||||||
|
label: '字段2',
|
||||||
|
colProps: {
|
||||||
|
span: 8,
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
''
|
||||||
|
);
|
||||||
|
appendSchemaByField(
|
||||||
|
{
|
||||||
|
field: `${n.value}`,
|
||||||
|
component: 'Input',
|
||||||
|
label: ' ',
|
||||||
|
colProps: {
|
||||||
|
span: 8,
|
||||||
|
},
|
||||||
|
slot: 'add',
|
||||||
|
},
|
||||||
|
''
|
||||||
|
);
|
||||||
|
n.value++;
|
||||||
|
}
|
||||||
|
|
||||||
|
function del(field) {
|
||||||
|
console.log(field);
|
||||||
|
removeSchemaByFiled([`field${field}a`, `field${field}b`, `${field}`]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return { register, handleSubmit, add, del };
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
Loading…
Reference in New Issue
Block a user