Задача 036: меню пользователя в шапке
Логин в шапке — триггер выпадающего списка «Сменить пароль» / «Выйти» в общем стиле списков (popMenu, row-pop) вместо отдельных кнопок; шрифт и место прежней кнопки «Выйти». Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8384c2c311
commit
c852f47f09
5 files changed
+71
-2
No files matched your search
@@ -0,0 +1,42 @@
|
||||
# Меню пользователя в шапке: логин с выпадающим списком (изменение 036)
|
||||
|
||||
## Context
|
||||
Сейчас справа в шапке (`web/app.js::shell`) три элемента: серый логин (`span.user`) и две кнопки `btn ghost` — «Сменить пароль» и «Выйти».
|
||||
Их нужно свернуть в один элемент. В шапке остаётся только логин; по нажатию раскрывается список «Сменить пароль» / «Выйти»
|
||||
в том же стиле, что все выпадающие списки сайта (`popMenu` + `.pop`). Логин стоит на месте нынешней кнопки «Выйти»,
|
||||
шрифт тот же, что у неё: `.btn.ghost` — `500 14px var(--sans)`, цвет `--muted`.
|
||||
|
||||
## Изменения — `web/app.js`
|
||||
- `shell()`: вместо `span.user` и двух `btn(...)` — один триггер по образцу `bulkMenu`/`filterBtn`:
|
||||
```
|
||||
<span class="rel user-menu"><button type="button" class="btn ghost" data-action="menu" data-menu="user" title="<роль>">
|
||||
<логин>${I.chevD(14)}</button>${popMenu("user", [{label:"Сменить пароль", value:"pw"}, {label:"Выйти", value:"logout"}], "row-pop")}</span>
|
||||
```
|
||||
- `btn ghost` даёт шрифт и цвет нынешней «Выйти»; шеврон — как у остальных триггеров списков.
|
||||
- `row-pop` (`top:40px; right:0`) выравнивает список по правому краю, чтобы он не уходил за край окна.
|
||||
- Роль остаётся во всплывающей подсказке (`title`), как сейчас у `span.user`.
|
||||
- `actions.pick`: ветка `id === "user"` — снять открытый `.pop` (как для `rowActions`), затем `value === "logout"` → `actions.logout()`,
|
||||
иначе → `passwordDialog()`. Существующие действия `logout` и `pw-change` не меняются.
|
||||
- Открытие и закрытие по клику вне списка, навигация стрелками — уже есть в общих обработчиках `menu`/`.pop` (≈стр. 1036, 1059), новых не нужно.
|
||||
- Комментарии — «изменение 036».
|
||||
|
||||
## Изменения — `web/styles.css`
|
||||
- Удалить неиспользуемое правило `.appbar .user`.
|
||||
- При необходимости `.user-menu .pop{min-width:180px}`, если `row-pop` уже задаёт ширину — не добавлять.
|
||||
|
||||
## Документация (правила проекта)
|
||||
- `docs/changes/036-user-menu/PLAN.md` — этот план; по завершении — `SUMMARY.md`.
|
||||
- `README.md`, «Интерфейс»: логин в шапке раскрывает меню «Сменить пароль» / «Выйти»; строка 036 в истории.
|
||||
|
||||
## Исполнение
|
||||
По принятой схеме: правки делает агент на Sonnet (только `node --check`, без стенда); ревью, пересборка стенда, проверки и SUMMARY — моя часть.
|
||||
Тесты не нужны: API не меняется, UI автотестами не покрыт.
|
||||
|
||||
## Проверка
|
||||
- `node --check web/app.js`; пересборка `docker compose -p ipam_control_006 up -d --build app`; стенд отдаёт новый `app.js`.
|
||||
- В браузере на `https://rxipam.rxmsk.ru` (или `:8088`):
|
||||
- в шапке справа только логин с шевроном, шрифт как у прежней «Выйти»;
|
||||
- клик раскрывает список в стиле остальных, выровненный вправо;
|
||||
- «Сменить пароль» открывает диалог, «Выйти» — экран входа;
|
||||
- клик вне списка и Esc закрывают его, стрелки перемещают фокус.
|
||||
- Визуальную проверку выполняет пользователь (либо через `claude-in-chrome`, если он подключён).
|
||||
Reference in new issue
Block a user