ant 编辑回显

本文探讨了在Ant Design中实现编辑回显的原理,主要涉及model层和js层的操作。编辑时,通过触发接口将数据保存到model层,并实时显示出来。在model层,利用mapPropsToFields进行数据映射;而在js层,详细阐述了相关逻辑处理。

编辑原理:修改时触发接口,将数据存入model层并输出
使用mapPropsToFields

**

model层

**

import {??????} from "@/services/api";
import assign from 'object-assign';

const InitState = {
  userInfo: {
      projectName: undefined,
      projectNum: undefined, 
      projectManager: undefined,
      projectLender:undefined,
      customerName: undefined, 
      customerNum: undefined,
      status: undefined,
      projectCompanyId: undefined,
      projectDepartmentId: undefined,
    },
}
export default {
  namespace: 'addProject',
  state: {
      ...InitState
  },
  effects: {
    *modifyProjectList({payload,success,failed},{call,put}){
      const res = yield call('??????',payload);
        if (res && res.code === 0) {
          yield put({
            type: 'saveUserInfo',
            userInfo: assign({},res.data)
          })
          success(res);
        } else {
          failed(res);
        }
    }

  },
  reducers: {
    saveUserInfo(state,{ userInfo }) {
      return {
        ...state,
        userInfo
      };
    },
    clearStore(){
      return {
        ...InitState
      };
    }
  }
}

**

js层

**

@connect(({addProject}) => ({addProject}))
@Form.create({
  mapPropsToFields(props) {
    // console.log(props,"props")
    const { customerNum,customerName,projectCompanyId, projectLeader, projectDepartmentId, projectNum, projectName, projectManager , status} = props.addProject.userInfo;
    return {
      projectNum: Form.createFormField({
        ...props.addProject.userInfo.projectNum,
        value: projectNum,
      }),
      projectName: Form.createFormField({
        ...props.addProject.userInfo.projectName,
        value: projectName,
      }),
      projectLeader: Form.createFormField({
        ...props.addProject.userInfo.projectLeader,
        // eslint-disable-next-line no-undef
        value: projectLeader,
      }),
      projectCompanyId: Form.createFormField({
        ...props.addProject.userInfo.projectCompanyId,
        value: projectCompanyId,
      }),
      projectDepartmentId: Form.createFormField({
        ...props.addProject.userInfo.projectDepartmentId,
        value: projectDepartmentId,
      }),
      projectManager: Form.createFormField({
        ...props.addProject.userInfo.projectManager,
        value: projectManager,
      }),
      status: Form.createFormField({
        ...props.addProject.userInfo.status,
        value: status,
      }),
      customerName: Form.createFormField({
        ...props.addProject.userInfo.customerName,
        value: customerName,
      }),
      customerNum: Form.createFormField({
        ...props.addProject.userInfo.customerNum,
        value: customerNum,
      })
    };
  }
})
class AddProject extends Component {
  componentDidMount() {
    const { dispatch } = this.props;
    if(id !== undefined) {
      this.setState({
      },() => {
        dispatch({
          type: 'addProject/modifyProjectList',
          payload: {
            projectId:id
          },
          success: (res) => {
            const desc = res.data.delFlag === '1';
            this.setState({
              desc
            })
            message.success('用户信息查询成功');
          },
          failed:(res) => {
            message.error(res.msg);
          }
        })
      })
    }
  }
  componentWillUnmount() {
    const { dispatch } = this.props;
    dispatch({
      type: 'addProject/clearStore'
    })
  }


  render() {
    const { form } = this.props;
    const { getFieldDecorator } = form ;
    return (
      <Fragment>
        <Card title={this.state.edit ? '修改项目' : '新建项目'}>
          <Form {...formItemLayout} onSubmit={() => {}} style={{width:520}}>
            <FormItem label='项目编码'>
            {getFieldDecorator('projectNum',{ rules: [{required: true,message: '请输入项目编码'}]})(
              <Input placeholder='请输入项目编码' disabled={this.state.edit}/>
            )}
            </FormItem>
            <FormItem label='项目名称'>
            {getFieldDecorator('projectName',{ rules: [{required: true,message: '请输入项目编码'}]})(
              <Input placeholder='请输入项目名称' disabled={this.state.edit}/>
            )}
            </FormItem>
            <FormItem label='项目经理'>
            {getFieldDecorator('projectManager',{ rules: [{message: '请输入项目经理'}]})(
                <SearchSelect type='managerUserId' placeholder='请选择项目经理'/>
            )}
            </FormItem>
            <FormItem label='负责人'>
            {getFieldDecorator('projectLeader')(
              <Input placeholder='请输入负责人'/>
            )}
            </FormItem>
            <FormItem label='项目状态'>{/* 111111 */}
            {getFieldDecorator('status', { initialValue: '1'})(
              <Radio.Group>
                <Radio key={1} value="正常">正常</Radio>
                <Radio key={2} value="关闭">关闭</Radio>
              </Radio.Group>,
            )}
            </FormItem>
            <FormItem label='项目所属部门'>
            {getFieldDecorator('projectDepartmentId',{rules: [{required: true,message: '请选择项目所属部门'}]})(
              <SearchSelect  type='deptId' placeholder='请选择项目所属部门'/>
            )}
            </FormItem>
            <FormItem label='项目所属公司'>
            {getFieldDecorator('projectCompanyId',{rules: [{required: true,message: '请选择项目所属公司'}]})(
              <SearchSelect  type='companyIds' placeholder='请选择项目所属公司'/>
            )}
            </FormItem>
            <FormItem label='客户名称'>
            {getFieldDecorator('customerName')(
              <Input placeholder='请输入客户名称' />
            )}
            </FormItem>
            <FormItem label='客户编号'>
            {getFieldDecorator('customerNum')(
              <Input placeholder='请输入客户编号' />
            )}
            </FormItem>
          </Form>
        </Card>
      </Fragment>
    );
  }
}

export default AddProject;

Ant Design (antd) 的表单组件中,自定义组建通常用于创建一些特定于业务需求的非标准输入控件。如果你想要编辑回显值,你可以按照以下步骤操作: 1. **创建自定义组件**: 首先,你需要创建一个React组件,这个组件应该接收`value`和`onChange`等基本属性,用来设置初始示内容和处理用户输入的变化。 ```jsx import React from 'react'; import { Input } from 'antd'; const CustomInput = ({ value, onChange }) => { return ( <div> {/* 使用antd的Input,并传递你的值和事件处理器 */} <Input value={value} onChange={onChange} /> </div> ); }; export default CustomInput; ``` 2. **在Form组件中使用自定义组件**: 然后,在`Form`组件中,你可以像使用内置的`Input`一样,引用你的`CustomInput`组件,并在初始化时设置回显值。 ```jsx import { Form, Input } from 'antd'; import CustomInput from './CustomInput'; const MyForm = () => { const [form] = Form.useForm(); const initialValue = '你的回显值'; // 可能是一个字符串、对象或其他数据类型 form.setFieldsValue({ customField: initialValue, }); const onFinish = (values) => { console.log('表单提交', values); }; return ( <Form form={form} onFinish={onFinish}> <Form.Item label="自定义字段" name="customField"> <CustomInput /> </Form.Item> </Form> ); }; export default MyForm; ``` 当你打开表单时,你的自定义输入框会直接示预设的回显值。如果用户修改了值,`onChange`事件会被触发,更新到表单状态。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值