手把手教你封装一个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,一经查实,立即删除!

相关文章

sgu 240 Runaway (spfa)

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

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

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

Capistrano3 与 Mina

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

金山毒霸的云查杀很牛X

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

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

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

python爬虫爬汽车图片_Python快速爬取车标网图片,以后不要说这什么车你不认识了!...

知识不分边界......人&#xff0c;为什么要读书&#xff1f;举个例子:当看到天边飞鸟&#xff0c;你会说&#xff1a;“落霞与孤鹜齐飞&#xff0c;秋水共长天一色。”而不是&#xff1a;“卧靠&#xff0c;好多鸟。”;当你失恋时你低吟浅唱道&#xff1a;“人生若只如初见&…

电化学仿真的基础知识笔记

1 概述 电化学反应是一种特殊的化学反应&#xff0c;其能量转移形式为化学能和电能之间互相转换。根据能量转换方向&#xff0c;可分为两类&#xff1a; 原电池&#xff08;Galvanic cells&#xff09;&#xff1a;将化学能转化为电能&#xff0c;对外放电电解槽&#xff08;…

mysql以秒为单位限制资源_MYSQL中限制资源的使用

今天看到手册&#xff0c;不小心看到了这里&#xff0c;自己做了几个例子。从MYSQL4.x开始&#xff0c;MYSQL就增加了以每个用户为基础&#xff0c;限制MYSQL服务器的资源利用。自己查看MYSQL.USER 表就会发现里面最后几个字段&#xff1a;mysql> select version();--------…

漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析

From: http://blog.csdn.net/touch_2011/article/details/6767673 1、序言 这是《漫谈经典排序算法系列》第一篇&#xff0c;该篇从最简单的选择排序算法谈起&#xff0c;由浅入深的详细解析两种选择排序算法的过程及性能比较。逐步揭露选择排序的本质及其基本思想。 各种排序算…

React开发(168):...dva调用不成功的原因

注意三对三对应关系 否则无法调用成功

深入react技术栈(2):JSX语法

JSX的由来 DOM元素 组件元素 JSX基本语法 XML基本语法 元素类型 、我们讲到两种不同的元素:DOM元素和组件元素 在JSX里面有对应 注释 元素属性 Boolean属性 展开属性 自定义属性 javascript属性表达式 属性值使用表达式 用{}表示 HTML转义 文章参考深入react学习技术栈

深入react技术栈(3):React组件

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣 终于说出最为关心的react组件了。在react形成之前,组件封装都是在摸索之中 组件的演变 class定义组件的样式 这样可以方便的定义class前缀 一达到定义一系列主题的意义 初始化过程十分简洁 实例化传入几个参数给…

深入react技术栈(4):React数据流

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣 state props 子组件props 组件props function prop 与父组件通信 propTypes 文章参考深入react学习技术栈

学会用taro封装一个组件

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣学习前端知识 前言 大家好 我是歌谣 今天要说得是用taro封装一个组件 核心是学会弹性布局 直接上代码 组件部分 子组件 import Taro, { Component } from "tarojs/taro"; import { Text, View, Image…

java druid sqlite_springboot整合druid抛出dbType not support : sqlite异常

最近在搞springboot&#xff0c;将springboot和mybaits整合后没一点毛病&#xff0c;但想自己弄个sql监控&#xff0c;就准备使用阿里的druid来做连接池&#xff0c;毕竟是国产又是大厂出品&#xff0c;号称最牛X的连接池。整合过程就不说了&#xff0c;百度上大把的&#xff0…