committed by
GitHub
5 changed files with 131 additions and 0 deletions
@ -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