博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React结合Antd实现Excel导入导出
阅读量:217 次
发布时间:2019-02-28

本文共 3029 字,大约阅读时间需要 10 分钟。

最近公司的公众号管理系统需要添加Excel导入与导出功能,考虑到需要多个地方引用,所以开发了一个组件,下面把代码分享出来给大家。

首先是组件的代码,注意Antd是2.x的版本。

import React, { Component } from 'react';import PropTypes from 'prop-types';import {Button,Upload,message,} from 'antd';import Cookies from 'js-cookie';// 服务器地址,此处为了做演示,没有全局引入,直接写了const Host = 'http://xxxxxx.cn';class ImportExportExcel extends Component {    constructor(props) {        super(props);        // 模板下载事件        this.jumpTo = this.jumpTo.bind(this);        // 表格导出事件        this.exportExcel = this.exportExcel.bind(this);        // 表格上传事件        this.uploadProps.onChange = this.uploadProps.onChange.bind(this);    }    // 模板下载    jumpTo() {        window.open(this.props.templateHref);    }    // 上传参数    uploadProps = {        // 发到后台的文件参数名        name: 'file_import',        // 接受的文件类型        accept: '.xls,.xlsx',        // 上传的地址        action: Host + this.props.url + '/import',        // 是否展示上传的文件        showUploadList:false,        // 上传的参数        data: {            token: Cookies.get("token"),            uid: Cookies.get('uid')        },        // 设置上传的请求头部,IE10 以上有效        headers: {            authorization: 'authorization-text',        },        // 上传文件前的钩子函数        beforeUpload() {            message.loading('正在导入中...');            return true;        },        // 上传文件改变时的状态        onChange(info) {            if (info.file.status !== 'uploading') {                console.log(info.file, info.fileList);            }            if (info.file.status === 'done') {                if (info.file.response.code !== 200) {                    setTimeout(() => {                        message.destroy();                        message.error(info.file.response.message);                    });                } else {                    this.props.importSuccessCallback && this.props.importSuccessCallback();                    setTimeout(() => {                        message.destroy();                        message.success('导入成功');                    });                }            } else if (info.file.status === 'error') {                setTimeout(() => {                    message.destroy();                    message.error('导入失败');                });            }        },    }    // 导出Excel表格    exportExcel() {        const url = Host + this.props.url + `/export?token=${Cookies.get('token')}&uid=${Cookies.get('uid')}`;        window.open(url);    }    render() {        const uploadProps = this.uploadProps;        return [            ,            
, ] }}// 定义参数类型ImportExportExcel.propTypes = { // 模板下载地址 templateHref: PropTypes.string.isRequired, // 上传地址 url: PropTypes.string.isRequired, // 导入成功后的回调 importSuccessCallback: PropTypes.func};export default ImportExportExcel;

以下是在组件中的使用方法,首先引入组件,引入路径根据实际存放情况自行修改。

import ImportExportExcel from "components/ImportExportExcel";

下面是组件在render方法里的调用,templateHref为模板下载地址,url为上传地址,importSuccessCallback为上传成功后的回调方法,对应的是请求表格数据的事件。

this.getTableData({pages: 1})}/>

 

转载地址:http://musp.baihongyu.com/

你可能感兴趣的文章