From 5bd3a366e3cbce5896c7af98b1e2373b727f2dcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 17 May 2026 14:38:29 +0300 Subject: [PATCH] =?UTF-8?q?feat(deals):=20redesign=20groundwork=20?= =?UTF-8?q?=E2=80=94=20spec,=20plan,=20mockups=20+=20sidebar=20nav=20clean?= =?UTF-8?q?up?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deals page redesign: design spec + implementation plan (Phase A page redesign, Phase B 14->5 status funnel) + v8 HTML mockups (variants comparison + final). AppSidebar: remove Импорт данных / Отчёты nav links (routes stay reachable by direct URL); AppLayout.spec updated to 6 nav items. stylelint --fix on mockups; cspell-words += deals-redesign terms. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../js/components/layout/AppSidebar.vue | 2 - app/tests/Frontend/AppLayout.spec.ts | 6 +- cspell-words.txt | 6 + .../plans/2026-05-17-deals-page-redesign.md | 2831 +++++++++++++++++ .../2026-05-17-deals-page-redesign-design.md | 132 + web/v8/deals-final.html | 314 ++ web/v8/deals-variants.html | 506 +++ 7 files changed, 3793 insertions(+), 4 deletions(-) create mode 100644 docs/superpowers/plans/2026-05-17-deals-page-redesign.md create mode 100644 docs/superpowers/specs/2026-05-17-deals-page-redesign-design.md create mode 100644 web/v8/deals-final.html create mode 100644 web/v8/deals-variants.html diff --git a/app/resources/js/components/layout/AppSidebar.vue b/app/resources/js/components/layout/AppSidebar.vue index add53fee..fcddee98 100644 --- a/app/resources/js/components/layout/AppSidebar.vue +++ b/app/resources/js/components/layout/AppSidebar.vue @@ -53,14 +53,12 @@ const navGroups = computed(() => [ }, { title: 'Канбан', icon: 'mdi-view-column-outline', to: '/kanban' }, { title: 'Дашборд', icon: 'mdi-view-dashboard-outline', to: '/dashboard' }, - { title: 'Импорт данных', icon: 'mdi-database-import-outline', to: '/import' }, ], }, { eyebrow: 'Финансы', items: [ { title: 'Биллинг', icon: 'mdi-credit-card-outline', to: '/billing' }, - { title: 'Отчёты', icon: 'mdi-chart-box-outline', to: '/reports' }, ], }, { diff --git a/app/tests/Frontend/AppLayout.spec.ts b/app/tests/Frontend/AppLayout.spec.ts index 0faf28ec..691330d6 100644 --- a/app/tests/Frontend/AppLayout.spec.ts +++ b/app/tests/Frontend/AppLayout.spec.ts @@ -87,14 +87,16 @@ describe('AppLayout.vue', () => { expect(text).toContain('Команда'); }); - it('содержит все 6 nav-пунктов (Менеджеры+Напоминания убраны по требованию заказчика)', async () => { + it('содержит 6 nav-пунктов (Импорт данных + Отчёты убраны по требованию заказчика)', async () => { const wrapper = await mountAppLayout(); const text = wrapper.text(); - ['Проекты', 'Сделки', 'Канбан', 'Дашборд', 'Биллинг', 'Отчёты', 'Настройки'].forEach((label) => + ['Проекты', 'Сделки', 'Канбан', 'Дашборд', 'Биллинг', 'Настройки'].forEach((label) => expect(text).toContain(label), ); expect(text).not.toContain('Менеджеры'); expect(text).not.toContain('Напоминания'); + expect(text).not.toContain('Импорт данных'); + expect(text).not.toContain('Отчёты'); }); it('показывает счётчики только у пунктов с count', async () => { diff --git a/cspell-words.txt b/cspell-words.txt index 6b758cd0..2dd5691a 100644 --- a/cspell-words.txt +++ b/cspell-words.txt @@ -1385,3 +1385,9 @@ ivotoby ребейз ребейзнута ребейзом + +# Deals page redesign — spec/plan (2026-05-17) +гейта +дровер +канбаном +коммитить diff --git a/docs/superpowers/plans/2026-05-17-deals-page-redesign.md b/docs/superpowers/plans/2026-05-17-deals-page-redesign.md new file mode 100644 index 00000000..60ecce7c --- /dev/null +++ b/docs/superpowers/plans/2026-05-17-deals-page-redesign.md @@ -0,0 +1,2831 @@ +# Редизайн страницы «Сделки» — план реализации + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Превратить страницу «Сделки» из CRM с ручным созданием/корзиной в реестр лидов, поставленных crm.bp: новые колонки, фильтры, экспорт по диапазону дат, пагинация, master-detail панель; воронку статусов 14 → 5. + +**Architecture:** Две фазы. **Фаза A** — редизайн страницы (frontend + `DealController@index` + `DealExportController`), работает на текущем наборе из 14 статусов. **Фаза B** — схлопывание воронки 14 → 5 (схема + миграция + Канбан + маппинг импорта). Фаза B стартует ПОСЛЕ гейта подтверждения slug'ов. Фильтрация и пагинация — server-side через `GET /api/deals`. Панель деталей — общий `DealDetailBody.vue`, обёрнутый либо в overlay-дровер (Канбан), либо в inline-`