123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- <template>
- <PageWrapper title="动态表单示例">
- <div class="mb-4">
- <a-button @click="changeLabel3" class="mr-2"> 更改字段3label </a-button>
- <a-button @click="changeLabel34" class="mr-2"> 同时更改字段3,4label </a-button>
- <a-button @click="appendField" class="mr-2"> 往字段3后面插入字段10 </a-button>
- <a-button @click="deleteField" class="mr-2"> 删除字段11 </a-button>
- </div>
- <CollapseContainer title="动态表单示例,动态根据表单内其他值改变">
- <BasicForm @register="register" />
- </CollapseContainer>
- <CollapseContainer class="mt-5" title="componentProps动态改变">
- <BasicForm @register="register1" />
- </CollapseContainer>
- </PageWrapper>
- </template>
- <script lang="ts">
- import { defineComponent } from 'vue';
- import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
- import { CollapseContainer } from '/@/components/Container/index';
- import { PageWrapper } from '/@/components/Page';
- import { usePermission } from '/@/hooks/web/usePermission';
- const { hasPermission } = usePermission();
- const schemas: FormSchema[] = [
- {
- field: 'field5',
- component: 'Switch',
- label: '是否显示字段1(css控制)',
- defaultValue: true,
- colProps: {
- span: 12,
- },
- labelWidth: 200,
- },
- {
- field: 'field1',
- component: 'Input',
- label: '字段1',
- colProps: {
- span: 12,
- },
- show: ({ values }) => {
- return hasPermission('test001');
- },
- },
- {
- field: 'field6',
- component: 'Switch',
- label: '是否显示字段2(dom控制)',
- defaultValue: true,
- colProps: {
- span: 12,
- },
- labelWidth: 200,
- },
- {
- field: 'field2',
- component: 'Input',
- label: '字段2',
- colProps: {
- span: 12,
- },
- ifShow: ({ values }) => {
- return !!values.field6;
- },
- },
- {
- field: 'field7',
- component: 'Switch',
- label: '是否禁用字段3',
- colProps: {
- span: 12,
- },
- labelWidth: 200,
- },
- {
- field: 'field3',
- component: 'DatePicker',
- label: '字段3',
- colProps: {
- span: 12,
- },
- dynamicDisabled: ({ values }) => {
- return !!values.field7;
- },
- },
- {
- field: 'field8',
- component: 'Switch',
- label: '字段4是否必填',
- colProps: {
- span: 12,
- },
- labelWidth: 200,
- },
- {
- field: 'field4',
- component: 'Select',
- label: '字段4',
- colProps: {
- span: 12,
- },
- dynamicRules: ({ values }) => {
- return values.field8 ? [{ required: true, message: '字段必填' }] : [];
- },
- componentProps: {
- options: [
- {
- label: '选项1',
- value: '1',
- key: '1',
- },
- {
- label: '选项2',
- value: '2',
- key: '2',
- },
- ],
- },
- },
- {
- field: 'field11',
- component: 'DatePicker',
- label: '字段11',
- colProps: {
- span: 8,
- },
- },
- ];
- const schemas1: FormSchema[] = [
- {
- field: 'f1',
- component: 'Input',
- label: 'F1',
- colProps: {
- span: 12,
- },
- labelWidth: 200,
- componentProps: ({ formModel }) => {
- return {
- placeholder: '同步f2的值为f1',
- onChange: (e: ChangeEvent) => {
- formModel.f2 = e.target.value;
- },
- };
- },
- },
- {
- field: 'f2',
- component: 'Input',
- label: 'F2',
- colProps: {
- span: 12,
- },
- labelWidth: 200,
- componentProps: { disabled: true },
- },
- {
- field: 'f3',
- component: 'Input',
- label: 'F3',
- colProps: {
- span: 12,
- },
- labelWidth: 200,
- // @ts-ignore
- componentProps: ({ formActionType }) => {
- return {
- placeholder: '值改变时执行查询,查看控制台',
- onChange: async () => {
- const { validate } = formActionType;
- // tableAction只适用于在表格内开启表单的例子
- // const { reload } = tableAction;
- const res = await validate();
- console.log(res);
- },
- };
- },
- },
- ];
- export default defineComponent({
- components: { BasicForm, CollapseContainer, PageWrapper },
- setup() {
- const [register, { setProps, updateSchema, appendSchemaByField, removeSchemaByFiled }] = useForm({
- labelWidth: 120,
- schemas,
- //禁用表单所有组件
- disabled: true,
- labelCol: {
- xs: { span: 24 },
- sm: { span: 6 },
- },
- wrapperCol: {
- xs: { span: 24 },
- sm: { span: 18 },
- },
- actionColOptions: {
- span: 24,
- },
- });
- const [register1] = useForm({
- labelWidth: 120,
- schemas: schemas1,
- actionColOptions: {
- span: 24,
- },
- });
- function changeLabel3() {
- updateSchema({
- field: 'field3',
- label: '字段3 New',
- });
- }
- function changeLabel34() {
- updateSchema([
- {
- field: 'field3',
- label: '字段3 New++',
- },
- {
- field: 'field4',
- label: '字段4 New++',
- },
- ]);
- }
- function appendField() {
- appendSchemaByField(
- {
- field: 'field10',
- label: '字段10',
- component: 'Input',
- colProps: {
- span: 8,
- },
- },
- 'field3'
- );
- }
- function deleteField() {
- removeSchemaByFiled('field11');
- }
- return {
- register,
- register1,
- schemas,
- setProps,
- changeLabel3,
- changeLabel34,
- appendField,
- deleteField,
- };
- },
- });
- </script>
|