44 lines
3.9 KiB
Markdown
44 lines
3.9 KiB
Markdown
# Sprint 7 — UX-полировка stage + демо-данные
|
||
|
||
Цель: `https://test.admin.food-market.kz` открывается → наполненные модули видны сразу, UI удобен (confirm на destructive, toast'ы, скелеты, empty-states, breadcrumbs, shortcuts).
|
||
|
||
Старт: 2026-05-29. Исполнитель: Claude Opus 4.7 (автономный режим).
|
||
|
||
## Принципы
|
||
|
||
- Каждый пункт: build + тесты + `~/deploy-stage.sh` + Playwright-скриншот retest на стенде + коммит + `[x]` в этом доке.
|
||
- НЕ трогать: global.json, прод-стек (admin.food-market.kz), POS WPF.
|
||
- Команды для теста UI на стенде: `cd src/food-market.web && pnpm dev` локально к API; либо Playwright против `https://test.admin.food-market.kz` после деплоя.
|
||
|
||
## Чек-лист
|
||
|
||
- [x] **1. Demo-data seeder для stage** — POST /api/admin/seed-demo + admin-кнопка «Заполнить демо-данными». 50 товаров / 5 групп / 10 контрагентов / 5 приёмок / 30 продаж / 1 опт / 1 списание / 1 перемещение / 1 инвентаризация. Идемпотентно (маркер DEMO-). E2E 5/5 ✓ на стейдже.
|
||
- [x] **2. ConfirmDialog на destructive actions** — общий `<ConfirmDialog>` + хук `useConfirm()`. Применён к 17 страницам + ProductImageGallery. Esc=cancel, focus-on-Cancel, tone='danger'|'warning'. Org-archive уже использует Modal с confirmation-name (не трогали). 2FA UI ещё не существует в web — пропущено. Скриншот стейджа: `tests/e2e/reports/confirm-dialog-1780119970286.png`.
|
||
- [ ] **3. Toast-система ошибок** — замена console.error в `src/lib/api.ts`. 4xx/5xx → error toast c message из API; мутации 2xx → success. Top-right, 5s autoclose.
|
||
- [ ] **4. Loading skeletons** — на DataTable и edit-pages вместо «Загрузка…» — shimmer-скелет. Reusable `<Skeleton>`.
|
||
- [ ] **5. Empty states с CTA** — list-страницы при `items.length === 0` показывают центрированный блок с иконкой, текстом и кнопкой «Создать первый …».
|
||
- [ ] **6. Breadcrumbs** — на edit-страницах Reusable `<Breadcrumbs items={...}>`.
|
||
- [ ] **7. Keyboard shortcuts** — edit: Ctrl+S = save, Esc = cancel/back; list: `/` = focus search, `n` = create. Hint в footer / `?` overlay.
|
||
|
||
## Журнал
|
||
|
||
### 2026-05-29 — старт
|
||
|
||
- Stage-testing спринта 6 закрыт (`docs/stage-testing-progress.md`, 13 сценариев / 94/94 шага ✓).
|
||
- Создан этот файл, перехожу к пункту 1.
|
||
|
||
### 2026-05-30 — пункт 1 ✓
|
||
|
||
- `DemoTenantSeeder` + `DemoSeedController` + UI-секция «Демо-данные» в OrganizationSettingsPage.
|
||
- Идемпотентность через маркер `Article startsWith "DEMO-"`.
|
||
- E2E `stage-demo-seed` (5 шагов) — green локально + на `test.admin.food-market.kz` (после deploy-stage.sh).
|
||
- Коммит: `ad09b56 feat(stage): demo-data seeder для test.admin.food-market.kz`.
|
||
|
||
### 2026-05-30 — пункт 2 ✓
|
||
|
||
- `<ConfirmDialog>` + хук `useConfirm()`. Button переведён на forwardRef.
|
||
- Применил к ProductEdit + 6 doc-edit + RetailSaleEdit + 8 list-pages + EmployeesPage + ProductImageGallery (всего 18 файлов).
|
||
- Esc=cancel, фокус на Cancel (Enter не подтверждает). Tone='danger'/'warning'.
|
||
- Скриншот стейджа: `tests/e2e/reports/confirm-dialog-*.png` — диалог рендерится, Esc-закрытие работает.
|
||
- Коммит: `17a6da2 feat(web): ConfirmDialog компонент + useConfirm hook`.
|