Дмитрий
|
dc1457a008
|
phase2(reminders-frontend): RemindersView + DealDetailDrawer + nav-badge
P0 этап 5 — frontend для reminders (после backend-этапа 4).
Пользователь может создавать/просматривать/завершать/удалять напоминания
из UI с inline-create в DealDetailDrawer.
Frontend:
- api/reminders.ts: типизированные helpers для 5 endpoints + ensureCsrfCookie
для mutating. Types ReminderFilter/ApiReminder/ReminderCounts.
- stores/reminders.ts: Pinia с items/counts/currentFilter +
load/refreshCounts/create/update/complete/remove. Optimistic для
complete/remove с revert на reject.
- components/reminders/ReminderDialog.vue: dual-mode (create/edit) modal
с native datetime-local input. Props dealId?/reminder? (edit),
ISO-конверсия при submit.
- views/RemindersView.vue: page-head с stats (active/overdue) + reload-btn;
4 tabs (today/upcoming/overdue/completed) с counts на бейджах
(overdue=error color); v-list с complete-btn / dropdown
Изменить/Удалить с confirm-dialog; empty-state.
- router: /reminders маршрут (lazy).
- AppLayout: nav-badge «Напоминания» биндит count из store
(replace static «12»); скрыт при count=0; polling 60 сек для
refreshCounts.
- DealDetailDrawer: секция «Напоминания» (только при tenantId+deal):
inline + create-btn / список / complete / встроенный ReminderDialog.
Vitest +20 (369/369 за 21.20 сек):
- reminders-store 11: initial / load+reject / refreshCounts /
create+reject / complete optimistic+revert / remove+reject / reset.
- RemindersView 7: mount / 4 tabs / counts / empty-state /
список / reload-btn / filter=today default.
- AppLayout +2: бейдж скрыт при count=0 / показывает count при >0.
Pest 347/347 (без изменений — backend нетронут).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-09 12:41:41 +03:00 |
|