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

Интерфейс переписки в заявке#

Вкладка Переписка#

  • Переписка ведется внутри тем во вкладке Переписка. Вкладку видят все пользователи, которые могут просмотреть заявку.
  • Темы: см. chat-order.schema.json
  • Вкладка Переписка не отображается в статусах DRAFT и DRAFT_CONTRACTOR заявок
  • Если у пользователя есть непрочитанные сообщения, отображается значок наличия новых сообщений.
    • на вкладке
    • на названии темы

Просмотр темы#

  • При клике на название темы отображается область просмотра переписки относящейся к выбранной теме, отображается всем пользователям (см. Отображение списка сообщений)
  • в заголовке:
    • кнопка К темам - отображается всем пользователям. При нажатии отображается список тем
    • Название темы - отображается название текущей темы
    • Кнопка Поиск - отображается всем пользователям. При наведении на кнопку появляется хинт Поиск по теме (см. Поиск)
    • Кнопка Файлы и ссылки - отображается всем пользователям. При наведении на кнопку появляется хинт Файлы и ссылки по теме (см. Вложения)
  • Панель отправки сообщений:
    • отображаются пользователям с правом SEND_MESSAGE_ORDER
    • закреплена внизу экрана
    • максимальная
    • поле ввода текста - если пользователь ввел текст, переключился на другую закладку, вернулся в переписку - текст остается.
  • переключатель Приватное
    • отображается пользователям с правом SEND_PRIVATE_MESSAGE_ORDER
    • при наведении показывается хинт Клиент не увидит
    • при включении переключателя панель отправки сообщений подсвечивается (макет)

Отображение списка сообщений#

  • При открытии темы:
    • если нет сообщений отображается Пока нет сообщений: макет
    • если у пользователя нет непрочитанных сообщений: отображается последнее сообщение в переписке
    • если у пользователя есть непрочитанные сообщения: см непрочитанные сообщения
  • В области просмотра сообщений:
    • новые сообщения появляются внизу. При появлении новых сообщений старые сдвигаются вверх.
    • сообщения группируются по дате sentAt:
      • каждая новая дата (если есть сообщения в эту дату) отображается как разделитель между сообщениями разных дат. При скролле сообщений надпись с датой прокручивается вместе с сообщениями. Макет.
      • если непрочитанные сообщения начинаются в новую дату, то дата располагается под надписью "Непрочитанные сообщения". Макет.
    • сообщения на фронт загружаются по мере прокрутки переписки пользователем, за один раз SPA_CHAT_LOAD_MESSAGES_NUMBER сообщений
    • во время подгрузки сообщений отображается лоадер в верхней части: макет
    • если последнее сообщение не видно на экране, отображается кнопка перехода к последнему сообщению. По нажатию список сообщений прокручивается к последнему. Все сообщения помечаются как прочитанные. Макет.
  • На каждом сообщении отображается:
  • Если в тексте сообщения есть ссылки (в одном сообщении может быть больше одной):
    • отображаются как кликабельные
    • открываются в новом табе браузера

Пометки о прочтении#

При:

  • отображении сообщения на экране пользователя
  • прокрутке всех сообщений кнопкой перехода к последнему сообщению - все сообщения помечаются прочитанными
  • отправке нового сообщения, когда есть непрочитанные, и отображения его внизу списка сообщений - все сообщения помечаются прочитанными

Из message.notReadBy удаляется роль просмотревшего

  • Сообщения помечаются прочитанные исполнителем (исполнителю удаляется из message.notReadBy), только если прочитал исполнитель, ответственный за тему
  • Если сообщение от роли CUSTOMER посмотрел пользователь с ролью CONTRACTOR (ответственный за тему), то из message.notReadBy удаляются CONTRACTOR и AGENT,

Пр этом:

Виды отображения сообщений#

  • Свои сообщения - сообщения у которых sentBy == текущий пользователь отображаются справа.
  • Не свои сообщения - сообщения у которых sentBy != текущий пользователь отображаются слева.
  • Приватные сообщения - сообщения у которых isPrivate == true, на сообщении пометка Приватный. Отображаются только пользователям с правом VIEW_PRIVATE_MESSAGE_ORDER. Макет.
  • Файл - сообщения в которых отправлено вложение. Отображается название и размер вложения. При клике на название файла, файл скачивается на устройство пользователя. Макет
  • На сообщение есть ответ - сообщение, у которого hasReply == true. Для такого сообщения показывается отметка о том, что на него есть ответ. Макет.
  • Сообщение является ответом - сообщения, которых указано replyForId. Для такого сообщения показывается первая строчка сообщения на которое отвечает. При клике на эту строчку, переписка прокручивается к исходному сообщению, при этом с бэка загружаются все сообщения между сообщением ответом и тем, на которое ответ. Макет.
  • Сообщения о возвратах на доработку - сообщения у которых messageType == BACKWARD: макет.

Отображение автора сообщения#

В зависимости от того кто смотрит переписку, по разному отображается автор сообщения:

Кто смотрит Кто отправитель Что показываем
CUSTOMER CUSTOMER Фамилия Имя Отчество пользователя отправителя
CUSTOMER CONTRACTOR, AGENT Название агента
CONTRACTOR, AGENT, OBSERVER, COMPLIANCE CUSTOMER Фамилия Имя Отчество пользователя отправителя
CONTRACTOR, AGENT, OBSERVER, COMPLIANCE CONTRACTOR Фамилия Имя исполнителя:
CONTRACTOR, AGENT, OBSERVER, COMPLIANCE AGENT Фамилия Имя агента
  • Название агента: user.agent.company.fullName, если к заявке ещё не привязано договор, то отображается константа Агент
  • Фамилия Имя пользователя отправителя: {user.LastName user.FirstName user.patronymic}
  • Фамилия Имя исполнителя: user.employee.fio
  • Фамилия Имя агента: user.agent.representative.fio

Состояния сообщений#

Отправляется#

  • макет
  • текстовое сообщение или файл отправлены пользователем, но ещё не сохранены в БД.
  • сообщение видит только пользователь-отправитель
  • если в сообщении отправляется файл, то ссылка для скачивания не активная

Отправлено#

  • макет
  • сообщение и файл успешно сохранены
  • сообщение видят все пользователи
  • если у пользователя открыта переписка, статус сообщения устанавливается без необходимости обновить страницу пользователем вручную
  • на сообщении отображается одна галка, кто видит отметку:
Роль отправителя Публичное/Приватное Пользователь с какой ролью видит сообщение с отметкой Отправлено
CUSTOMER Публичное CUSTOMER
CONTRACTOR Публичное CONTRACTOR, AGENT
AGENT Публичное CONTRACTOR, AGENT
CUSTOMER Приватное не может отправлять приватные
CONTRACTOR Приватное CONTRACTOR
AGENT Приватное AGENT

Прочитано#

  • макет
  • сообщение видят все пользователи
  • если у пользователя открыта переписка, статус сообщения устанавливается без необходимости обновить страницу пользователем вручную
  • на сообщении отображается две галки, кто и когда видит отметку (в таблице CONTRACTOR - ответственный за тему в которой находится сообщение):
Роль отправителя Публичное/Приватное "Прочитано", если в сообщении есть пометка о прочтении ролью: Пользователь с какой ролью видит отметку о прочтении
CUSTOMER Публичное CONTRACTOR (не агент, не наблюдатель) CUSTOMER
CONTRACTOR, Публичное CUSTOMER CONTRACTOR, AGENT
AGENT Публичное CUSTOMER CONTRACTOR, AGENT
CUSTOMER Приватное отсутствует, кликнт не может написать приватное -
CONTRACTOR Приватное AGENT CONTRACTOR
AGENT Приватное CONTRACTOR AGENT
COMPLIANCE Приватное CONTRACTOR COMPLIANCE

Ошибка отправки#

  • макет
  • сообщение видит только пользователь-отправитель в случае, если не удалось сохранить сообщение в БД или загрузить прикрепленное вложение
  • под сообщением отображается надпись Сообщение не отправлено
  • отображается кнопка повторной отправки, при нажатии на кнопку сообщение отправляется повторно
  • если у пользователя открыта переписка, статус сообщения устанавливается без необходимости обновить страницу пользователем вручную
  • после обновления страницы сообщение не отображается
  • после перехода по закладкам внутри заявки и возврата в переписку сообщение остается

Новые (непрочитанные) сообщения#

Пометка о прочтении ролью вычисляется по атрибуту notReadBy[] (см. Сохранение пометки о прочтении).

Индикатор наличия непрочитанных сообщений на закладке Переписка (и на названии темы при открытой закладке):

  • макет
  • отображается, если:
    • при открытии заявки у пользователя есть непрочитанные сообщения в переписке
    • пользователь находится в заявке, не на закладке переписки, и у его появились новые сообщения (появляется без обновления страницы пользователем)
  • скрывается, если:
    • пользователь просмотрел все сообщения
    • пользователь нажал кнопку перехода к последнему сообщению

При открытии переписки (темы) с непрочитанными сообщениями (открыл или обновил страницу с открытой темой в браузере):

  • отображается самое раннее непрочитанное сообщение
  • над сообщением отображается надпись Непрочитанные сообщения макет
  • При прокрутке списка сообщений, надпись остается над тем же сообщением где и была и не сдвигается к следующему непрочитанному
  • если перешли на другую закладку (внутри заявки), вернулись в чат:
    • если есть новые сообщения, надпись Непрочитанные сообщения светится в новом месте
    • нет новых - надписи нет нигде.

Если надпись есть, то пока пользователь в открытой теме выполняет любые действия (прокрутка, пишет ответы, и т.п.) - надпись остается на одном и том же месте.

Правило определения наличия новых сообщения для роли:

  • Для роли CONTRACTOR непрочитанные сообщения отображаются только если пользователь назначен ответственным за тему, и только в тех темах где он назначен ответственным.
  • (в таблице CONTRACTOR - ответственный за тему в которой находится сообщение):
Для роли Приватное / публичное Сообщение является "новым", если не прочитано ролью:
CUSTOMER публичное CUSTOMER
CONTRACTOR публичное CONTRACTOR
AGENT публичное CONTRACTOR или AGENT (= если CONTRACTOR прочитал, то для AGENT оно становится прочитанным)
CUSTOMER приватное отсутствуют, клиент не видит приватные сообщения
CONTRACTOR приватное CONTRACTOR
AGENT приватное AGENT

Для роли OBSERVER, COMPLIANCE индикатор новых сообщений не отображаем.

Контекстное меню сообщений#

  • Кнопка вызова контекстного меню сообщения (Три точки рядом с сообщением) отображается при наведении мышкой на сообщение в области просмотра переписки
  • Если для пользователя нет ни одного пункта меню, которые нужно отобразить, кнопка контекстно не отображается.

Пункты контекстного меню:

Ответить#