"use client"; import React, { useState } from "react"; import { Calendar, Wrench, Truck, Check, Clock, AlertTriangle } from "lucide-react"; interface MaintenanceSchedule { id: string; vehicleNumber: string; vehicleType: string; maintenanceType: "정기점검" | "수리" | "타이어교체" | "오일교환" | "기타"; scheduledDate: string; status: "scheduled" | "in_progress" | "completed" | "overdue"; notes?: string; estimatedCost?: number; } // 목 데이터 (하드코딩 - 주석처리됨) // const mockSchedules: MaintenanceSchedule[] = [ // { // id: "1", // vehicleNumber: "서울12가3456", // vehicleType: "1톤 트럭", // maintenanceType: "정기점검", // scheduledDate: new Date(Date.now() + 2 * 24 * 60 * 60 * 1000).toISOString(), // status: "scheduled", // notes: "6개월 정기점검", // estimatedCost: 300000, // }, // { // id: "2", // vehicleNumber: "경기34나5678", // vehicleType: "2.5톤 트럭", // maintenanceType: "오일교환", // scheduledDate: new Date(Date.now() + 1 * 24 * 60 * 60 * 1000).toISOString(), // status: "scheduled", // estimatedCost: 150000, // }, // { // id: "3", // vehicleNumber: "인천56다7890", // vehicleType: "라보", // maintenanceType: "타이어교체", // scheduledDate: new Date(Date.now() - 1 * 24 * 60 * 60 * 1000).toISOString(), // status: "overdue", // notes: "긴급", // estimatedCost: 400000, // }, // { // id: "4", // vehicleNumber: "부산78라1234", // vehicleType: "1톤 트럭", // maintenanceType: "수리", // scheduledDate: new Date().toISOString(), // status: "in_progress", // notes: "엔진 점검 중", // estimatedCost: 800000, // }, // ]; export default function MaintenanceWidget() { // TODO: 실제 API 연동 필요 const [schedules] = useState([]); const [filter, setFilter] = useState<"all" | MaintenanceSchedule["status"]>("all"); const [selectedDate, setSelectedDate] = useState(new Date()); const filteredSchedules = schedules.filter( (s) => filter === "all" || s.status === filter ); const getStatusBadge = (status: MaintenanceSchedule["status"]) => { switch (status) { case "scheduled": return 예정; case "in_progress": return 진행중; case "completed": return 완료; case "overdue": return 지연; } }; const getMaintenanceIcon = (type: MaintenanceSchedule["maintenanceType"]) => { switch (type) { case "정기점검": return "🔍"; case "수리": return "🔧"; case "타이어교체": return "⚙️"; case "오일교환": return "🛢️"; default: return "🔧"; } }; const getDaysUntil = (date: string) => { const now = new Date(); const scheduled = new Date(date); const diff = scheduled.getTime() - now.getTime(); const days = Math.floor(diff / (1000 * 60 * 60 * 24)); if (days < 0) return `${Math.abs(days)}일 지연`; if (days === 0) return "오늘"; if (days === 1) return "내일"; return `${days}일 후`; }; const stats = { total: schedules.length, scheduled: schedules.filter((s) => s.status === "scheduled").length, inProgress: schedules.filter((s) => s.status === "in_progress").length, overdue: schedules.filter((s) => s.status === "overdue").length, }; return (
{/* 헤더 */}

🔧 정비 일정 관리

{/* 통계 */}
{stats.scheduled}
예정
{stats.inProgress}
진행중
{stats.overdue}
지연
{stats.total}
전체
{/* 필터 */}
{(["all", "scheduled", "in_progress", "overdue"] as const).map((f) => ( ))}
{/* 일정 리스트 */}
{filteredSchedules.length === 0 ? (
📅
정비 일정이 없습니다
) : (
{filteredSchedules.map((schedule) => (
{getMaintenanceIcon(schedule.maintenanceType)}
{schedule.vehicleNumber}
{schedule.vehicleType}
{getStatusBadge(schedule.status)}
{schedule.maintenanceType}
{schedule.notes &&
{schedule.notes}
}
{new Date(schedule.scheduledDate).toLocaleDateString()}
{getDaysUntil(schedule.scheduledDate)}
{schedule.estimatedCost && (
예상 비용: {schedule.estimatedCost.toLocaleString()}원
)}
{/* 액션 버튼 */} {schedule.status === "scheduled" && (
)} {schedule.status === "in_progress" && (
)}
))}
)}
); }