diff --git a/src/modules/mileage/StatisticsView.tsx b/src/modules/mileage/StatisticsView.tsx index 38d7fc1..4d6f98f 100644 --- a/src/modules/mileage/StatisticsView.tsx +++ b/src/modules/mileage/StatisticsView.tsx @@ -354,7 +354,9 @@ export default function StatisticsView() { <>
{assessment.label}区间
-{assessment.startDate} ~ {assessment.endDate}
+ {(assessment.periods.length > 0 ? assessment.periods : [`${assessment.startDate} ~ ${assessment.endDate}`]).map((period, i) => ( +{period}
+ ))}{assessment.label}任务/辆
diff --git a/src/modules/mileage/types.ts b/src/modules/mileage/types.ts index 435e5ac..e7371ca 100644 --- a/src/modules/mileage/types.ts +++ b/src/modules/mileage/types.ts @@ -93,6 +93,7 @@ export interface TargetYearlyAssessment { dailyTarget: number; startDate: string | null; endDate: string | null; + periods: string[]; } export interface TargetVehicle { diff --git a/src/server/routes/mileage/targets.ts b/src/server/routes/mileage/targets.ts index f848c89..4f1dbb3 100644 --- a/src/server/routes/mileage/targets.ts +++ b/src/server/routes/mileage/targets.ts @@ -84,6 +84,31 @@ app.get('/', async (c) => { yearlyMap.set(row.target_id, list); } + const [yearlyPeriodRows] = await pool.execute(` + SELECT + v.target_id, + y.year_number, + DATE_FORMAT(DATE_ADD(v.assessment_start_date, INTERVAL y.year_number - 1 YEAR), '%Y-%m-%d') as start_date, + DATE_FORMAT(DATE_SUB(DATE_ADD(v.assessment_start_date, INTERVAL y.year_number YEAR), INTERVAL 1 DAY), '%Y-%m-%d') as end_date, + COUNT(*) as cnt + FROM tab_mileage_assessment_vehicle v + JOIN tab_mileage_assessment_target t ON t.id = v.target_id AND t.is_deleted = 0 + JOIN ( + SELECT 1 as year_number UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 + ) y ON y.year_number <= LEAST(t.assessment_years, v.current_year_number) + WHERE v.is_deleted = 0 + GROUP BY v.target_id, y.year_number, v.assessment_start_date + ORDER BY v.target_id, y.year_number, v.assessment_start_date + `) as [any[], unknown]; + + const yearlyPeriodsMap = new Map