手把手教你封装一个ant design的审核框组件

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣学习前端知识

这边先上代码

然后我们逐个解释

import React, { Component, Fragment } from 'react';
import { Modal, Row, Form, Col, Radio, Tag, Input, message } from 'antd';/*** 弹框 审核* @param {String}  requestUrl       请求 url {必填}* @param {Object}  requestParams    请求参数** @param {Array}   checkHandleList  单选数据(审核通过,驳回)* @param {Array}   checkTagList     备注快捷便签 list* @param {Boolean}  modalShow       弹窗显示**/
@Form.create()
class BaseCheck extends Component {constructor(props) {super(props);//控制弹出框的开启this.state = {loading: false,};}//控制父组件可以调用子组件的方法componentDidMount() {this.props.onRef && this.props.onRef(this);}// 点击确定 校验并请求handleOkCheck = () => {this.props.form.validateFieldsAndScroll(['checkRadio', 'checkRemark'], 
(error, values) => {if (error) {return;}const { checkHandleList } = this.props;const arr = checkHandleList.filter((item) => item.key === 
values.checkRadio);if (arr[0].isRequired && !values.checkRemark) {Modal.error({title: '提示',content: '请输入驳回备注',});return;}this.checkRequest(values);});};//处理接口请求checkRequest = async (values) => {this.setState({ loading: true });let { requestUrl, requestParams = {} } = this.props;try {const res = await requestUrl({...requestParams,approveAction: values.checkRadio,approveMemo: values.checkRemark,});if (res.returnCode == 0) {message.success('提交成功');//提交成功的回调this.props.onOk && this.props.onOk();} else {message.warning(res.returnMsg);}} catch (error) {} finally {this.setState({ loading: false });}};//取消的时候的回调handleCancelCheck = () => {this.props.onCancel && this.props.onCancel();};// 点击快捷备注标签tagClick = (item) => {this.props.form.setFieldsValue({checkRemark: item.value,});};// 初始化备注initRemarkFn = () => {this.props.form.setFieldsValue({checkRemark: '',});};render() {const {form: { getFieldDecorator },checkTagList = [],modalShow,checkHandleList = [],radioMsg,} = this.props;const style = {position: 'relative',top: '-20px',left: '120px',color: '#1890ff',};return (<Fragment><ModalmaskClosable={false}title="审核"visible={modalShow}width={550}onOk={this.handleOkCheck}onCancel={this.handleCancelCheck}><Form labelCol={{ span: 6 }} wrapperCol={{ span: 18 }} 
layout={'inline'}><Row span={24}><Col span={24}><Form.Item label={'审核'} style={{ width: '100%' }}>{getFieldDecorator('checkRadio', {rules: [{ required: true, message: '请选择是否审核通过' }],})(<Radio.Group>{checkHandleList.map((item) => {return (<Radio value={item.key} key={item.key}>{item.value}</Radio>);})}{/*<Radio value={PRODUCTION_LIBRARY_CHECKED}
>审核通过</Radio>*/}{/*<Radio value={PRODUCTION_LIBRARY_CHECKNOT
}>驳回</Radio>*/}</Radio.Group>)}</Form.Item></Col>{radioMsg && <Col style={style}>{radioMsg}</Col>}</Row><Row span={24}><Col span={24}><Form.Item label={'备注'} style={{ width: '100%' }}>{getFieldDecorator('checkRemark')(<Input.TextArea />)}</Form.Item></Col></Row><Row><Col style={{ paddingLeft: '120px' }}>{checkTagList.map((item, index) => {return (<Tag color="#108ee9" key={index} onClick={() =>this.tagClick(item)}>{item.value}</Tag>);})}</Col></Row></Form></Modal></Fragment>);}
}export default BaseCheck;

解释1 这边loding控制接口请求的加载

 解释2 设置单选数据 驳回的时候添加备注

解释3 点击驳回时候的快捷备注

 解释4 如何使用

父组件

   <BaseCheck

          {...checkParams}

          onOk={this.handleOkCheck}

          onCancel={() => {

            this.setState({ checkShow: false });

          }}

          modalShow={checkShow}

        />

const checkParams = {requestUrl: withdrawalRecordReview,requestParams: {codeList: selectedRowKeys,},checkTagList,checkHandleList: [{key: BOOTH_TYPE_ACCEPT_ACCEPT,value: '审核通过',isRequired: false, // 标志 是否必填备注},{key: BOOTH_TYPE_REFUSE_REFUSE,value: '驳回',isRequired: true, // 标志 是否必填备注},],};

 

实现总效果

 则功能实现 有什么疑问欢迎一起探讨

 

 

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

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

相关文章

HTML语法06

框架标签: 这个比较难解说&#xff0c;我还是通过一个例子来说吧&#xff01; 如&#xff1a; <html> <head> <title>框架实作</title> </head> <frameset cols20%,80%> <frame src"a.html" name"1"> <frame…

sgu 240 Runaway (spfa)

题意&#xff1a;N点M边的无向图&#xff0c;边上有线性不下降的温度&#xff0c;给固定入口S&#xff0c;有E个出口。逃出去&#xff0c;使最大承受温度最小。输出该温度&#xff0c;若该温度超过H&#xff0c;输出-1。 羞涩的题意 显然N*H的复杂度dp[n][h]表示到达n最大温度为…

浅谈浏览器中的preflight请求

浅谈浏览器中的preflight请求

使用UltraEdit32编辑器格式化源码功能 XML、Java、C/C++、C#

From: http://www.cnblogs.com/zcy_soft/archive/2011/01/18/1938509.html UE编辑器一直是我编程和编辑文本的好帮手&#xff0c;对它映像最深刻的功能就是列模式编辑功能&#xff0c;确实给我的工作带来不少的便利&#xff0c;但作为编程工具没有格式化源 代码的功能能似乎使U…

深入react技术栈(1):React简介

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣获取前端知识 前言 专注视图层 Virtual DOM 真实页面对应一个DOM树.在传统页面的开发模式中 每次更新页面都需要手动更新 DOM操作非常昂贵。我们都知道在前端开发中&#xff0c;性能消耗最大的就是DOM操作 而且这…

mysql整理类型_MYSQL数据类型分析整理

1&#xff0c;时间类型类型 所站空间datetime 8字节timestamp 4字节date 3字节year 1字节time 3字节datetime使用范围&#xff1a;"1000-01-01 00:00:00" 至 "9999-12-31 23:59:59…

成就DBA职业生涯

成就DBA职业生涯介绍许多年来&#xff0c;我在不同的新闻组上花费了很多时间与那些想知道如何得到数据库管理员&#xff08;DBA&#xff09;的工作或者如何成长为一名DBA的IT人进行交谈&#xff0c;现在他们有了工作。这些年来许多人针对如何达到这个目标提出了不同意见。本文即…

Capistrano3 与 Mina

链接&#xff1a; http://blog.naixspirit.com/2014/12/14/cap_and_mina/ Capistrano 0. 服务器目录结构 首先来看看经过多次部署后, 服务器会生成一个这样的目录结构 ├── current -> /var/www/your_app/releases/20141201042659 ├── releases │ ├── 2014120103…

连续赋值与求值顺序var a = {n:1};a.x = a = {n:2}; alert(a.x);

连续赋值与求值顺序var a {n:1};a.x a {n:2}; alert(a.x);

Vim/GVim格式化xml文件

From: http://yaven.iteye.com/blog/1084044 今天找了很久关于在VIM中格式化xml的插件都没找到&#xff0c;后来才发现其实不用装插件&#xff0c;在linux环境中使用xmllint就可以实现对xml文件的格式化功能。 1&#xff0c;安装libxml2。 Libxml2 是一个xml的c语言版的解析器&…

pythonsys标准_python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出...

标准输出(sys.stdout)对应的操作就是print(打印)了&#xff0c;标准输入(sys.stdin)则对应input(接收输入)操作&#xff0c;标准错误输出和标准输出类似也是print(打印)。python最基本的操作 - 打印&#xff1a;print其效果是把 1 写在console(命令行)里面让你看。实际上他的操…

用 VNC 远程图形化登录 Linux (VNC 全屏显示)

From: http://www.cnblogs.com/cy163/archive/2007/05/23/757625.html VNC简介』 网络遥控技术是指由一部计算机&#xff08;主控端&#xff09;去控制另一部计算机&#xff08;被控端&#xff09;&#xff0c;而且当主控端在控制端时&#xff0c;就如同用户亲自坐在被控端前操…

金山毒霸的云查杀很牛X

金山毒霸的云查杀很牛X无论安装包大小、资源占用率、查杀率、还是新病毒反应速度&#xff08;秒级对比&#xff09;&#xff0c;牛X!听说&#xff0c;金山毒霸2011-增加了免费服务时间&#xff01;以后是否也会全免费&#xff1f;既然免费了&#xff0c;就试试吧&#xff01;下…

提示:不建议在没有为偏离分支指定合并策略时执行 pull 操作。 您可以在执行下一次

提示&#xff1a;不建议在没有为偏离分支指定合并策略时执行 pull 操作。 您可以在执行下一次

python中空位符_python中空位符_Python之路 - Python - 字符编码 - 期权论坛

字符编码python解释器在加载 .py 文件中的代码时&#xff0c;会对内容进行编码(默认ascill)ASCII(American Standard Code for Information Interchange&#xff0c;美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统&#xff0c;主要用于显示现代英语和其他西欧语言&…

Linux内核初探3

1.内核的任务 内核&#xff1a;充当底层的驱动程序&#xff0c;应用程序只与内核有联系&#xff0c;内核是应用程序的所知道的层次结构中最底层的&#xff0c;也是资源管理程序&#xff0c;也是一种库&#xff0c;提供了一组面向系统的命令。 2.实现策略 微内核(中央内核&#…

ar 和 nm 用法

From: http://blog.chinaunix.net/space.php?uid7685522&doblog&id2045788 当我们的程序中有经常使用的模块&#xff0c;而且这种模块在其他程序中也会用到&#xff0c;这时按照软件重用的思想&#xff0c;我们应该将它们生成库&#xff0c;使得以后编程可以减少开发…

warning.js:7 Warning: [antdv: Table] Each record in dataSource of table should have a unique `key`

warning.js:7 Warning: [antdv: Table] Each record in dataSource of table should have a unique key