antd常用组件 select,form等

news2024/10/2 6:27:03

参考代码为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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Python仓库管理系统的设计与实现django框架

摘 要 随着信息化时代的到来&#xff0c;系统管理都趋向于智能化、系统化&#xff0c;仓库管理系统也不例外&#xff0c;但目前国内的有些公司仍然都使用人工管理&#xff0c;公司规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化…

Django 中间件

文章目录Django中间件默认中间件源码分析自定义中间件process_request&#xff08;掌握&#xff09;process_response&#xff08;掌握&#xff09;process_view(了解)process_template_response(了解)process_execption(了解)Django中间件 只要是涉及到全局相关的功能都可以使…

python基于PHP+MySQL的在线汽车租赁管理系统

随着时代的发展,汽车已经成为当代人们代步的主要工具。但是很多时候人们并没有购车的念头,这个时候就出现了一种新的行业,就是汽车租赁行业,这样不仅可以解决用车的需求,而且可以节省大量的购车成本,为了能够方便用户进行汽车租赁我们开发了PHP在线汽车租赁管理系统,本系统分为…

软件版本号详解

我们现在的生活离不开软件&#xff0c;版本号一般不会引起大家的关注&#xff0c;但是一旦软件出现了Bug或者其他问题&#xff0c;这个时候&#xff0c;软件的提供方都会让用户提供其软件的版本号。软件版本号长什么样呢&#xff1f;上面这张截图是我们常用的手机APP&#xff0…

关于git你应该知道的一些东西

前言 好好写代码&#xff0c;好好的反思踩过的坑&#xff0c;然后尽量不要给别人挖坑。这是我对自己&#xff0c;以及每个刚入行或即将的小伙伴的建议。一个软件工程项目&#xff0c;是一个系统性极强且较为复杂的工作&#xff0c;会有很多人参与到这个工作中来&#xff0c;如何…

Yarn pengding任务的原因之一:Reserved

一、背景 系统&#xff1a;linux centos7.4 Yarn&#xff1a;3.0.0-cdh6.3.2 二、现象 业务方通知&#xff0c;大部分使用yarn的任务都长时间处于执行中的状态。 三、问题排查 查看yarn的ui发现&#xff0c;memory reserved的值&#xff0c;已经和memory total等值了。 然…

Unity内实现无卡顿取图像推流/截屏等功能

文章目录 一、Unity提供的ScreenCapture取图像接口二、我们一个一个看API:三、Unity日本大神keijiro还提供了一种异步截图的方案,完整代码如下:一、Unity提供的ScreenCapture取图像接口 众所周知,Unity提供了ScreenCapture API用来获取引擎最终渲染到屏幕的图像: 二、我…

深度学习入门(三十五)计算性能 编译器和解释器

深度学习入门&#xff08;三十五&#xff09;计算性能 编译器和解释器前言计算性能——编译器和解释器教材1 符号式编程2 混合式编程3 Sequential的混合式编程3.1 通过混合式编程加速3.2 序列化4 小结前言 核心内容来自博客链接1博客连接2希望大家多多支持作者 本文记录用&…

【离散数学】第一章 测试

1. A. 对 B. 错 正确答案&#xff1a;A 2. A. 对 B. 错 正确答案&#xff1a;B 3. A. 错 B. 对 正确答案&#xff1a;B 4.p↔q⇔p↔q A. 对 B. 错 正确答案&#xff1a;A 5. A. 对 B. 错 正确答案&#xff1a;A 6.n个命题变元组成的命题公式共有( )种不同的…

小胶质细胞仅仅是神经系统内的“配角”?

大脑中存在着数量众多的神经胶质细胞&#xff0c;约占人类大脑细胞的 90%&#xff1b;不同类型的胶质细胞在起源、组成、形态和解剖学上都是不同的&#xff0c;而且它们发挥着不同的功能。 图 1. 中枢神经系统的四种神经细胞 小胶质细胞与 AD 疾病进程 小胶质细胞是一类来源于…

数据分析的重要性体现在哪?

近几年&#xff0c;数据分析成为了当今IT界的新起之秀&#xff0c;在我国互联网飞速发展的浪潮下&#xff0c;无论是公司职员还是个体商户或大公司管理者&#xff0c;都需要学习掌握数据分析的能力&#xff0c;它已经成为数据时代各行各业突破各自行业发展瓶颈的最有效手段。 那…

微信小程序复习题

文章目录填空题选择题判断题分析题&#xff08;20&#xff09;分析代码显示效果页面设计题&#xff08;40&#xff09;填空题 微信小程序创始人是 张小龙 &#xff0c;英文缩写 Mini Program小程序是一种无需下载和无需安装即可使用的应用&#xff0c;它实现了应用“ 触手可得…

[附源码]java毕业设计基于web的硕士研究生入学考务管理

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

5、Redis的发布和订阅

文章目录5、Redis的发布和订阅5.1、什么是发布和订阅5.2、Redis的发布和订阅5.2.1、客户端可以订阅频道如下图5.2.2、当给这个频道发布消息后&#xff0c;消息就会发送给订阅的客户端5.3、发布订阅命令行实现5.3.1、打开一个客户端订阅channel15.3.2、打开另一个客户端&#xf…

Day32——二叉树专题

文章目录28.删除二叉搜索树的节点29.修剪二叉搜索树30.将有序数组转换为二叉搜索树31. 把二叉搜索树转换为累加树28.删除二叉搜索树的节点 题目链接&#xff1a;450. 删除二叉搜索树中的节点 - 力扣&#xff08;LeetCode&#xff09; 如果目标节点大于当前节点值&#xff0c;则…

MapReduce编程模型——自定义序列化类实现多指标统计

&#x1f3e0;Hadoop序列化 &#x1f449;序列化 序列化就是把内存中的对象&#xff0c;转换成字节序列(或其他数据传输协议)以便于存储(持久化)和网络传输。反序列化就是将收到字节序列(或其他数据传输协议)或者是硬盘的持久化数据&#xff0c;转换成内存中的对象。 &#…

7天酒店亮相中国国际饭店业大会元宇宙线上展 创见酒店投资新未来

11月12日&#xff0c;由中国饭店协会主办的第一届酒旅菁英品牌嘉年华“元宇宙”线上展成功举行。7天酒店“元宇宙”展馆首度亮相&#xff0c;通过数字化交互、虚拟展厅、线上路演等&#xff0c;为行业和市场带来耳目一新的创新营销形式。 作为第七届中国国际饭店业大会的线上分…

基于微信小程序的药店管理系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Mav…

蓝牙HID——将android设备变成蓝牙鼠标/触控板(BluetoothHidDevice)

前言 本篇为蓝牙HID系列篇章之一&#xff0c;本篇以红米K30&#xff08;MIUI13即Android 12&#xff09;手机作为蓝牙HID设备&#xff0c;可以与电脑、手机、平板等其他蓝牙主机进行配对从而实现鼠标触控板的功能。 蓝牙HID系列篇章&#xff1a; 蓝牙HID——将android设备变成…

babel-plugin-import 实现按需引入

官方文档&#xff1a;https://github.com/umijs/babel-plugin-import#usage 为什么需要这个插件&#xff1f; 在 antd 和 element 两个组件库中&#xff0c;index.js 分别是这样的&#xff1a; // antd export { default as Button } from ./button; export { default as Tab…