导入excle(react + axios )

2019-11-21  本文已影响0人  是攀哥吖
导入弹窗.png

html 部分

// Modal 是一个封装的弹窗组件, html 部分只需要input 即可
<Modal title='导入数据' show={showImportModal} onConfirm={this.handleImportExcle.bind(this)} onCancel={this.handleCancleModel.bind(this)}>
      <input className='file-input' type="file" accept='.xls,.xlsx' onChange={this.handleChangeFile.bind(this)}></input>
</Modal>

业务逻辑处理部分

 // 导入
    handleImport() {
       // 解决第二次打开弹窗不选择文件, 保留的this.file 是上次的文件
        if(this.file) {
            this.file = ''
        }
        this.setState({
            showImportModal: true
        })
    }
    // input change 事件
    handleChangeFile(event) {
        this.file = event.target.files[0]
    }

  // 弹窗确认事件
    handleImportExcle() {
       if (!this.file || this.file === undefined) {
            msg('请选择需要导入的文件', 'warning')
            return
        }
        if(this.file.name.split('.')[1] === 'xls' || this.file.name.split('.')[1] === 'xlsx' ) {
            var formData = new FormData()
            // 接口需要的值,按下面方式添加就可以
            formData.append('file', this.file)
            formData.append('connectType', '2')

            importExcel('connectJointService/importGearBoxConnect', formData, () => this.update())
        }else {
            msg('文档格式不正确, 仅支持 .xls, .xlsx', 'warning')
            return
        }
        
        this.setState({
            showImportModal: false
        })
    }
// 关闭弹窗事件
    handleCancleModel() {
        this.setState({
            showImportModal: false
        })
    }

importExcel 组件

import axios from 'axios'
import config from './config'
import msg from '../components/Msg';

const importExcel = (url, params) => {
// Content-Type 数据传输的类型, 这里一定要记得写上
// url: 请求地址是因为我在后台统一配置了地址, 所以有了${config.searchServer}${url},这样我也可以在任意模块随意调用
 return new Promise((resolve, reject) => { 
        axios({
            method: 'POST',
            headers: {
                'Content-Type': 'multipart/form-data'
            },
            url: `${config.searchServer}${url}`,
            data: params
        }).then(data => {
             if (data.data.code === 0 || data.data.code === -1) {
                    msg(data.data.msg)
                } 
               resolve(data.data)
        }).catch(data => {
                reject(data)
        })
    }
}
export default importExcel

2019-11-19 18: 05

上一篇下一篇

猜你喜欢

热点阅读