/** * 评查选项卡组件 * 提供三个选项卡:评查结果、AI智能分析、文件信息 */ import { ReactNode, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { loadingBarService } from '~/components/ui/LoadingBar'; import { DOCUMENT_URL } from "~/api/client"; interface ReviewTabsProps { activeTab: string; onTabChange: (tabKey: string) => void; children: ReactNode; fileInfo: { previousRoute?: string; path?: string; auditStatus?: number; type?: string; }; onConfirmResults: () => void; } export function ReviewTabs({ activeTab, onTabChange, children, fileInfo, onConfirmResults }: ReviewTabsProps) { const [isNavigating, setIsNavigating] = useState(false); const navigate = useNavigate(); // 返回上一级 const handleBack = () => { // 防抖处理 - 如果已经在导航中,不重复触发 if (isNavigating) return; // 设置导航状态为true setIsNavigating(true); loadingBarService.show(); // 根据来源页面返回 const previousRoute = fileInfo.previousRoute || 'documents'; const returnTo = previousRoute === 'documents' ? "/documents" : previousRoute === 'filesUpload' ? "/files/upload" : "/rules-files"; // 立即导航返回 navigate(returnTo); }; // 下载原文件 const handleDownloadFile = async () => { try { const downloadUrl = `${DOCUMENT_URL}${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 : '未知错误'}`); } }; return (
{/* 评查结果、AI智能分析、文件信息 */}
{/* */} {/* {fileInfo.type === '1' && ( */} {/* 隐藏结构比对 */} {fileInfo.type === '999999' && ( )}
{/* 操作按钮 */}
{/* 返回上一级 */} {/* */}
{children}
); }