diff --git a/frontend/src/app/reports/page.tsx b/frontend/src/app/reports/page.tsx new file mode 100644 index 0000000..68fa9ba --- /dev/null +++ b/frontend/src/app/reports/page.tsx @@ -0,0 +1,113 @@ +'use client'; + +import { useState } from 'react'; +import { api } from '@/lib/api'; +import Navbar from '@/components/Navbar'; +import { FileDown, Loader2 } from 'lucide-react'; + +const downloadPdf = async (url: string, filename: string) => { + const response = await api.get(url, { responseType: 'blob' }); + const blob = new Blob([response.data], { type: 'application/pdf' }); + const downloadUrl = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = downloadUrl; + link.download = filename; + document.body.appendChild(link); + link.click(); + link.remove(); + window.URL.revokeObjectURL(downloadUrl); +}; + +export default function ReportsPage() { + const [year, setYear] = useState(2025); + const [downloading, setDownloading] = useState(null); + + const handleDownloadKyosai = async () => { + setDownloading('kyosai'); + try { + await downloadPdf(`/reports/kyosai/${year}/`, `水稲共済細目書_${year}.pdf`); + } catch (error) { + console.error('Download failed:', error); + alert('ダウンロードに失敗しました'); + } finally { + setDownloading(null); + } + }; + + const handleDownloadChusankan = async () => { + setDownloading('chusankan'); + try { + await downloadPdf(`/reports/chusankan/${year}/`, `中山間交付金申请书_${year}.pdf`); + } catch (error) { + console.error('Download failed:', error); + alert('ダウンロードに失敗しました'); + } finally { + setDownloading(null); + } + }; + + return ( +
+ +
+

帳票出力

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ ); +} diff --git a/frontend/src/components/Navbar.tsx b/frontend/src/components/Navbar.tsx index 61ab29e..ae6ba99 100644 --- a/frontend/src/components/Navbar.tsx +++ b/frontend/src/components/Navbar.tsx @@ -1,7 +1,7 @@ 'use client'; import { useRouter, usePathname } from 'next/navigation'; -import { LogOut, Wheat, MapPin } from 'lucide-react'; +import { LogOut, Wheat, MapPin, FileText } from 'lucide-react'; import { logout } from '@/lib/api'; export default function Navbar() { @@ -43,6 +43,17 @@ export default function Navbar() { 圃場管理 +