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

Дополнительные модули

Сервисные подсистемы, добавленные в ходе доработок.

Кастомные уведомления

Посредник создаёт уведомления для своих клиентов (баннеры в кабинете); администратор СРМ — глобальные.

  • custom_notifications: agent_id? (NULL — глобальное от СРМ), active, audience (clients/…), display_method (header/…), name? (внутреннее), text, detail_text? («Подробнее»), start_at/end_at (период показа), dismissible.
  • Управление: посредник — Agent/Notifications (/agent/notifications, CRUD); админ — Filament CustomNotificationResource.
  • Показ — компонент NotificationsDisplay.vue; сервис NotificationService.

Заметки сотрудников

Внутренние заметки (личные и привязанные к объектам) для команды посредника — клиент их не видит.

  • notes: agent_id?, staff_id? (владелец личной / последний редактор), notable_type (order/item/group/shipment/delivery/client/personal), notable_id, body. Уникальность по agent_id + notable_type + notable_id.
  • Маршруты: notes/personal (личный блокнот), notes/{type}/{id} (заметка к объекту). UI: StaffNotepad.vue, NoteIcon.vue. Сервис NotesService.

Онбординг-визард посредника

Пошаговый мастер первичной настройки после регистрации посредника.

  • Поля в agents: home_country_id (домашняя страна), work_country_ids (json — страны работы), onboarding (json — состояние мастера). Страны берутся из отдельного справочника agent_countries (name, flag, currency_code).
  • Шаги (OnboardingController): страны → валюты → поддомен → сотрудники → логотип → завершение. UI: OnboardingWizard.vue.
  • Дополняет стартовый чек-лист «Первые шаги» (см. Дорожная карта).

Переключение кабинетов

Один пользователь (User) может состоять в нескольких клиентах/посредниках. Переключение активного кабинета — без повторного входа.

  • POST /switch (AccountSwitchController), сервис CabinetService. UI: CabinetSwitcher.vue.
  • Связано с тем, что client_memberships.user_id стал nullable (приглашённый сотрудник до привязки).

Аватары

У users и agent_staff добавлено поле avatar. Загрузка — на странице профиля (profile/avatar), и у клиента, и у посредника.

Сканер

GET /agent/scan (ScanController::resolve) — разрешение отсканированного кода (товар/заказ/ячейка) для быстрого перехода. Дополняет печать этикеток на консолидации.

Категории товаров

product_categories (agent_id? — системная/своя, name, sort, active) + order_items.product_category. Системные категории (одежда/обувь/стройматериалы и пр.) засеяны; посредник может добавить свои.

Тикеты обратной связи

Кнопка обратной связи у посредника и клиента: пользователь выделяет проблемный элемент, оставляет комментарий — формируется тикет со скриншотом (html2canvas), пометкой элемента и контекстом страницы (url/route/компонент/viewport/locale).

  • Таблица feedback_tickets (см. Справочник).
  • Комментарий автоматически переводится на RU (comment_ru) — автор может писать на CN/EN.
  • Обработка в админке (Filament): категория, приоритет, ответственный админ, внутренняя заметка, ответ автору (уходит ему в мессенджер), отметка «решено» с уведомлением.

Фавиконы площадок

site_favicons (domain unique, path, ok, fetched_at) — кэш иконок сайтов товаров (фавикон-прокси), чтобы не дёргать внешние источники на каждый показ.

Глобальные настройки приложения

  • app_settings: простой key-value стор (key unique, value). Управление — Filament AppSettingsPage (раздел СРМ).