antd pro后台管理项目中form表单的动态添加问题

在做的一个基于antd pro开发的一个后台管理系统中遇到这样一个需求,员工档案部分的地址信息,紧急联系人,教育经历需要编辑添加多段,因此遇到了antd中的form表单里面添加多个字段的问题,具体需求以及实现如下:
在这里插入图片描述

经过查阅官方文档,可以通过Form.List,以及内部提供的API来实现
下面附上源码

     <Form
        {...layout}
        form={form}
        name={props.titleid}
        onFinish={onFinish}
        initialValues={contectInfo}
      >
        <Row>
          <Col span={8}>
            {
             Object.keys(contectTitle).slice(0,3).map(item=>{
              if(contectTitle[item]==="姓名" || contectTitle[item]==="关系"){
                return (
                  <Form.Item name={item} 
                  label={contectTitle[item]} 
                  rules={[{ required:true, message: '请输入' }]}
                  key={`${item+Math.random()}`} hasFeedback>
                  <Input placeholder="请输入" />
                </Form.Item>
                )
              }
                return(
                  <Form.Item
                  name={item}
                  label={contectTitle[item]}
                  key={`${item+Math.random()}`}
                  rules={[{  message: '请输入' }]}
                >
                  <Input placeholder="请输入" />
                </Form.Item>
                )
             })  
            }
          </Col>
          <Col span={8}>
          {
             Object.keys(contectTitle).slice(3,6).map(item=>{
              if(contectTitle[item]==="是否重要" ){
                return (
                  <Form.Item name={item} 
                  label={contectTitle[item]} 
                  rules={[{ required:true, message: '请输入' }]}
                  key={`${item+Math.random()}`} hasFeedback>
                    <Radio.Group>
                      <Radio value="a"></Radio>
                      <Radio value="b"></Radio>
                    </Radio.Group>
                </Form.Item>
                )
              }
                return(
                  <Form.Item
                  name={item}
                  label={contectTitle[item]}
                  key={`${item+Math.random()}`}
                  rules={[{  message: '请输入' }]}
                >
                  <Input placeholder="请输入" />
                </Form.Item>
                )
             })  
            }
          </Col>
          <Col span={8}>
 
            {
             Object.keys(contectTitle).slice(6).map(item=>{
                return(
                  <Form.Item
                  name={item}
                  key={`${item+Math.random()}`}
                  label={contectTitle[item]}
                  rules={[{  message: '请输入' }]}
                >
                  <Input placeholder="请输入" />
                </Form.Item>
                )
             })  
            }
          </Col>
        </Row>
        <Row>
            <Col span={24}>
            <Divider dashed />

            </Col>
        </Row>
        //以下为动态添加的表单的代码,
   <Form.List name="names" >
    {(fields, { add, remove }) => {
      console.log("fields",fields)
      return (
        <div>
          {fields.map((field, index) => (
            <div key={field.key}>
              <Row>
                  <Col span={8}>
                    {
                      Object.keys(contectTitle).slice(0,3).map(item=>{
                      if(contectTitle[item]==="姓名" || contectTitle[item]==="关系"){
                        console.log(8888,field.name)
                        return (
                          <Form.Item 
                          name={[field.name, item]} //必须每个都添加上
                          label={contectTitle[item]} 
                          fieldKey={[field.fieldKey, "lastName"]}                         
                          rules={[{ required:true, message: '请输入' }]}
                            key={`${item+Math.random()}`}//必须每个都添加上hasFeedback>
                          <Input placeholder="请输入" />
                        </Form.Item>
                        )
                      }
                        return(
                          <Form.Item
                          name={[field.name, item]}
                          label={contectTitle[item]}
                          fieldKey={[field.fieldKey, "lastName"]}
                          key={`${item+Math.random()}`}
                          rules={[{  message: '请输入' }]}
                        >
                          <Input placeholder="请输入" />
                        </Form.Item>
                        )
                      })  
                    }
                  </Col>
                  <Col span={8}>
                  {
                      Object.keys(contectTitle).slice(3,6).map(item=>{
                      if(contectTitle[item]==="是否重要" ){
                        return (
                          <Form.Item name={[field.name, item]}
                          label={contectTitle[item]} 
                          rules={[{ required:true, message: '请输入' }]}
                          key={`${item+Math.random()}`}
                          fieldKey={[field.fieldKey, "lastName"]}
                           hasFeedback>
                            <Radio.Group>
                              <Radio value="a"></Radio>
                              <Radio value="b"></Radio>
                            </Radio.Group>
                        </Form.Item>
                        )
                      }
                        return(
                          <Form.Item
                          name={[field.name, item]}
                          label={contectTitle[item]}
                          key={`${item+Math.random()}`}
                          fieldKey={[field.fieldKey, "lastName"]}
                          rules={[{  message: '请输入' }]}
                        >
                          <Input placeholder="请输入" />
                        </Form.Item>
                        )
                      })  
                    }
                  </Col>
                  <Col span={8}>

                    {
                      Object.keys(contectTitle).slice(6).map(item=>{
                        return(
                          <Form.Item
                          name={[field.name, item]}
                          label={contectTitle[item]}
                          key={`${item+Math.random()}`}
                          fieldKey={[field.fieldKey, "lastName"]}
                          rules={[{  message: '请输入' }]}
                        >
                          <Input placeholder="请输入" />
                        </Form.Item>
                        )
                      })  
                    }
                  </Col>
                </Row>
                <Row>
                    <Col span={24}>
                    <Divider dashed />
                    <Form.Item>
                      {fields.length > 0 ? (
                      <MinusCircleOutlined
                        className="dynamic-delete-button"
                        style={{ margin: '0 8px' }}
                        onClick={() => {
                          remove(field.name);
                        }}
                      />
                    ) : null}
                    </Form.Item>  
                    </Col>
                </Row>
                </div>

          ))}
          <Form.Item>
            <Button 
            type="link" 
            onClick={() => {
              add();
            }}
            >
                +添加
              </Button>
          </Form.Item>
        </div>
      );
    }}
  </Form.List>
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值