From fefca6304eefea94f41057f9f934b0e19ceb54bb Mon Sep 17 00:00:00 2001 From: 0-Zz-ang Date: Fri, 22 Aug 2025 13:47:37 +0900 Subject: (박서영)Compliance 설문/응답 리스트 생성 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../responses/compliance-responses-list.tsx | 141 +++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 lib/compliance/responses/compliance-responses-list.tsx (limited to 'lib/compliance/responses/compliance-responses-list.tsx') diff --git a/lib/compliance/responses/compliance-responses-list.tsx b/lib/compliance/responses/compliance-responses-list.tsx new file mode 100644 index 00000000..cfa934ec --- /dev/null +++ b/lib/compliance/responses/compliance-responses-list.tsx @@ -0,0 +1,141 @@ +"use client"; + +import { format } from "date-fns"; +import { ko } from "date-fns/locale"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { Eye, Download } from "lucide-react"; +import { useRouter } from "next/navigation"; +import { complianceSurveyTemplates } from "@/db/schema/compliance"; + +interface ComplianceResponsesListProps { + template: typeof complianceSurveyTemplates.$inferSelect; + responses: Array<{ + id: number; + basicContractId: number; + templateId: number; + status: string; + completedAt: Date | null; + reviewedBy: number | null; + reviewedAt: Date | null; + reviewNotes: string | null; + createdAt: Date; + updatedAt: Date; + answersCount: number; + }>; +} + +export function ComplianceResponsesList({ template, responses }: ComplianceResponsesListProps) { + const router = useRouter(); + + const getStatusBadge = (status: string) => { + switch (status) { + case "COMPLETED": + return 완료; + case "IN_PROGRESS": + return 진행중; + case "REVIEWED": + return 검토완료; + default: + return {status}; + } + }; + + if (responses.length === 0) { + return ( +
+

아직 응답이 없습니다.

+
+ ); + } + + return ( +
+
+ + + + 응답 ID + 계약 ID + 상태 + 답변 수 + 완료일 + 검토일 + 생성일 + 작업 + + + + {responses.map((response) => ( + + + #{response.id} + + + {response.basicContractId} + + + {getStatusBadge(response.status)} + + + {response.answersCount}개 + + + {response.completedAt + ? format(new Date(response.completedAt), 'yyyy-MM-dd HH:mm', { locale: ko }) + : "-" + } + + + {response.reviewedAt + ? format(new Date(response.reviewedAt), 'yyyy-MM-dd HH:mm', { locale: ko }) + : "-" + } + + + {response.createdAt + ? format(new Date(response.createdAt), 'yyyy-MM-dd HH:mm', { locale: ko }) + : "-" + } + + +
+ + {response.status === "COMPLETED" && ( + + )} +
+
+
+ ))} +
+
+
+
+ ); +} -- cgit v1.2.3