diff --git a/docs/app-map/contacts.md b/docs/app-map/contacts.md new file mode 100644 index 0000000..120d5ec --- /dev/null +++ b/docs/app-map/contacts.md @@ -0,0 +1,143 @@ +# Карта: Контакты (forbion, мобильная веб-версия) + +Снято 2026-07-12 наблюдением мобильной вёрстки forbion (вьюпорт 390px, аккаунт `cloude`, +строго read-only по mail/073). Пишущие элементы («Создать контакт», «Импорт», «+» у групп/команд, +«Сохранить», «Удалить», «⋯» адресных книг) НЕ нажимались — их наличие и подписи сняты с экрана/DOM. + +## Вход +Нижняя панель шелла → кнопка навигации (стрелка `<`, подпись раздела «Контакты») открывает +шторку приложения; либо прямой URL `/apps/contacts/`. Приложение открывается сразу списком +«Все контакты» (первый контакт автовыбран на широком экране; в мобильной вёрстке — только список). + +Нижняя панель шелла (общая, зона лида, для ориентира): `<`/`>` — открыть/закрыть шторку +навигации приложения · конверт → Почта · «карточки» → Задачи · камера → Конференции · +`≡` → шторка приложений. Панель плавающая поверх контента. + +## Экран: Список контактов («Все контакты») +**Шапка:** только поле поиска (pill на всю ширину). Заголовка экрана и кнопки «создать» в шапке НЕТ +(создание — в шторке навигации). +**Тело:** плоский список: аватар (фото или инициалы на цветном круге) + имя (16, тёмный) + +email (второй строкой, серый). Разделители-линии. Сортировка — по отображаемому имени +(настраивается в «Параметрах контактов»). +**Действия:** +- Ввод в поиск → фильтрация списка на лету (имя/email); справа в поле появляется `×` — очистить. +- Тап по контакту → «Экран: Карточка контакта». +- Тап `<` на нижней панели → «Экран: Шторка навигации». + +## Экран: Шторка навигации (drawer слева, поверх списка) +**Верх:** +- «Создать контакт» (зелёная, слева иконка) + отдельный сегмент `+` справа — (не нажималось, + read-only; по аналогии с десктопом `+` = быстрое создание). +- В контексте команды над ней появляется вторая зелёная кнопка «Импорт контактов» + `+`. +**Пункты:** +- «Все контакты» [бейдж: 105] → список всех. +- «Организационная структура» → «Экран: Организационная структура». +- «Без группы» [105] → список контактов без групп (у `cloude` все 105 без групп). +- Секция «Группы контакта» [`+`] — пусто (групп нет); `+` = создать группу (не нажималось). +- Секция «Команды» [`+`]: «Тест», «admin», «all», «Администраторы поддержки», «Маркетинг», + «Показать все команды». У активной команды справа `⋯` (меню; не раскрывалось). + Тап по команде → «Экран: Команда». +- Кнопка «Параметры контактов» (внизу шторки) → «Экран: Параметры контактов». +**Закрытие:** тап по контенту правее шторки (или `>` на нижней панели — кнопка-стрелка меняет +направление). NB: кнопка панели при открытой шторке имеет aria «Закрыть навигацию». + +## Экран: Карточка контакта (просмотр) +**Шапка:** `←` (назад к списку) слева сверху. +**Тело (по центру):** большой аватар; имя крупно; подпись — должность/организация +(например «ооо--форбион», «Ген.дир»); ряд круглых кнопок-действий; секции полей. +**Кнопки-действия (круглые, состав зависит от контакта):** +- видеокамера → звонок/беседа Talk с пользователем (у системных контактов-пользователей), +- силуэт → профиль пользователя на сервере, +- конверт → написать письмо. + У обычного (не системного) контакта была только кнопка-конверт. +**Секции полей (просмотр; показываются только заполненные):** +- «Эл. почта» (значение в рамке-поле), +- «Социальная сеть» (ссылка на профиль `…/index.php/u/`), +- «Подробное имя» (Имя, Фамилия отдельными строками), +- «ID в объединении облачных хранилищ» (federated cloud ID `user@forbion.f7cloud.ru`), +- «Адрес» (подтип, напр. «Город»), +- «Личные даты» (день рождения), +- «Адресная книга» (какой книге принадлежит: «Учётные записи» / «Контакты»). +**Действия:** +- «✏️ Править» (рядом с именем; ЕСТЬ только у контактов из редактируемых книг, у системных + из «Учётных записей» отсутствует) → «Экран: Правка контакта». +- `⋯` (справа от имени) → меню: + - системный контакт («Учётные записи»): «Скачать», «Копировать контакт», «Создать QR-код»; + - обычный контакт: те же + «Исключить контакт из календаря Дней Рождений», «Удалить» + (не нажималось). + +## Экран: Правка контакта (после «Править») +Заголовок вверху — «Создание нового контакта» (похоже, баг вебки: открыт существующий контакт, +все данные на месте). +**Тело (форма):** +- Большой аватар + зелёная кнопка «Добавить фото»; +- Поле имени; два поля должности (placeholder «Должност…» + значение, напр. «Ген.дир»); +- Кнопки: «✓ Сохранить…», `⋯`; +- «Телефон»: строка типа (дропдаун «Домашний» с `×` и `∨`) + поле значения; +- «Эл. почта»: тип + значение (та же пара); +- «Адрес»: подтип «Город» + поле; +- «Личные даты»: поле с датой (дата-пикер); +- «О себе»: многострочное поле; +- «Часовой пояс»: дропдаун; +- «Группы контакта»: дропдаун «Добавить контакт в гру…». +**Выход:** `←` — назад без сохранения (проверено, изменений не делалось). + +## Экран: Организационная структура +**Шапка:** «График:» + селектор. +**Тело:** вертикальное дерево-граф: карточки сотрудников (аватар-инициал, имя зелёным, +счётчики «Управляет: N» / «Наблюдает: N»), связи линиями, узлы сворачиваются бейджем `^N` +на ребре. Пример: admin → g.kuts@proorder.ru. + +## Экран: Команда (например «Тест») +**Тело:** +- Аватар-инициал команды, название, «Владелец» + чип с аватаром (`you`); +- Кнопки: «✏️ Править» (зелёная), «Копировать ссылку»; +- Секция «Создавать»: кнопки-пилюли «Папка», «Конференции», «Календарь» — создание общих + ресурсов команды (не нажималось); +- Секция «Члены»: «Добавить» (не нажималось) + список участников (аватар, имя, роль «Владелец»). +- «Показать все команды» в шторке ведёт на список команд (у `cloude` контент совпал с экраном + команды — все команды и так в шторке). + +## Экран: Параметры контактов (модальный шит, `×` для закрытия) +- Секция «Общие»: «Сортировать контракты по» — дропдаун: Имя / Фамилия / + Имя (фонетическое написание) / Фамилия (фонетическое написание) / Отображаемое имя (текущее) / + Последнее изменение; +- Кнопка «Импорт контактов» (не нажималось); +- Секция «Адресные книги», у каждой `⋯` (не раскрывалось): + - «Контакты» — 1 контакт, 0 групп; + - «Недавние контакты» — 0 контактов, 0 групп; + - «Учётные записи» — «Системная адресная книга, в которой хранятся все учетные записи», + 104 контакта, 0 групп; +- Кнопка «Новая адресная книга» (не нажималось). + +## Пустые состояния / ошибки +- Поиск без совпадений: список пустеет (отдельной заглушки на 390px не замечено). +- Секция «Группы контакта» без групп — просто пустая (без заглушки). +- Состояния ошибок сети не воспроизводились (read-only, боевой сервер). + +## Расхождения с нативным клиентом (бэклог b-mob-contacts) +- расхождение: **редактирование/удаление контакта** — в вебе «Править» (полная форма: фото, имя, + должность, телефон/почта С ТИПАМИ, адрес, даты, о себе, часовой пояс, группы) и «Удалить» в `⋯`; + в нативе ничего этого нет (план mail/072 п.1). +- расхождение: **типы полей** (Домашний/…) у телефона/почты — натив не парсит TYPE. +- расхождение: **группы контакта** (секция в шторке, поле в форме) — в нативе нет (план п.2). +- расхождение: **шторка навигации** (Все контакты/Орг.структура/Без группы/Группы/Команды/ + Параметры) — в нативе только плоский список с поиском. +- расхождение: **организационная структура** (граф) — в нативе нет. +- расхождение: **команды** (экран команды, создание ресурсов, члены) — в нативе нет. +- расхождение: **параметры** (сортировка, импорт, управление адресными книгами, новая книга) — + в нативе нет; создание пишет в первую книгу без выбора. +- расхождение: **карточка**: соц.сеть, federated cloud ID, «Исключить из календаря ДР», QR-код, + «Скачать», «Копировать контакт» — в нативе нет; зато в нативе есть прямые «Email»/«Позвонить» + (системные интенты) — в вебе звонок идёт через Talk-кнопку у системных контактов. +- расхождение: **меню `⋯` карточки различается по книге** (системная без «Удалить») — нативу + при реализации правки учесть read-only книги. +- наблюдение: заголовок формы правки в вебе — «Создание нового контакта» (баг вебки, в нативе + не повторять). + +## Примечания к методике +Снималось через same-origin iframe 390px внутри Chrome (окно 2560px нельзя ужать) — media queries +отрабатывают по ширине iframe, тема отдаёт мобильную вёрстку (`header__mobile`, +`header__mobile-bottom`, `app-content-wrapper--no-split`). Артефакт: плавающая нижняя панель в +iframe не отрисовывается (visibility:hidden не снимается темой), состав панели снят из DOM; +на реальном телефоне панель видна.