一、概述

    一个添加或者修改页面,通常包括: 页面标题、面包屑、表单,表单验证、固定底部的按纽栏等。

这就涉及到:PageContainer页面容器组件+ProForm高级表单组件+ProFormFields 表单项(或者ProFormList、ProFormFieldSet、ProFormDependency )。

还有一些特殊的表单页面:例如Json来生成表单,则用SchemaForm,筛选条件的表单QueryFilter / LightFilter,分步操作的表单StepsForm、浮层弹窗表单(ModalForm 和 DrawerForm )

二、涉及组件介绍:

(1)可以给一个表单整体一个初始对象值(即每一个数据域均有一个名字,自动匹配),也可以给具体某一个ProFormFields表单项初始值,用属性initialValues进行设置,同时表单项之间可以联动。

(2)在ProForm内也支持用自定义组件,即可以用Ant design本身的基础组件。

(3)支持在打开表单中通过url参数设置默认值。

(4)支持把底部的保存等按纽固定页脚。

<ProForm
            submitter={{
              render: (_, dom) => <FooterToolbar>{dom}</FooterToolbar>,
            }}
            onFinish={async (values) => console.log(values)}
          >

整体代码示例:

import React from 'react';
import { message } from 'antd';
import ProForm, { ProFormText, ProFormDateRangePicker, ProFormSelect } from '@ant-design/pro-form';

const waitTime = (time: number = 100) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(true);
    }, time);
  });
};

export default () => {
  return (
    <ProForm<{
      name: string;
      company: string;
    }>
      onFinish={async (values) => {
        await waitTime(2000);
        console.log(values);
        message.success('提交成功');
      }}
      initialValues={{
        name: '蚂蚁设计有限公司',
        useMode: 'chapter',
      }}
    >
      <ProForm.Group>
        <ProFormText
          width="md"
          name="name"
          label="签约客户名称"
          tooltip="最长为 24 位"
          placeholder="请输入名称"
        />
        <ProFormText width="md" name="company" label="我方公司名称" placeholder="请输入名称" />
      </ProForm.Group>
      <ProForm.Group>
        <ProFormText
          name={['contract', 'name']}
          width="md"
          label="合同名称"
          placeholder="请输入名称"
        />
        <ProFormDateRangePicker width="md" name={['contract', 'createTime']} label="合同生效时间" />
      </ProForm.Group>
      <ProForm.Group>
        <ProFormSelect
          options={[
            {
              value: 'chapter',
              label: '盖章后生效',
            },
          ]}
          readonly
          width="xs"
          name="useMode"
          label="合同约定生效方式"
        />
        <ProFormSelect
          width="xs"
          options={[
            {
              value: 'time',
              label: '履行完终止',
            },
          ]}
          name="unusedMode"
          label="合同约定失效效方式"
        />
      </ProForm.Group>
      <ProFormText width="sm" name="id" label="主合同编号" />
      <ProFormText name="project" width="md" disabled label="项目名称" initialValue="xxxx项目" />
      <ProFormText width="xs" name="mangerName" disabled label="商务经理" initialValue="启途" />
    </ProForm>
  );
};