feat(repairs): пробег видно прямо в списке ремонтов

Задача CRM 4386: «набрал номер авто, смотрю историю ремонтов по машине,
а пробеги не вижу сразу, нужно проваливаться в ремонт».

Пробег бэкенд отдавал в строке ленты и раньше — лента его просто не забирала.
Теперь он стоит справа на строке механика: так пробеги выстраиваются в колонку
и историю одной машины можно читать сверху вниз, не открывая каждый ремонт.

Показываем ровно тот пробег, что зафиксирован в самом ремонте. Он и есть
старлайновский: форма создания подставляет его из последнего снимка StarLine,
механик только подтверждает (если сервис недоступен — вводит руками).
Подставлять в историю ТЕКУЩИЙ пробег из StarLine нельзя: у ремонта полугодовой
давности он показал бы сегодняшнее число.

Когда пробега нет — не пишем ничего. У ремонтов из импортированного архива он
есть в 2% случаев, и подпись «пробег не записан» в каждой второй строке была бы
шумом. У ремонтов, заведённых в приложении, пробег заполнен в 72% случаев.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-07 23:31:50 +10:00
co-authored by Claude Opus 5
parent 3cc9ffb3e6
commit 58c9a2ca1e
2 changed files with 15 additions and 2 deletions
@@ -12,6 +12,9 @@ export interface FeedItem {
car_model: string | null;
driver_name: string | null;
mechanic_name: string;
// Пробег на момент ремонта. Бэкенд отдавал его и раньше, но лента поле не
// забирала — чтобы посмотреть, приходилось проваливаться в каждый ремонт.
mileage: number | null;
is_external: boolean;
works_preview: FeedWorkBrief[];
works_extra: number;
@@ -349,8 +349,18 @@ function RepairRow({ item, onOpen }: { item: FeedItem; onOpen: () => void }) {
Водитель: {item.driver_name}
</div>
)}
<div className="text-xs text-muted-foreground truncate">
Механик: {item.mechanic_name}
{/* Пробег справа на строке механика: так он выстраивается в колонку и
историю одной машины можно читать сверху вниз, не открывая каждый
ремонт — ровно об этом задача 4386. У импортированного архива
пробега почти нет, поэтому пустую подпись не рисуем: строка
«пробег не записан» в каждой второй строке — шум, а не польза. */}
<div className="flex items-baseline justify-between gap-2 text-xs text-muted-foreground">
<span className="truncate">Механик: {item.mechanic_name}</span>
{item.mileage != null && (
<span className="flex-shrink-0 tabular-nums">
{item.mileage.toLocaleString("ru-RU")} км
</span>
)}
</div>
<div className="flex items-baseline justify-between gap-2">
<WorksLine works={item.works_preview.map((w) => w.name)} extra={item.works_extra} />