import { AnimatePresence, motion } from 'motion/react'; import { ChevronDown, Maximize2, Truck } from 'lucide-react'; import Blur from '../../../components/Blur'; import type { TargetSummary, TargetVehicle } from '../types'; import { fmtDateLabel, fmtKm, fmtPercent, getTargetAssessment } from './model'; interface TargetDetailPanelProps { target: TargetSummary | undefined; expandedTargetId: number | null; selectedYear: number | undefined; vehicles: TargetVehicle[]; currentDateLabel: string; onOpenFullscreen: () => void; onExpandTarget: (targetId: number) => void; onAssessmentYearChange: (targetId: number, year: number) => void; onViewAll: (target: TargetSummary) => void; } export default function TargetDetailPanel({ target, expandedTargetId, selectedYear, vehicles, currentDateLabel, onOpenFullscreen, onExpandTarget, onAssessmentYearChange, onViewAll, }: TargetDetailPanelProps) { const assessment = target ? getTargetAssessment(target, selectedYear) : null; const primaryCompletion = assessment?.completionRate ?? target?.avgCompletion ?? 0; const primaryQualified = assessment?.qualifiedCount ?? target?.yearQualifiedCount ?? 0; const primaryQualifiedLabel = assessment ? `${assessment.label}达标:` : '达标:'; return (

当前车型考核详情

{target?.targetName || '请选择车型'}

{target && (
onExpandTarget(target.id)} >
{target.targetName} {target.vehicleCount}台
{assessment ? `${assessment.label}完成:` : '完成率:'} = 90 ? 'text-emerald-500' : 'text-blue-500'}`}>{fmtPercent(primaryCompletion)}
{primaryQualifiedLabel} {primaryQualified}台
{fmtKm(target.todayTotal)} KM
累计: {fmtKm(target.cumulativeTotal)} KM
{expandedTargetId === target.id && (
考核年度

总考核区间

{target.periods.map((period, index) => (

{period}

))}

总考核里程

{fmtKm(target.totalMileagePerVehicle * target.vehicleCount)} km

{assessment ? ( <>

{assessment.label}区间

{(assessment.periods.length > 0 ? assessment.periods : [`${assessment.startDate} ~ ${assessment.endDate}`]).map((period, index) => (

{period}

))}

{assessment.label}任务/辆

{fmtKm(target.annualMileagePerVehicle * assessment.yearNumber)} km

{assessment.label}已进入车辆

{assessment.vehicleCount} 台

{assessment.vehicleCount < target.vehicleCount && (

其余 {target.vehicleCount - assessment.vehicleCount} 台尚未进入{assessment.label}

)}

{assessment.label}需完成

{fmtKm(assessment.target)} km

{assessment.label}已完成

{fmtKm(assessment.completed)} km

数据截至 {assessment.daysLeft === 0 ? fmtDateLabel(assessment.endDate) : currentDateLabel}

{assessment.label}完成率

{fmtPercent(assessment.completionRate)}

{assessment.label}达标率

{fmtPercent(assessment.qualifiedRate)} ({assessment.qualifiedCount}台)

{assessment.label}剩余里程

{fmtKm(assessment.remaining)} km

{assessment.label}日均需完成

{assessment.daysLeft > 0 ? `${fmtKm(assessment.dailyTarget)} km` : '考核已到期'}

) : (
暂无第一年度车辆,当前车型车辆已进入后续考核年度。
)}
{assessment ? `${assessment.label}剩余考核天数` : '剩余考核天数'} {assessment?.daysLeft ?? target.daysLeft} 天
车辆明细 (前5台)
{vehicles.slice(0, 5).map(vehicle => (
{vehicle.plateNumber} 在线
{vehicle.todayMileage} KM
))}
)}
)}
); }