import { AnimatePresence, motion } from 'motion/react'; import { Minimize2, RotateCcw } from 'lucide-react'; import type { TargetSummary } from '../types'; import { deriveTargetTableRow, fmtKm, summarizeTargets } from './model'; interface FullscreenTargetTableProps { isOpen: boolean; targets: TargetSummary[]; assessmentYearMap: Record; onRefresh: () => void; onClose: () => void; } export default function FullscreenTargetTable({ isOpen, targets, assessmentYearMap, onRefresh, onClose, }: FullscreenTargetTableProps) { const totals = summarizeTargets(targets, assessmentYearMap); return ( {isOpen && (

车型考核汇总

今日 {fmtKm(totals.today)} km | 累计 {fmtKm(totals.cumulative)} km | 车辆 {totals.vehicleCount} | 所选年度完成率 {totals.averageCompletion.toFixed(1)} %
{targets.map((target, index) => { const row = deriveTargetTableRow(target, assessmentYearMap[target.id]); return ( ); })}
车型 台数 年度进度 年度任务/辆 年度达标 50%达标 今日里程 年度目标 已完成 未完成 余天 日均需完成
{target.targetName}
{row.assessment?.label || '当前年度'}
{target.periods.map((period, periodIndex) => {period})}
{target.vehicleCount}
= 90 ? 'bg-emerald-500' : row.completion >= 50 ? 'bg-amber-500' : 'bg-amber-500/60'}`} style={{ width: `${Math.min(row.completion, 100)}%` }} />
{row.completion.toFixed(1)}%
{fmtKm(row.completed)} / {fmtKm(row.goal)} km
{fmtKm(row.taskPerVehicle)} km {row.qualified} {row.halfQualified} {fmtKm(target.todayTotal)} km {fmtKm(row.goal)} km {fmtKm(row.completed)} km {fmtKm(row.remainingMileage)} km {row.days} {row.assessment && row.days === 0 ? '考核已到期' : `${fmtKm(row.daily)} km`}
)}
); }