frontend: move the second-level menu to the left of the content

The rail was on the right. It now leads the row instead, so the section menu
reads as a conventional left-hand navigation column.

Which side it lands on was never a stylesheet decision: `.app-body` is a flex
row and the aside is simply its first child now, with `.app-main` after it.
The only style change that had to follow is the rail's separator, which moves
from its left edge to its right, plus the collapse tooltip's placement.

The global shell contract in base.css now says this explicitly, so the next
person to move the rail knows the side comes from DOM order rather than from a
rule in that file.
This commit is contained in:
2026-09-18 16:35:24 +08:00
parent 9ded3bd574
commit 4b826567b8
4 changed files with 28 additions and 18 deletions
+10 -6
View File
@@ -147,18 +147,22 @@ Conventions worth knowing:
```
┌──────────────────────────────────────────────────────────┐
│ [book mark] paper-doc 论文 模板 [mark] │ header
├─────────────────────────────────────────────────────────┤
│ 模板配置 │ second-level
│ <RouterView> │ 模板列表 │ menu, right
│ 字段管理
└─────────────────────────────────────────────────────────┘
├─────────────────────────────────────────────────────────┤
模板配置 │ │ second-level
│ 模板列表 │ <RouterView> │ menu, left
字段管理 │
└─────────────────────────────────────────────────────────┘
```
The mark appears at both ends of the header. The second-level menu sits on the
**right** and is driven entirely by `route.meta.section`, so a route declares
**left** and is driven entirely by `route.meta.section`, so a route declares
which menu it belongs to and deep links render correctly on first paint. Routes
without a `section` (the welcome page) show no menu.
Which side the menu lands on follows from its DOM order inside the flex row in
`App.vue` — first child, left — so moving it is a one-block change there rather
than a stylesheet override.
### Routes
| Path | View | Section |