"use client"; import { useState } from "react"; import { useParams } from "next/navigation"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { AppLayout } from "@/components/layout/AppLayout"; import api from "@/lib/api"; import type { PermitItem, PermitStatus } from "@/lib/types"; import { formatDate, PERMIT_STATUS_LABELS, PERMIT_STATUS_COLORS } from "@/lib/utils"; import Link from "next/link"; export default function PermitsPage() { const { id } = useParams<{ id: string }>(); const qc = useQueryClient(); const [showForm, setShowForm] = useState(false); const { data: permits = [], isLoading } = useQuery({ queryKey: ["permits", id], queryFn: () => api.get(`/projects/${id}/permits`).then((r) => r.data), }); const createMutation = useMutation({ mutationFn: (data: Record) => api.post(`/projects/${id}/permits`, data), onSuccess: () => { qc.invalidateQueries({ queryKey: ["permits", id] }); setShowForm(false); }, }); const updateMutation = useMutation({ mutationFn: ({ permitId, status }: { permitId: string; status: PermitStatus }) => api.put(`/projects/${id}/permits/${permitId}`, { status }), onSuccess: () => qc.invalidateQueries({ queryKey: ["permits", id] }), }); const approvedCount = permits.filter((p) => p.status === "approved").length; const progress = permits.length > 0 ? Math.round((approvedCount / permits.length) * 100) : 0; return (
← 현장

인허가 체크리스트

{/* Progress */}
인허가 진행률 {approvedCount}/{permits.length} 승인완료

{progress}% 완료

{showForm && (

인허가 항목 추가

{ e.preventDefault(); const fd = new FormData(e.target as HTMLFormElement); createMutation.mutate({ permit_type: fd.get("permit_type"), authority: fd.get("authority") || undefined, deadline: fd.get("deadline") || undefined, notes: fd.get("notes") || undefined, }); }} className="grid grid-cols-2 gap-4" >
)}
{isLoading ? ( ) : permits.length === 0 ? ( ) : ( permits.map((p) => ( )) )}
인허가 종류 관할 관청 제출기한 제출일 승인일 상태 변경
로딩 중...
인허가 항목이 없습니다
{p.permit_type} {p.authority || "-"} {p.deadline ? formatDate(p.deadline) : "-"} {p.submitted_date ? formatDate(p.submitted_date) : "-"} {p.approved_date ? formatDate(p.approved_date) : "-"} {PERMIT_STATUS_LABELS[p.status]}
); }