index.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import FileViewer from 'react-file-viewer';
  2. import { Modal, Spin } from 'antd';
  3. import { memo, useMemo } from 'react';
  4. const FileViewerModal = ({ data, visible, onCancel, downloadFile }) => {
  5. const type = useMemo(() => {
  6. if (!data || !data.url) return '';
  7. let url = data.url || '';
  8. let arr = url.split('.');
  9. return arr[arr.length - 1];
  10. }, [data?.url]);
  11. const renderContent = () => {
  12. if (type == 'xlsx') {
  13. return (
  14. <div>
  15. 不支持的文件格式点击<a onClick={() => downloadFile(data)}>下载</a>
  16. </div>
  17. );
  18. } else if (data?.url) {
  19. return (
  20. <FileViewer
  21. key={data?.name}
  22. fileType={type}
  23. filePath={data?.url}
  24. onError={() => downloadFile(data)}
  25. errorComponent={() => (
  26. <div>
  27. 文件加载错误点击<a onClick={() => downloadFile(data)}>下载</a>
  28. </div>
  29. )}
  30. unsupportedComponent={() => (
  31. <div>
  32. 不支持的文件格式点击<a onClick={() => downloadFile(data)}>下载</a>
  33. </div>
  34. )}
  35. />
  36. );
  37. }
  38. };
  39. return (
  40. <Modal
  41. destroyOnClose
  42. title="预览"
  43. visible={visible}
  44. width={1000}
  45. footer={null}
  46. onCancel={onCancel}
  47. bodyStyle={{ height: '680px', overflowY: 'hidden' }}
  48. >
  49. {renderContent()}
  50. </Modal>
  51. );
  52. };
  53. export default FileViewerModal;