Files
MikrotikManager/docs/ux-ui-stage-11a.md
T

9.3 KiB
Raw Blame History

Этап 11А: пользователи и администрирование устройств

Статус: подготовка 2026-10-01. ReUI PRO/base-nova, существующие Frame, KpiStatGrid, Data Grid v9 и Sheet. Изменения последовательно, локальные коммиты без push.

Референсы и схемы

Область Референс Схема
Обзор раздела Settings 16 / Stats 12 Источник → подтверждённая сводка → проблемы → действие
Таблицы Data Grid Filtering 2 Фильтры → объект → детали → результат API
Формы Sheet 8 Контекст → форма → проверка → подтверждённый результат / сохранённый черновик
[Источник и права]
         ↓
[Каталоги + свежесть] → [Ошибка: последние данные, явный повтор]
         ↓
[Объект / детали] → [Форма с черновиком]
                             ↓
                [Подтверждение API / частичное выполнение]
                             ↓
                [Повторное чтение / восстановление контекста]

Карта реализации

Порядок Раздел / API Исходная проблема Точка завершения
1 Пользователи: /users, /servers Live начинает с INIT_USERS; Promise.all связывает независимые отказы; нет свежести и защиты смены источника Пустой/unknown/ошибка различаются, последний снимок и read-only права
2 Профиль и привязки: /users/:id, /bindings Многошаговое сохранение, нет lock удаления, refresh ошибка проглатывается; Sheet эффект может сбросить форму Частичное выполнение явно показано, повтор без дублей, успешный API отдельно от refresh
3 Interface catalog Ошибка превращается в []; каталог может сохранять прежнее устройство; peer ошибки требуют проверки Контекст и доступность, точный выбор, сохранение формы
4 Пользователи UI «Пригласить» фактически создаёт профиль; icon actions без имён, raw colors, доступность формы ПК/390/320, клавиатура, понятные подписи/токены
5 Контейнеры Отказ очищает прошлые объекты, Promise.all и операции требуют защиты/валидации Состояния снимка, реальные подтверждения действий, контекст/права
6 Сертификаты Сводка, доступность экспорта/операций и конкретный сервер требуют аудита Неизвестные статусы, действительный экспорт и ошибки API
7 Резервирование Общий Promise.all четырёх источников, polling задач/интеграций и сохранение требуют аудита Частичные сбои и состояние job без ложного завершения, форма сохранена
8 Приёмка 11А Сквозные действия и общие компоненты Профильная регрессия, production build, снимки, внешние ограничения

Границы

  • Права пользователя в профиле и Portal JWT авторизация приложения — разные существующие контракты; не менять правила выдачи доступа в UX исправлениях.
  • Сохранение профиля и привязок сейчас несколько HTTP запросов. Не обещать атомарность и не повторять подтверждённое создание после частичного отказа.
  • Серверный каталог — зависимость формы прав/привязок; отсутствие доступа или отказ не должен обнулять сохранённые разрешения.
  • Backend/моки не подтверждают реальный Portal, PostgreSQL, RouterOS, выдачу сертификатов, восстановление backup или доступность S3. Реальную приёмку перечислять отдельно.
  • Оповещения, сбор данных, интеграции, релизы, настройки и расписание диагностики — 11Б.

Блок 11А.2 — достоверная загрузка пользователей (2026-10-01)

  • Live не содержит INIT_USERS/демо серверов до API. Пользователи и серверы читаются независимо: быстрый список появляется до медленного каталога; отказ одной зависимости сохраняет другую и последние подтверждённые данные. Unknown KPI — —, подтверждённый пустой список — отдельное состояние.
  • Получение пользователей имеет время браузерного чтения и ручной повтор. Смена backend/mode размонтирует прежний контекст, читатели отменяются и поздние ответы не меняют новый экран. Схемы обязательны; дубли ID отклоняются.
  • Права users read/write и server read проверены перед запросами/действиями. Без подтверждённых актуальных каталогов редактирование приостановлено; неизвестный общий серверный каталог не показывается числом 0. Icon действия получили имена; «Пригласить» заменено фактическим «Добавить пользователя».
  • 12 data E2E + 4 context E2E, профильный lint и TypeScript прошли. Production frontend прошёл в приёмочной сборке после подготовки нового контекста; дальнейшие операции ещё не приняты. Mock ветка подписана как локальное демо.
  • Далее 11А.3: lock удаления/сохранения, сохранение диалога/черновика при ошибке, поздние мутации и отдельное подтверждение API от refresh. Затем частичное сохранение привязок без дублей и interface catalog. Реальные Portal/БД ещё не проверены.

Блок 11А.3 — подтверждённое удаление пользователя (2026-10-01)

  • DELETE имеет single-flight lock, AbortSignal/30s срок и защиту позднего ответа после размонтирования. Ожидание блокирует повтор/отмену диалога; ошибка остаётся в диалоге с возможностью повторить, target не теряется.
  • Удаление требует существующий backend контракт HTTP 204; успешный 200 с произвольным телом не принимается. Подтверждённая строка удаляется сразу, а отказ последующего refresh не называется отказом удаления: API результат и необходимость повторного чтения показаны отдельно.
  • 17 data/operations E2E + 6 context E2E, TypeScript и профильный lint прошли. Проверены 403/503/неверный ответ, двойной click, Escape, refresh error, поздний success/error прежнего backend. Созданы общие HTTP-фикстуры пользователей.
  • Далее 11А.4: безопасное сохранение профиля/черновика и частичных привязок, без повторного создания при подтверждённом первом шаге. Сохранение ещё не принято; interface catalog и визуальная приёмка далее. Реальный Portal/БД не проверен.