diff --git a/src/components/pages/WorkOrderArchivePage.tsx b/src/components/pages/WorkOrderArchivePage.tsx index b5a6ce7..ff0ade6 100644 --- a/src/components/pages/WorkOrderArchivePage.tsx +++ b/src/components/pages/WorkOrderArchivePage.tsx @@ -6,8 +6,9 @@ import { Badge } from "../ui/badge"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "../ui/dialog"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "../ui/table"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select"; -import { Search, Eye, Download, FileText, CheckCircle, User, Building, ChevronLeft, ChevronRight } from "lucide-react"; -import { apiGet } from "../../lib/services/api"; +import { Search, Eye, Download, FileText, CheckCircle, User, Building, ChevronLeft, ChevronRight, FileDown } from "lucide-react"; +import { apiGet, API_BASE_URL } from "../../lib/services/api"; +import { getUserToken } from "../../lib/utils/storage"; interface ArchivedWorkOrder { id: string; @@ -74,6 +75,41 @@ export default function WorkOrderArchivePage() { fetchArchivedOrders(); }, []); + // 下载报告 + const handleDownloadReport = (workOrderNumber: string) => { + try { + const token = getUserToken(); + let url = `${API_BASE_URL}/back/record/downloadReport/${workOrderNumber}`; + + // 如果有 token,作为查询参数传递(如果后端支持的话) + // 或者直接打开 URL 让浏览器处理下载 + console.log('开始下载报告:', url); + + // 创建一个临时的 a 标签来触发下载 + const a = document.createElement('a'); + a.href = url; + a.download = `${workOrderNumber}_报告.xlsx`; + a.style.display = 'none'; + + // 添加 token 到 URL(如果后端接口支持通过查询参数传递 token) + // 如果不支持,可能需要后端修改接口允许 CORS + if (token) { + // 尝试作为查询参数 + url = `${url}?token=${encodeURIComponent(token)}`; + a.href = url; + } + + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + + console.log('下载请求已发送'); + } catch (error) { + console.error('下载报告失败详情:', error); + alert(`下载报告失败: ${error instanceof Error ? error.message : '未知错误'}`); + } + }; + const filteredOrders = archivedOrders.filter((order) => { const matchesSearch = order.workOrderType.toLowerCase().includes(searchTerm.toLowerCase()) || @@ -250,10 +286,16 @@ export default function WorkOrderArchivePage() { {order.updatedAt} {order.updatedAt} - openDetailDialog(order)}> - - 查看详情 - + + openDetailDialog(order)}> + + 查看详情 + + handleDownloadReport(order.workOrderNumber)}> + + 下载报告 + + ))