记录react上传组件(分步)的封装和使用

import React, { useState} from 'react';
import ProForm, {
    StepsForm,
    ProFormUploadButton,
} from '@ant-design/pro-form';
import { Button, message, Modal } from 'antd';
import { PlusOutlined } from '@ant-design/icons';
import * as xlsx from 'xlsx';
const waitTime = (time: number = 100) => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(true);
        }, time);
    });
};
export default (props:any) => {
    const [visible, setVisible] = useState(false);
    const {title,href,url}=props;
    return (
        <>
            <Button type="primary" onClick={() => setVisible(true)}>
                <PlusOutlined />
        {title}
      </Button>
            <StepsForm
                onFinish={async (values) => {
                    // console.log("这是参数",values.dragger[0].originFileObj);
                    const file=values.dragger[0].originFileObj;
                    // console.log(file.name);
                    const fileReader = new FileReader();
                    var data:any=[];
                    fileReader.onload = event => {
                            const bstr = (event.target as any).result;
                            const workbook = xlsx.read(bstr, {type:'binary'});
                            for (const sheet in workbook.Sheets) {
                                if (workbook.Sheets.hasOwnProperty(sheet)) {
                                  // 利用 sheet_to_json 方法将 excel 转成 json 数据
                                  data = data.concat(xlsx.utils.sheet_to_json(workbook.Sheets[sheet]));
                                   break; // 如果只取第一张表,就取消注释这行
                                }
                            }
                        console.log(data);
                        fetch(url,{
                            method:"post",
                            headers:{
                               "Content-Type":"application/json"
                                },
                            body:JSON.stringify(data)
                         }).then(response=>{
                             console.log(response)
                         })
                    }
                    fileReader.readAsBinaryString(file);
                    await waitTime(1000);
                    setVisible(false);
                    message.success('提交成功');
                }}
                formProps={{
                    validateMessages: {
                        required: '此项为必填项',
                    },
                }}
                stepsFormRender={(dom, submitter) => {
                    return (
                        <Modal
                            title="上传文件"
                            width={800}
                            onCancel={() => setVisible(false)}
                            visible={visible}
                            footer={submitter}
                            destroyOnClose
                        >
                            {dom} 
                        </Modal>
                    );
                }} 
            >
                <StepsForm.StepForm
                    name="template"
                    title="下载模板"
                    onFinish={async () => {
                         await waitTime(2000);
                        return true;
                    }}
                >
                <Button key="add"
                type="primary"
                ><a href={href}>下载模板</a></Button>  
                </StepsForm.StepForm>
                <StepsForm.StepForm name="upload" title="上传文件">
                    <ProForm.Group>
                        <ProFormUploadButton
                            name="dragger"
                            max={1}
                        />
                    </ProForm.Group>
                    {/* <Table columns={columns} dataSource={data} size="small" /> */}
                    {/* TODO 上传预览 */}   
                </StepsForm.StepForm>
            </StepsForm>
        </>
    );
};
 <UploadComponent title="上传" href="/excel/模板.xls" url="上传的后台路径" />

效果图:
1、在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嗬呜阿花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值