前端学习案例-手把手教你封装一个ant design的审核框组件

简介: 前端学习案例-手把手教你封装一个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>
             <Modal
               maskClosable={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, // 标志 是否必填备注
             },
           ],
         };实现总效果
     则功能实现 有什么疑问欢迎一起探讨
相关文章
|
2天前
|
前端开发
从零开始学习前端开发:HTML基础
HTML是前端开发的基础,它是网页内容的结构化描述语言。本文将介绍HTML的基本语法、标签和元素,以及如何使用它们来创建简单的网页。
|
2天前
|
设计模式 存储 前端开发
JS的几种设计模式,Web前端基础三剑客学习知识分享,前端零基础开发
JS的几种设计模式,Web前端基础三剑客学习知识分享,前端零基础开发
|
2天前
|
前端开发 JavaScript Java
npm与Maven:前端与后端构建工具深度对比学习
npm与Maven:前端与后端构建工具深度对比学习
|
3天前
|
前端开发 JavaScript Java
浅谈企业级前端应用中的组件概念和具体的应用
浅谈企业级前端应用中的组件概念和具体的应用
10 1
|
4天前
|
前端开发 JavaScript 关系型数据库
前端网页手册(1)--基础学习
前端网页手册(1)--基础学习
5 1
|
4天前
|
移动开发 前端开发
ruoyi-nbcio-plus的Vue3前端升级组件后出现的问题(二)
ruoyi-nbcio-plus的Vue3前端升级组件后出现的问题(二)
12 1
|
4天前
|
移动开发 前端开发 JavaScript
ruoyi-nbcio-plus的Vue3前端升级组件后出现的问题(一)
ruoyi-nbcio-plus的Vue3前端升级组件后出现的问题(一)
17 2
|
4天前
|
前端开发
前端进度条组件NProgress
前端进度条组件NProgress
22 1
前端进度条组件NProgress
|
1天前
|
移动开发 前端开发 JavaScript
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战
|
4天前
|
存储 前端开发 JavaScript
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
39 1