feat(work-orders): new Mitchell1-style dashboard view (Phase 1 — layout + tabs)

Custom Filament Page at /app/work-orders/{id}/dashboard renders a
Mitchell1-inspired 3-column layout:
  - Top bar: WO#, status badge, actions (Edit / Tracking link)
  - Meta header row: creation / opened / ETA / responsible / urgency /
    paid amount (6 cells)
  - Left sidebar (300px): Client card (avatar, phone, email, status
    tag, 3-stat grid: visits/total/debt) + Vehicle card (photo, plate,
    VIN, mileage, engine, gearbox) + Repair history (latest 5 for this
    vehicle, links to dashboards)
  - Middle: tab bar (Lucrări/Piese/Diagnostic/Foto/Documente/Note)
    with Alpine-driven switching. Works & Parts show the tables read-
    only; add/edit still goes through existing EditWorkOrder Filament
    resource. Photos tab shows gallery from spatie/media-library.
  - Right (300px): Finance summary card (works cost, parts cost,
    discount, total, paid, balance) + placeholder for Timeline+Chat
    (Phase 2)
  - Responsive: right column collapses <1280px, left <900px.

'Vizualizare dashboard' button added on top of the existing
EditWorkOrder page so users can switch between edit form and info-
dense dashboard.

Fixed getSlug() signature (must match parent with ?Panel $panel).

+14 translations. All 306 tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-05 18:48:52 +00:00
parent 6de9c615f7
commit fa8704f8b6
5 changed files with 818 additions and 2 deletions
+14 -2
View File
@@ -522,6 +522,8 @@
"Cost & marjă": "Стоимость и маржа",
"Cost (de la terț)": "Стоимость (от субподрядчика)",
"Cost (terț)": "Стоимость (субподр.)",
"Cost manopere": "Стоимость работ",
"Cost piese": "Стоимость запчастей",
"Cost piese (achiziție)": "Стоимость запчастей (закупка)",
"Cost/lead": "Стоимость/заявка",
"Costuri": "Затраты",
@@ -563,7 +565,7 @@
"Curățare": "Чистка",
"Curăță": "Очистить",
"Custom": "Свой",
"Cutie": "Коробка",
"Cutie": "КПП",
"Cutie de viteze": "Коробка передач",
"Cutie viteze": "КПП",
"Câmp obligatoriu": "Обязательное поле",
@@ -891,6 +893,7 @@
"Fără articol (manual)": "Без артикула (вручную)",
"Fără client": "Без клиента",
"Fără maistru": "Без мастера",
"Fără mașină": "Без авто",
"Fără răspuns": "Без ответа",
"Fără stoc": "Нет в наличии",
"GNC": "CNG",
@@ -996,6 +999,7 @@
"Is vip": "VIP",
"Istoric depozitare": "История хранения",
"Istoric prețuri furnizori": "История цен поставщиков",
"Istoric reparații": "История ремонтов",
"Iulie": "Июль",
"Iunie": "Июнь",
"JSON": "JSON",
@@ -1246,11 +1250,13 @@
"Nicio factură generată": "Счета не созданы",
"Nicio fișă de lucru": "Нет заказ-нарядов",
"Nicio fișă în perioada selectată.": "Нет нарядов за выбранный период.",
"Nicio fotografie": "Нет фотографий",
"Nicio lucrare de caroserie": "Нет кузовных работ",
"Nicio lucrare la terți": "Нет работ у субподрядчиков",
"Nicio manoperă efectuată.": "Работы не выполнены.",
"Nicio mașină încă": "Пока нет авто",
"Nicio metodă de plată configurată. Contactează operatorul.": "Способ оплаты не настроен. Свяжитесь с оператором.",
"Nicio notă internă.": "Нет внутренних заметок.",
"Nicio piesă implicită": "Нет запчастей по умолчанию",
"Nicio piesă montată.": "Запчасти не установлены.",
"Nicio plată": "Нет платежей",
@@ -1558,6 +1564,7 @@
"Prețuri": "Цены",
"Prețurile se înregistrează automat la fiecare recepție de PO.": "Цены регистрируются автоматически при каждой приёмке PO.",
"Price": "Цена",
"Prima vizită": "Первый визит",
"Primește cereri din canalul Telegram + trimite confirmări automate.": "Получайте заявки из Telegram-канала + отправляйте автоподтверждения.",
"Primit": "Входящий",
"Print": "Печать",
@@ -1704,7 +1711,7 @@
"Respins": "Отклонено",
"Respins de": "Отклонено",
"Responsabil": "Ответственный",
"Rest de plată": "Осталось к оплате",
"Rest de plată": "К оплате",
"Restanță": "Задолженность",
"Restaurează": "Восстановить",
"Restituire": "Restituire",
@@ -1980,6 +1987,7 @@
"Testează bot Telegram": "Тест Telegram-бота",
"Theme color": "Theme color",
"Time": "Время",
"Timeline & Chat — Phase 2": "Timeline и чат — этап 2",
"Timp deschidere, ms": "Время открытия, мс",
"Timp lucrat": "Отработано",
"Timp mediu": "Среднее время",
@@ -2030,8 +2038,10 @@
"Total general": "Общий итог",
"Total ieșiri": "Всего расходов",
"Total intrări": "Всего поступлений",
"Total manopere:": "Итого работы:",
"Total net": "Итого чистыми",
"Total paid": "Всего оплачено",
"Total piese:": "Итого запчасти:",
"Total plătit": "Всего оплачено",
"Total rezultate": "Всего результатов",
"Total venituri": "Всего доходов",
@@ -2178,7 +2188,9 @@
"Visa, Mastercard prin Stripe": "Visa, Mastercard prin Stripe",
"Vizibil": "Видимо",
"Vizitator": "Гость",
"Vizite": "Визиты",
"Vizual": "Визуально",
"Vizualizare dashboard": "Дашборд",
"Vizualizează": "Просмотр",
"Vizualizări": "Просмотры",
"Vopsea sărită": "Скол краски",