当前位置: 首页 > news >正文

react 项目中,选中一条信息,自动带出对应的信息

项目中常遇到,选中了某个搜索框,然后form 中的某个,或者某几个数据被自动带出。
例如,我选中了经办人,带出了部门信息
下边是一个经办人的弹框信息。这里的部门我取得是- 所属组织名称
在这里插入图片描述
选中后自动带出赋值到部门,
在这里插入图片描述
但是部门也可以重新选择覆盖,还要把值传递给后台,
这个是部门的弹框
在这里插入图片描述
重新选择后的部门赋值。
在这里插入图片描述
那么我们看一下怎么处理代码吧。

操作的按钮比较多,我们就用 编辑 的效果来测试了
首先我们肯定有一个基础信息的文件,然后有js代码文件。
我们点击了编辑后,都会首先调取接口获取数据。
假设我们没域部门信息,那么我们就可以来实现编辑效果了。
在这里插入图片描述
我们看上图,会在最外层的index 页面的 钩子函数中
componentDidMount(){
if (this.state.typa === ‘create’){ // 如果是新增按钮
}else{// 如果是编辑
this.getDetail(this.state.type); // 这里的type是传过来的 type: this.props.match.params?.type,
}
}
然后我么就调用getDetail 这个方法进行查看详情信息

  getDetail = async (data) => {
    this.setState({ loading: true });
    const res1 = await service.searchBasic({ id: data }) 
    this.setState({ loading: false });
    if (res1.success) {
      const data = this.transBasicFormData(res1.data);
      this.setState({
        formData: data,
      });
    } else {
      ElNotification({
        type: 'error',
        message: res1.msg || res1.data || '操作失败!'
      });
    }
  };

  //查询返回数据后 特殊处理
  transBasicFormData = (data) => {
    this.basicHiddenData = {
      ...this.basicHiddenData,
      settleEntityAddrNo: data.settleEntityAddrNo,
    }
    return {
      ...data,
      settleEntityId: { // 结算主体
        id: data.settleEntityId,
        ouName: data.settleEntityName,
        addrNo: data.settleEntityAddrNo
      },
      // 经办人
      operator: {
        operatorId: data.operatorId,
        empName: data.operator
      }
      deptId: { // 部门
        id: data.deptId,
        buName: data.deptName
      },
    }
  }

保存的功能也直接写上了,

// 保存按钮触发
  beforeSave = async () => {
    const data = await this.proceData();
    // console.log('params=================', data);
    data && this.save(data);
  };
  // 处理数据
  proceData = async () => {
    const { formRef} = this.state;
    const formDataRes = await formRef.validateFields();
    const params = {
      ...this.state.formData,
      ...this.basicHiddenData,
      ...formDataRes,
      processTime: formDataRes.processTime.replace(' ', 'T'),
      settleEntityId: formDataRes.settleEntityId?.id, // 结算主体信息
      settleEntityName: formDataRes.settleEntityId?.ouName,
      detailsSaveVOS: tableArr, // 编辑表格信息行内容
      operatorId: formDataRes.operator?.id, // 经办人信息
      operator: formDataRes?.operator.empName,
      deptId: formDataRes.operator?.buId || formDataRes.deptId?.id, // 关联部门信息 或后边就是单独选择部门的时候进行的赋值,前边是带出的信息
      deptName: formDataRes.operator?.buName || formDataRes.deptId?.buName,
    };
    return params;
  };

那么我们看怎么关联form信息的数据自动带出。

在这里插入图片描述
先看下我们基础信息配置页面config
在这里插入图片描述在这里插入图片描述
js 文件index

注意不要 忘记定义areaRef
在这里插入图片描述

在这里插入图片描述
完整如下

	import React from 'react';
	import ElForm from '@/components/el/ElForm';
	import { getFormItems } from './config';
	
	interface Props {
	  onRef: Function;
	  formRef: any;
	  formData: any;
	  type: any;
	  onValuesChange?: Function
	}
	
	class BaseForm extends React.Component<Props> {
	  constructor(props) {
	    super(props);
	    this.state = {
	      areaRef: null
	    }
	  }
	
	  /**
	   * 基本信息改变
	   * @param changedFields 改变的字段信息
	   */
	  onValuesChange = async (changedFields) => {
	    console.log('onValuesChange', changedFields); // 拿到获取的form 信息值
		if (changedFields.operator) {// 经办人
	      this.props.formRef.setFieldsValue({
	          deptId: changedFields.operator?.buName, // 部门
	          // 如果你想带出更多的信息可以直接进行赋值就行了。当然要是在这个经办人能带出来的,
	          或者继续上述if的操作做其他的带出信息
	      });
	    }
	  };
	
	  areaRef = (ref) => {
	    this.setState({
	      areaRef: ref
	    });
	  };
	
	  render() {
	    return (
	      <ElForm
	        onRef={this.props.onRef}
	        formProps={{
	          onValuesChange: this.onValuesChange,
	          items: getFormItems(
	            this.props.type,
	            this.props.formData,
	            // this.setDisabledDate
	            this.areaRef,
	          ),
	        }}
	        data={this.props.formData}
	      />
	    );
	  }
	}
	
	export default BaseForm;

相关文章:

  • Linux 命令用法
  • 计算选中数据的某项 数据总和
  • 前端处理数组 在 js中把已知对象循环遍历后再push新的数组中
  • scrapy 爬取 useragent
  • react 项目中,某需求需要根据返回数据的某条件禁止选择行
  • 函数式思维的小例子
  • 基于LNMP的Zabbbix之Zabbix Server源码详细安装,但不给图
  • 前端 禁止微信调整字体大小
  • SQL练习之求解填字游戏
  • 前端 项目中 判断两个对象value值是否相等
  • Python的method, class method, static method
  • 三目运算 多条判断
  • ubuntu IP 扫描
  • 前端项目中遇见的 非操作 和 双向非操作 的区别 ,以及使用(双向非操作可以把字符串和数字转换为布尔值。)
  • Django框架初入
  • 〔开发系列〕一次关于小程序开发的深度总结
  • android图片蒙层
  • ES6 ...操作符
  • ES6核心特性
  • ReactNative开发常用的三方模块
  • Redux系列x:源码分析
  • session共享问题解决方案
  • Spark RDD学习: aggregate函数
  • spring boot下thymeleaf全局静态变量配置
  • vue--为什么data属性必须是一个函数
  • 半理解系列--Promise的进化史
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端面试之闭包
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 学习Vue.js的五个小例子
  • Spring第一个helloWorld
  • 阿里云ACE认证学习知识点梳理
  • ​Linux·i2c驱动架构​
  • ​如何在iOS手机上查看应用日志
  • ​什么是bug?bug的源头在哪里?
  • # 数据结构
  • #pragam once 和 #ifndef 预编译头
  • $.proxy和$.extend
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (06)Hive——正则表达式
  • (145)光线追踪距离场柔和阴影
  • (6)添加vue-cookie
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (SpringBoot)第二章:Spring创建和使用
  • (二)springcloud实战之config配置中心
  • (黑马C++)L06 重载与继承
  • (离散数学)逻辑连接词
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)appium-desktop定位元素原理
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)关于pipe()的详细解析