import React, { useState, useCallback, useRef } from 'react'; import cx from 'classnames'; import { Button, Checkbox, message } from 'antd'; import { importUsers } from './service'; import { useModel, history } from 'umi'; import iconExcel from './icon-excel.svg'; import iconErrorExcel from './icon-excel-error.svg'; import styles from './index.less'; const isExcel = (type) => { return ( [ 'text/csv', '.csv', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', ].indexOf(type) >= 0 ); }; export default ({ onUploadDone }) => { const [draggingOver, setDraggingOver] = useState(false); const [fileInfo, setFileInfo] = useState({}); const [autoSendActiveMsg, setAutoSendActiveMsg] = useState(true); const [errorInfo, setErrorInfo] = useState(''); const [uploading, setUploading] = useState(false); const fileInputRef = useRef(); /** * 0: 开始选择 * 1: 文件选择之后,且符合规范 * 2: 文件选择之后,不符合规范 * 3: 文件上传失败 */ const [uploadState, setUploadState] = useState(0); const { initialState } = useModel('@@initialState'); const handleFileSelected = useCallback((e) => { const file = e.target.files[0]; if (!file) { setUploadState(3); } setFileInfo({ file, name: file.name, size: `${Math.ceil(file.size / 1024)}K`, }); if (!isExcel(file.type)) { setErrorInfo('不支持此类文件格式'); setUploadState(2); } else if (file.size > 1024 * 1024 * 10) { setErrorInfo('文件大小不能超过 10MB'); setUploadState(2); } else { setUploadState(1); } e.target.value = ''; }, []); const beginUpload = useCallback(() => { setUploading(true); let params = { companyId: initialState?.currentUser?.companyId, }; importUsers(fileInfo.file, params) .then((res) => { setUploading(false); if (res.key) { onUploadDone(res); } else { message.error(res.message); setUploadState(0); } }) .catch(() => { // 文件上传失败 setUploading(false); setUploadState(3); }); }, [fileInfo, autoSendActiveMsg, onUploadDone]); return (