antd常用组件 select,form等

34 篇文章 0 订阅
7 篇文章 0 订阅

参考代码为typescript+react

树选择 TreeSelect

下拉选项的父子节点选中不相关
在这里插入图片描述

import { TreeSelect } from 'antd';
 <TreeSelect
    showSearch
    style={{ width: '100%' }}
    treeData={yyIndustryOptions} //	treeNodes 数据
    dropdownStyle={{ maxHeight: 400, overflow: 'auto' }} //下拉菜单的样式
    allowClear //显示清除按钮
    multiple
    treeDefaultExpandAll  
    fieldNames={{ //自定义节点 label、value、children 的字段
      label: 'label',
      value: 'code',
      children: 'values', 
    }}
/>

其他属性补充:

参数说明
defaultValue指定默认选中的条目
disabled是否禁用
onChange选中树节点时调用此函数

Form表单自定义校验

<Form.Item
  style={{ margin: 0 }}
    name={[index, 'money']}
    rules={[
      {
        required: true,
        message: `金额不能为空`,
      },
      () => ({
        //  自定义校验
        async validator(_, value) {
          if (
            value &&
            !/(^[1-9](\d+)?(\.\d{1,2})?$)|(^(0){1}$)|(^\d\.\d(\d)?$)/.test(
              value,
            )
          ) {
            return Promise.reject(new Error('最多输入两位小数的数字'));
          }
          // 返回结果
          return Promise.resolve();
        },
      }),
    ]}
  >
    <Input
      defaultValue={record.money}
      onChange={(e) =>
        changeBondData(e.target.value, index, 'money')
      }
    />
</Form.Item>

Form表单提交

填写表单,动态添加表格行
在这里插入图片描述

import { Col,Form, Input, Row,  Select, Popconfirm, Button, DatePicker, message,} from 'antd';

const { Option } = Select;

// 新增form
const [addForm] = Form.useForm();
const onAddFinish = (values: any) => {
// 处理表单数据
}

 <Form layout="vertical" form={addForm} onFinish={onAddFinish}>
        <Row gutter={[24, 0]}>
          <Col span={6}>
            <Form.Item
              name="trancheGrade"
              label="证券档次"
              rules={[
                {
                  required: true,
                  message: '证券档次不能为空',
                },
              ]}
            >
              <Select onChange={(value) => {}}>
                {Array.from({ length: levelValue }, (v, k) => k).map(
                  (item: any, index: number) => {
                    return (
                      <Option value={index + 1} key={index + 1}>
                        {index + 1}
                      </Option>
                    );
                  },
                )}
              </Select>
            </Form.Item>
          </Col>
          <Col span={6}>
            <Form.Item
              name="trancheName"
              label="证券名称"
              rules={[
                {
                  required: true,
                  message: '证券名称不能为空',
                },
                () => ({
                  // 自定义校验
                  async validator(_, value) {
                    let findIndex = bondTableData.findIndex(
                      (item: any) => value === item.trancheName,
                    );
                    if (value && findIndex !== -1) {
                      return Promise.reject(new Error('该证券名称已存在'));
                    }
                    // 返回结果
                    return Promise.resolve();
                  },
                }),
              ]}
            >
              <Input />
            </Form.Item>
          </Col>
          <Col span={6}>
            <Form.Item name="couponTypeCd" label="利率类型">
              <Select allowClear placeholder="请选择利率类型">
                {/* 利率类型下拉选项 */}
                {absCouponTypeOptions.map((item: any) => {
                  return <Option value={item.rangeId}>{item.rangeName}</Option>;
                })}
              </Select>
            </Form.Item>
          </Col>
          <Col span={6}>
            <Form.Item
              name="intRate"
              label="发行利率(%)"
              rules={[
                () => ({
                  // 自定义校验
                  async validator(_, value) {
                    if (
                      value &&
                      !/(^[1-9](\d+)?(\.\d{1,2})?$)|(^(0){1}$)|(^\d\.\d(\d)?$)/.test(
                        value,
                      )
                    ) {
                      // 校验失败
                      return Promise.reject(
                        new Error('最多输入两位小数的数字'),
                      );
                    }
                    // 返回结果
                    return Promise.resolve();
                  },
                }),
              ]}
            >
              <Input />
            </Form.Item>
          </Col>

          <Col span={6}>
            <Form.Item
              name="pymtFreq"
              label="偿付频率"
              rules={[
                {
                  required: true,
                  message: '偿付频率不能为空',
                },
              ]}
            >
              <Select allowClear>
                {/* 偿付频率下拉选项 */}
                {absPymtFreqOptions.map((item: any) => {
                  return <Option value={item.rangeId}>{item.rangeName}</Option>;
                })}
              </Select>
            </Form.Item>
          </Col>
          <Col span={6}>
            <Form.Item
              name="principalPaymentType"
              label="还本方式"
              rules={[
                {
                  required: true,
                  message: '还本方式不能为空',
                },
              ]}
            >
              <Select allowClear onChange={(value) => {}}>
                <Option value="过手">过手</Option>
                <Option value="固定">固定</Option>
              </Select>
            </Form.Item>
          </Col>
          <Col span={6}>
            <Form.Item name="trancheExpcMaturity" label="预计到期日">
              <DatePicker style={{ width: '100%' }} />
            </Form.Item>
          </Col>
          <Col span={6}>
            <Form.Item
              name="trancheIssuanceAmt"
              label="初始证券金额(亿元)"
              rules={[
                {
                  required: true,
                  message: '初始证券金额不能为空',
                },
                () => ({
                  // 自定义校验
                  async validator(_, value) {
                    if (
                      value &&
                      !/(^[1-9](\d+)?(\.\d{1,2})?$)|(^(0){1}$)|(^\d\.\d(\d)?$)/.test(
                        value,
                      )
                    ) {
                      // 校验失败
                      return Promise.reject(
                        new Error('最多输入两位小数的数字'),
                      );
                    }
                    // 返回结果
                    return Promise.resolve();
                  },
                }),
              ]}
            >
              <Input />
            </Form.Item>
          </Col>

          <Col span={6}>
            <Form.Item
              name="term"
              label="期限(年)"
              rules={[
                {
                  required: true,
                  message: '期限不能为空',
                },
                () => ({
                  // 自定义校验
                  async validator(_, value) {
                    if (
                      value &&
                      !/(^[1-9](\d+)?(\.\d{1,4})?$)|(^(0){1}$)|(^\d\.\d(\d)?$)/.test(
                        value,
                      )
                    ) {
                      return Promise.reject(
                        new Error('最多输入四位小数的数字'),
                      );
                    }
                    // 返回结果
                    return Promise.resolve();
                  },
                }),
              ]}
            >
              <Input />
            </Form.Item>
          </Col>
          <Col span={6}>
            <Form.Item
              name="outerRating"
              label="外部评级"
              rules={[
                {
                  required: true,
                  message: '外部评级不能为空',
                },
              ]}
            >
              <Select>
                {/* 下拉选项 */}
                {outerRatingOptions.map((item: any) => {
                  return <Option value={item.id}>{item.text}</Option>;
                })}
              </Select>
            </Form.Item>
          </Col>
          <Col span={6}>
            <Form.Item
              name="trancheCode"
              label="证券代码"
              rules={[
                () => ({
                  // 自定义校验
                  async validator(_, value) {
                    let findIndex = bondTableData.findIndex(
                      (item: any) => value === item.trancheCode,
                    );
                    // 校验失败
                    if (value && findIndex !== -1) {
                      return Promise.reject(new Error('证券代码已存在'));
                    }
                    // 返回结果
                    return Promise.resolve();
                  },
                }),
              ]}
            >
              <Input />
            </Form.Item>
          </Col>
          <Col span={6}>
            <Form.Item name="a94" label="&nbsp;">
              <Button type="primary" htmlType="submit">
                添加
              </Button>
            </Form.Item>
          </Col>
        </Row>
      </Form>

form表单参数api

参数说明类型默认值
colon配置 Form.Item 的 colon 的默认值。表示是否显示 label 后面的冒号 (只有在属性 layout 为 horizontal 时有效)booleantrue
disabled设置表单组件禁用,仅对 antd 组件有效booleanfalse
component设置 Form 渲染元素,为 false 则不创建 DOM 节点ComponentType |falseform
fields通过状态管理(如 redux)控制表单字段,如非强需求不推荐使用。FieldData[]-
form经 Form.useForm() 创建的 form 控制实例,不提供时会自动创建FormInstance-
initialValues表单默认值,只有初始化以及重置时生效object-
labelAlignlabel 标签的文本对齐方式left | rightright
labelWraplabel 标签的文本换行方式booleanfalse
labelCollabel 标签布局,设置 span offset 值,如 {span: 3, offset: 12} 或 sm: {span: 3, offset: 12}object-
layout表单布局horizontal | vertical | inlinehorizontal
name表单名称,会作为表单字段 id 前缀使用string-
preserve当字段被删除时保留字段值booleantrue
requiredMark必选样式,可以切换为必选或者可选展示样式。此为 Form 配置,Form.Item 无法单独配置boolean |optionaltrue
scrollToFirstError提交失败自动滚动到第一个错误字段boolean | Optionsfalse
size设置字段组件的尺寸(仅限 antd 组件)small | middle | large-
validateMessages验证提示模板ValidateMessages-
validateTrigger统一设置字段触发验证的时机string | string[]onChange
wrapperCol需要为输入控件设置布局样式时,使用该属性,用法同labelColobject-
onFieldsChange字段更新时触发回调事件function(changedFields, allFields)-
onFinish提交表单且数据验证成功后回调事件function(values)-
onFinishFailed提交表单且数据验证失败后回调事件function({ values, errorFields, outOfDate }) -
onValuesChange字段值更新时触发回调事件function(changedValues, allValues)-

校验表单成功后执行相关操作

try {
  await addForm.validateFields();
} catch {
  checkResult = false;
}

const fieldsValue = addForm.getFieldsValue();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值