Files
leaudit-platform-frontend/app/components/reviews/FileInfo.tsx
T
2025-04-21 09:22:13 +08:00

104 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
interface FileInfoProps {
fileInfo: {
fileName: string;
contractNumber: string;
fileSize?: string;
fileFormat?: string;
pageCount?: number;
uploadTime?: string;
uploadUser?: string;
auditStatus?: number;
path?: string;
};
onConfirmResults: () => void;
}
export function FileInfo({ fileInfo, onConfirmResults }: FileInfoProps) {
const handleDownloadFile = async () => {
try {
const urlBefore = 'http://172.18.0.100:9000/docauditai/';
const downloadUrl = `${urlBefore}${fileInfo.path}`;
// 使用fetch获取文件内容
const response = await fetch(downloadUrl);
if (!response.ok) {
throw new Error(`下载失败: ${response.status} ${response.statusText}`);
}
// 将响应转换为Blob
const blob = await response.blob();
// 创建Blob URL
const blobUrl = URL.createObjectURL(blob);
// 创建一个隐藏的a标签并点击它
const a = document.createElement('a');
a.style.display = 'none';
a.href = blobUrl;
// 从路径中获取文件名
const fileName = fileInfo.path?.split('/').pop() || 'document';
a.download = decodeURIComponent(fileName);
document.body.appendChild(a);
a.click();
// 清理
setTimeout(() => {
document.body.removeChild(a);
URL.revokeObjectURL(blobUrl);
}, 100);
} catch (error) {
console.error('下载文件失败:', error);
alert(`下载文件失败: ${error instanceof Error ? error.message : '未知错误'}`);
}
};
const handleExportReport = () => {
alert('导出评查报告功能');
};
return (
<div className="mb-4 file-info-header">
<div className="flex justify-between items-center">
<div>
<h2 className="text-xl font-medium max-w-xl">
{fileInfo.fileName}
</h2>
<span className="text-xs text-gray-500">
{fileInfo.contractNumber}
</span>
{fileInfo.fileSize && (
<span className="text-xs text-gray-500 ml-2">
| {fileInfo.fileSize} | {fileInfo.fileFormat} | {fileInfo.pageCount}
</span>
)}
{fileInfo.uploadTime && (
<div className="text-xs text-gray-500 mt-1">
{fileInfo.uploadTime} | {fileInfo.uploadUser}
</div>
)}
</div>
<div className="flex space-x-3">
<button
className="ant-btn ant-btn-default flex items-center"
onClick={handleDownloadFile}
>
<i className="ri-file-download-line mr-1"></i>
</button>
<button
className="ant-btn ant-btn-default flex items-center"
onClick={handleExportReport}
>
<i className="ri-file-copy-line mr-1"></i>
</button>
<button
className="ant-btn ant-btn-primary flex items-center"
onClick={onConfirmResults}
>
<i className="ri-check-double-line mr-1"></i>
</button>
</div>
</div>
</div>
);
}