bdbc874f41
Чекбокс «Тепловая карта» — фоновый слой-заливка ячеек сетки заданий по важности (cool→hot), источник GET /api/pcp-request/v1/cells/priority-map (cellsApi + drawHeatmap). Heatmap — полноценный слой MapPolygon (layer "heatmap", importance/cellNum), участвует в spatial-индексе и chooser, рисуется под контурами плана/заявок. Клик по объекту открывает правый инспектор ComplexInfoPanel (по аналогии с редактором): карточки ячейки приоритета, включения комплексного плана и заявки; при наложении — список объектов под точкой клика с раскрытием. При включённой тепловой карте ячейка всегда идёт первой в списке и раскрыта по умолчанию. Бэклог #44 отмечен сделанным.
pcp-tgu-ui-service
Фронтенд «ТГУ — Операции». Сервис собран с нуля на чистой базе исходного
pcp-tgu-ops-ui (React + Vite, своя тёмная тема), в которую добавлены только две
вещи с платформы NStart:
- Авторизация — headless-ядро
@nstart/auth(New Start ID / Keycloak): токен, login, logout, refresh. Без@nstart/ui— UI-компоненты библиотеки (ProfilePage/UserPanel) намеренно не подключены, экраны ТГУ остаются на своём UI. - Сборка и деплой — платформенный контракт: hardened
Dockerfile(non-root, healthcheck), runtime-config (config.jsизAPP_*),docker-bake.hcl,.gitlab-ci.yml(build → trivy/semgrep → push в registry),nginx.conf.
В отличие от pcp-tgu-ops-ui-template, здесь нет демо-страниц шаблона, @nstart/ui,
Tailwind, i18n и борьбы тем — только рабочий ТГУ + auth + контур сборки/деплоя.
Авторизация (headless)
- Режим выбирается переменной
authMode(anonymous|new-start-id). anonymous(дефолт): приложение открывается сразу, токена нет, заголовокAuthorizationне добавляется — поведение как у исходного сервиса.new-start-id: вход редиректом на New Start ID; токен подставляется в каждый запросsrc/api/*через мостapiFetch+AuthTokenBridge. В шапке появляется кнопка «Выйти».- Конфиг входа берётся из
src/config/env.ts(runtimeAPP_*имеют приоритет над buildVITE_*).
Конфигурация окружения
| Назначение | DEV (npm run dev) |
PROD (Docker) |
|---|---|---|
| источник | .env (VITE_*) |
APP_* контейнера → config.js |
| api | VITE_API_URL |
APP_API_URL |
| режим auth | VITE_AUTH_MODE |
APP_AUTH_MODE |
| New Start ID | VITE_NEW_START_ID_* |
APP_NEW_START_ID_* |
Доступ к приватному реестру @nstart/*: scope @nstart:registry=... должен быть в
~/.npmrc (или в конфиге CI-раннера). Проектный .npmrc задаёт только
min-release-age=7.
Запуск
cp .env.example .env # режим anonymous, открывается сразу
npm install # нужен доступ к repo.nstart.cloud (scope @nstart)
npm run dev # http://localhost:5174
npm run build # tsc -b + vite build
npm run test # vitest
Прод-прокси (осталось настроить)
В nginx.conf активный /api/ — заглушка (127.0.0.1:8000), а
блоки pcp-* закомментированы (зеркало server.proxy из vite.config.ts).
Подставьте реальные UPSTREAM_* кластера и раскомментируйте, либо вынесите
маршрутизацию на gateway/ingress.