fix: 考核区间支持多批次显示
190辆冷链车有3个不同考核区间(40台、50台、100台), 恒运有2个。后端改为查询每个target的不同考核区间并返回 periods数组,前端换行显示每个区间及其车辆数。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -107,6 +107,25 @@ app.get('/targets', async (c) => {
|
||||
statsMap.set(s.target_id, s);
|
||||
}
|
||||
|
||||
// 查询每个 target 的不同考核区间
|
||||
const [periodRows] = await pool.execute(`
|
||||
SELECT target_id,
|
||||
DATE_FORMAT(assessment_start_date, '%Y-%m-%d') as start_date,
|
||||
DATE_FORMAT(assessment_end_date, '%Y-%m-%d') as end_date,
|
||||
COUNT(*) as cnt
|
||||
FROM tab_mileage_assessment_vehicle
|
||||
WHERE is_deleted = 0
|
||||
GROUP BY target_id, assessment_start_date, assessment_end_date
|
||||
ORDER BY target_id, assessment_start_date
|
||||
`) as any;
|
||||
|
||||
const periodsMap = new Map<number, string[]>();
|
||||
for (const p of periodRows) {
|
||||
const list = periodsMap.get(p.target_id) || [];
|
||||
list.push(`${p.start_date} ~ ${p.end_date} (${p.cnt}台)`);
|
||||
periodsMap.set(p.target_id, list);
|
||||
}
|
||||
|
||||
const now = new Date();
|
||||
const result = targets.map((t: any) => {
|
||||
const s = statsMap.get(t.id) || {};
|
||||
@@ -117,12 +136,16 @@ app.get('/targets', async (c) => {
|
||||
const daysLeft = Math.max(1, Math.ceil((yearEnd.getTime() - now.getTime()) / 86400000));
|
||||
const dailyTarget = remaining / daysLeft;
|
||||
|
||||
const startDate = t.default_start_date
|
||||
? new Date(t.default_start_date).toISOString().split('T')[0]
|
||||
: '';
|
||||
const endDate = t.default_end_date
|
||||
? new Date(t.default_end_date).toISOString().split('T')[0]
|
||||
: '';
|
||||
const periods = periodsMap.get(t.id) || [];
|
||||
if (periods.length === 0) {
|
||||
const startDate = t.default_start_date
|
||||
? new Date(t.default_start_date).toISOString().split('T')[0]
|
||||
: '';
|
||||
const endDate = t.default_end_date
|
||||
? new Date(t.default_end_date).toISOString().split('T')[0]
|
||||
: '';
|
||||
if (startDate || endDate) periods.push(`${startDate} ~ ${endDate}`);
|
||||
}
|
||||
|
||||
return {
|
||||
id: t.id,
|
||||
@@ -131,7 +154,7 @@ app.get('/targets', async (c) => {
|
||||
totalMileagePerVehicle: Number(t.total_mileage_per_vehicle),
|
||||
annualMileagePerVehicle: Number(t.annual_mileage_per_vehicle),
|
||||
assessmentYears: t.assessment_years,
|
||||
period: `${startDate} ~ ${endDate}`,
|
||||
periods,
|
||||
todayTotal: Number(s.today_total) || 0,
|
||||
cumulativeTotal: Number(s.cumulative_total) || 0,
|
||||
avgCompletion: (Number(s.avg_completion) || 0) * 100,
|
||||
|
||||
Reference in New Issue
Block a user