diff --git a/mechanic-pwa/frontend/src/api/repairsFeed.ts b/mechanic-pwa/frontend/src/api/repairsFeed.ts index 0fc9e22..e2d181f 100644 --- a/mechanic-pwa/frontend/src/api/repairsFeed.ts +++ b/mechanic-pwa/frontend/src/api/repairsFeed.ts @@ -14,6 +14,7 @@ export interface FeedItem { mechanic_name: string; works_preview: FeedWorkBrief[]; works_extra: number; + works_total: number; // сумма работ без запчастей photo_url: string | null; } diff --git a/mechanic-pwa/frontend/src/pages/repairs/RepairsFeedPage.tsx b/mechanic-pwa/frontend/src/pages/repairs/RepairsFeedPage.tsx index d3c18c9..074d046 100644 --- a/mechanic-pwa/frontend/src/pages/repairs/RepairsFeedPage.tsx +++ b/mechanic-pwa/frontend/src/pages/repairs/RepairsFeedPage.tsx @@ -83,8 +83,19 @@ export default function RepairsFeedPage() {
- {/* Refresh tap-area для не-touch юзкейса; жест pull-to-refresh — в PR-8. */} -
+ {/* Итого слева — сумма работ загруженных ремонтов; Обновить справа. */} +
+
+ Итого:{" "} + + {fmtMoney(items.reduce((s, it) => s + (it.works_total || 0), 0))} ₽ + + {items.length > 0 && ( + + ({items.length} {pluralRepairs(items.length)}) + + )} +
); } +function fmtMoney(n: number): string { + return new Intl.NumberFormat("ru-RU", { maximumFractionDigits: 0 }).format(Math.round(n)); +} + +function pluralRepairs(n: number): string { + const mod10 = n % 10; + const mod100 = n % 100; + if (mod100 >= 11 && mod100 <= 14) return "ремонтов"; + if (mod10 === 1) return "ремонт"; + if (mod10 >= 2 && mod10 <= 4) return "ремонта"; + return "ремонтов"; +} + + function WorksLine({ works, extra }: { works: string[]; extra: number }) { // У40: ellipsis в одну строку. Соединяем имена работ через «·». if (works.length === 0) return null;