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.periods.map((period, index) => ({period}
))}总考核里程
{fmtKm(target.totalMileagePerVehicle * target.vehicleCount)} km
{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` : '考核已到期'}