Перейти к содержанию

Модуль «Контакты» (3 экрана)


/p/:pid/contacts — Contacts List

Назначение: Список контактов проекта. Создание через Drawer. Доступ: Member+.

Компоновка:
  ├── Header + Sidebar проекта (пункт «Контакты» активен)
  └── Main:
      ├── Заголовок: «Контакты» | Счётчик: 342 | Кнопка: [+ Контакт] → Drawer
      │
      ├── Панель фильтров:
      │   ├── 🔍 Поиск по имени, email, телефону
      │   ├── Компания (multi-select)
      │   ├── Дата создания (date range)
      │   ├── Создатель (multi-select)
      │   └── Есть сделки: Да / Нет / Все
      │
      ├── Bulk actions (Manager+, появляется при выделении):
      │   ├── ☑ Выделено: 5 | [Назначить] [Расшарить] [Удалить] [Экспорт]
      │   └── ☑ Выделить все на странице | Выделить все (342)
      │
      └── Таблица:
          | ☐ | Имя ▼        | Email           | Телефон        | Компании    | Сделки | Создан    |
          | ☐ | Иванов И.И.  | ivan@mail.com   | +7 920 543...  | Альфа, Бета | 3      | 15.01.26  |
          | ☐ | Петрова А.С. | pet@mail.com    | +7 916 123...  | Гамма       | 1      | 20.01.26  |

          Клик на строку → /p/:pid/contacts/:id
          Пагинация: «Показано 1–25 из 342» [25 ▼] [← 1 2 3 ... 14 →]

Empty state:
  «В проекте пока нет контактов.»
  «Создайте первый контакт или импортируйте из CSV.»
  [+ Создать контакт] [Импорт CSV]

Drawer «Создание контакта»

Правая боковая панель:
  ├── Заголовок: «Новый контакт»
  ├── Поля (6-8 максимум):
  │   ├── Имя* (input)
  │   ├── Фамилия* (input)
  │   ├── Email (input)
  │   ├── Телефон (input, маска)
  │   ├── Должность (input)
  │   └── Компания: [Выбрать ▼] или «+ Новая» → раскрытие поля «Название компании»
  ├── Кнопка: [Создать]
  └── Кнопка: [Отмена] или клик вне drawer

Проверка дублей:
  При вводе email/телефона → фоновая проверка.
  Если найден дубль → inline-предупреждение:
  «Контакт с таким email уже существует. [Открыть]»

/p/:pid/contacts/:id — Contact Details

Назначение: Карточка контакта — полная информация, связи, история. Доступ: Member+ (по политике видимости).

Компоновка:
  ├── Header + Sidebar проекта
  └── Main:
      ├── Шапка карточки:
      │   ├── Аватар (инициалы / фото)
      │   ├── Имя Фамилия
      │   ├── Должность
      │   ├── Email (клик → mailto) | Телефон (клик → tel)
      │   ├── Владелец: Петрова А.С. | Создан: 15.01.2026
      │   └── Действия: [Редактировать] [Расшарить] [Удалить] [⋮ Ещё: Merge, Передать]
      │
      ├── Tabs:
      │   ├── Обзор
      │   ├── Сделки
      │   ├── Компании
      │   ├── Активности
      │   └── История
      │
      ├── Tab «Обзор»:
      │   ├── Секция «Контактные данные»:
      │   │   Email, телефон (доп.), адрес, соц. сети
      │   ├── Секция «Компании» (карточки):
      │   │   Альфа (Директор) | Бета (Консультант)
      │   │   [+ Привязать компанию]
      │   └── Секция «Последние сделки» (макс. 3):
      │       Сделка «Альфа — ЗП» | Стадия: КП | 500 000 ₽
      │
      ├── Tab «Сделки»:
      │   Таблица всех сделок по этому контакту.
      │
      ├── Tab «Компании»:
      │   Список компаний (many-to-many). [+ Привязать] [✕ Отвязать]
      │
      ├── Tab «Активности»:
      │   Список задач/звонков/встреч привязанных к контакту.
      │   [+ Активность] → Drawer с предзаполненной привязкой.
      │
      └── Tab «История»:
          Лог событий (аудит): создание, изменения, привязка сделок, merge.
          Каждая строка: время | кто | что изменил | diff.

/p/:pid/contacts/:id/edit — Edit Contact

Назначение: Редактирование контакта. Доступ: Member+ (по политике: свои, расшаренные).

Компоновка (форма):
  ├── Заголовок: «Редактирование — Иванов И.И.»
  ├── Все поля контакта (расширенный набор, не как в Drawer):
  │   ├── Имя*, Фамилия*, Отчество
  │   ├── Email, Доп. email
  │   ├── Телефон (маска), Доп. телефон
  │   ├── Должность
  │   ├── Адрес
  │   ├── Дата рождения
  │   ├── Примечание (textarea)
  │   └── Компании: multi-select из существующих
  └── Кнопки: [Отмена] [Сохранить]

Drift Detection:
  Если контакт привязан к сделкам/продажам и ключевые поля (телефон, email) изменены:
  → в карточках сделок/продаж появится предупреждение ⚠