'use client'; import { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import { FlaskConical, Plus, FileDown, Pencil, Trash2, X } from 'lucide-react'; import Navbar from '@/components/Navbar'; import { api } from '@/lib/api'; import { DistributionPlanListItem } from '@/types'; const CURRENT_YEAR = new Date().getFullYear(); const YEAR_KEY = 'distributionYear'; export default function DistributionListPage() { const router = useRouter(); const [year, setYear] = useState(() => { if (typeof window !== 'undefined') { return parseInt(localStorage.getItem(YEAR_KEY) || String(CURRENT_YEAR), 10); } return CURRENT_YEAR; }); const [plans, setPlans] = useState([]); const [loading, setLoading] = useState(true); const [deleteError, setDeleteError] = useState(null); const years = Array.from({ length: 5 }, (_, i) => CURRENT_YEAR + 1 - i); useEffect(() => { localStorage.setItem(YEAR_KEY, String(year)); fetchPlans(); }, [year]); const fetchPlans = async () => { setLoading(true); try { const res = await api.get(`/fertilizer/distribution/?year=${year}`); setPlans(res.data); } catch (e) { console.error(e); } finally { setLoading(false); } }; const handleDelete = async (id: number) => { setDeleteError(null); try { await api.delete(`/fertilizer/distribution/${id}/`); setPlans(prev => prev.filter(p => p.id !== id)); } catch (e) { console.error(e); setDeleteError('削除できませんでした。'); } }; const handlePdf = async (id: number, planName: string) => { try { const res = await api.get(`/fertilizer/distribution/${id}/pdf/`, { responseType: 'blob' }); const url = URL.createObjectURL(res.data); const a = document.createElement('a'); a.href = url; a.download = `distribution_${planName}.pdf`; a.click(); URL.revokeObjectURL(url); } catch (e) { console.error(e); } }; return (

分配計画

{/* 年度セレクタ */}
{deleteError && (
{deleteError}
)} {loading ? (

読み込み中...

) : plans.length === 0 ? (

{year}年の分配計画はありません

施肥計画を元に分配計画を作成できます

) : (
{plans.map(plan => ( ))}
計画名 施肥計画 作物/品種 グループ数 圃場数
{plan.name} {plan.fertilization_plan_name} {plan.crop_name} / {plan.variety_name} {plan.group_count} {plan.field_count}
)}
); }