diff --git a/src/modules/mileage/StatisticsView.tsx b/src/modules/mileage/StatisticsView.tsx index cbd3b27..fd8fa9c 100644 --- a/src/modules/mileage/StatisticsView.tsx +++ b/src/modules/mileage/StatisticsView.tsx @@ -12,6 +12,7 @@ import { import type { TargetSummary, TargetVehicle, TargetYearlyAssessment, TrendPoint } from './types'; import { fetchTargets, fetchTargetVehicles, fetchTrend } from './api'; import Blur from '../../components/Blur'; +import { weightedCompletionRate } from '../../shared/analytics/metrics'; function getDefaultDate(): string { const now = new Date(); @@ -83,6 +84,12 @@ export default function StatisticsView() { const selectedDaysLeft = selectedAssessment?.daysLeft ?? selectedTarget?.daysLeft ?? 0; const selectedDailyTarget = selectedAssessment?.dailyTarget ?? (selectedDaysLeft > 0 ? selectedRemaining / selectedDaysLeft : 0); const selectedQualifiedRate = selectedAssessment?.qualifiedRate ?? (selectedTarget?.vehicleCount ? selectedTarget.yearQualifiedCount / selectedTarget.vehicleCount * 100 : 0); + const selectedYearCompletionRate = weightedCompletionRate( + targets.flatMap(target => { + const assessment = getTargetAssessment(target, assessmentYearMap[target.id]); + return assessment ? [{ completed: assessment.completed, target: assessment.target }] : []; + }), + ); const latestTrend = trendData[trendData.length - 1]; const previousTrend = trendData[trendData.length - 2]; const trendDelta = latestTrend && previousTrend ? latestTrend.mileage - previousTrend.mileage : 0; @@ -541,7 +548,7 @@ export default function StatisticsView() { | 车辆 {targets.reduce((sum, t) => sum + t.vehicleCount, 0)} 台 | - 所选年度完成率 {targets.length > 0 ? (targets.reduce((sum, t) => sum + (getTargetAssessment(t, assessmentYearMap[t.id])?.completionRate ?? t.avgCompletion), 0) / targets.length).toFixed(1) : '0.0'} % + 所选年度完成率 {selectedYearCompletionRate.toFixed(1)} %