zy-react-library/components/PreviewPdf/index.js

85 lines
1.9 KiB
JavaScript
Raw Normal View History

2025-10-22 17:54:38 +08:00
import { Button, Space } from "antd";
import { useState } from "react";
import Pdf from "../Pdf";
/**
* 在查看页面中PDF查看组件
*/
2025-10-22 17:54:38 +08:00
const PreviewPdf = (props) => {
const {
files = [],
nameKey = "",
urlKey = "",
name = "",
url = "",
} = props;
const [visible, setVisible] = useState(false);
2025-11-08 15:52:06 +08:00
const [currentSrc, setCurrentSrc] = useState("");
const [currentName, setCurrentName] = useState("");
2025-10-22 17:54:38 +08:00
2025-11-08 15:52:06 +08:00
const previewPdf = (src, name) => {
2025-10-22 17:54:38 +08:00
setVisible(true);
2025-11-08 15:52:06 +08:00
setCurrentSrc(src);
setCurrentName(name);
2025-10-22 17:54:38 +08:00
};
const onCancel = () => {
setVisible(false);
2025-11-08 15:52:06 +08:00
setCurrentSrc("");
setCurrentName("");
2025-10-22 17:54:38 +08:00
};
// 单个文件预览模式
if (files.length === 0 && name && url) {
return (
<>
<Space>
<span>{name}</span>
2025-11-08 15:52:06 +08:00
<Button type="primary" size="small" onClick={() => previewPdf(url, name)}>
2025-10-22 17:54:38 +08:00
预览
</Button>
</Space>
<Pdf
visible={visible}
2025-11-08 15:52:06 +08:00
file={currentSrc}
name={currentName}
2025-10-22 17:54:38 +08:00
onCancel={onCancel}
/>
</>
);
}
// 多文件预览模式
if (files.length > 0 && !name && !url) {
return (
<>
{files.map(item => (
<div key={item.filePath || item[urlKey]} style={{ marginTop: 5 }}>
<Space>
<span>{item.name || item.fileName || item[nameKey]}</span>
<Button
type="primary"
size="small"
2025-11-08 15:52:06 +08:00
onClick={() => previewPdf(item.filePath || item[urlKey], item.name || item.fileName || item[nameKey])}
2025-10-22 17:54:38 +08:00
>
预览
</Button>
</Space>
</div>
))}
<Pdf
visible={visible}
2025-11-08 15:52:06 +08:00
file={currentSrc}
name={currentName}
2025-10-22 17:54:38 +08:00
onCancel={onCancel}
/>
</>
);
}
return null;
};
export default PreviewPdf;