react 中使用Dragger

这是一个关于使用Ant Design组件库在React应用中实现批量导入工作人员功能的代码示例。组件包括Dragger上传组件、Select选择酒店和Modal对话框。文件类型限制为Excel,上传前进行校验,并提供模板下载。代码中还涉及到了状态管理和文件上传后的处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 


import { message, Modal, Select, UploadProps } from 'antd'
import Dragger from 'antd/lib/upload/Dragger';
import React, { useEffect, useState } from 'react'
import styles from '../components/ImportWorkerModal.less'

type ImportWorkerModalProps = {
    isVisible: boolean;
    onCancel: () => void
    dataHotel: any
}

const ImportWorkerModal: React.FC<ImportWorkerModalProps> = (props) => {
    const { isVisible, onCancel, dataHotel } = props
    const [hotelData, setHotelData] = useState()
    useEffect(() => {
        if (dataHotel) {
            setHotelData(dataHotel[0].id)
        }
    }, [])

    const draggerExcel: UploadProps = {
        name: 'file',
        multiple: true,
        // action: 'https://www.mocky.io/v2/5cc8019d300000980a055e76',
        maxCount: 1,
        beforeUpload(file: any) {     //提交文件之前校验
            const isIMG =
                file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||
                file.type === 'application/vnd.ms-excel';
            if (!isIMG) {
                message.error('您只能上传excel文件!');
            }
            return isIMG;
        },
        onChange(info: any) {
            if (info.file.status === 'uploading') {
                return;
            }
            if (info.file.status === 'done') {
                // 服务器返回的文件名
                if (info.file.response.rest_code == 1) {
                    // setDocumenUploadItem([{
                    //   uid: info.file.uid,
                    //   name: info.file.name,
                    //   status: 'done',
                    // }])
                    // setUploadInfo({                 //每次上传都把上传后的文件信息保存进去state里面
                    //   uid: info.file.uid,
                    //   url:info.file.response.data.url,
                    //   activityId:activityId,
                    //   formList:info.file.response.data.list
                    // })
                } else {
                    message.info('后台数据处理异常!');
                }
            } else {
            }
        },
         //文件上传列表删除时的回调函数
        onRemove(val: any)   {
            // try {
            //   if(val.uid == uploadInfo.uid){
            //     initUploadForm()
            //     setDocumenUploadItem([])
            //   }
            // } catch (error) {
            //   initUploadForm()
            //   setDocumenUploadItem([])
            // }
        }
    };
    return (
        <div>
            <Modal
                title='批量导入工作人员'
                visible={isVisible}
                onCancel={() => {
                    onCancel()
                }}
                maskClosable={false}
                width={600}
            >
                <Dragger  {...draggerExcel}
                >

                    <p className="ant-upload-text">点击或拖拽酒工作人员的EXCEL文件上传</p>
                    <p className="ant-upload-hint">
                        可上传多个EXCEL文件,默认选择最后一个
                    </p>
                </Dragger>
                <div
                    className={styles.downloadEccel}
                    onClick={() => {
                        console.log('点击了');

                        // window.open()
                    }}
                >点击下载EXCEL模板</div>
                <span style={{ color: 'red', fontSize: '18px', marginRight: '4px' }}>*</span>
                <Select
                    value={hotelData}
                    style={{ width: '200px' }}
                    onChange={(value) => {
                        setHotelData(value)
                    }}
                >
                    {
                        dataHotel?.map((item: any) => {
                            return <Select.Option key={item.id} value={item.id}> {item.name}</Select.Option>
                        })
                    }
                </Select>
            </Modal>

        </div >
    )
}

export default ImportWorkerModal

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值