fix(admin): 将系统管理菜单排到侧栏最后

系统管理应位于业务菜单之后,调整种子排序并在启动时同步已有库数据。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
wuzilongandCursor committed 2026-11-10 18:19:30 +08:00
1 parent cb4ecd4349
commit d96f7a2238
3 files changed
+29 -1

No files matched your search

+17 -1
View File
@@ -104,6 +104,22 @@ def _find_resource(db: Session, parent_id: int | None, name: str) -> AdminResour
return db.scalars(stmt.order_by(AdminResource.id.asc())).first()
# Keep system management after all business top-level menus.
SYSTEM_MENU_SORT = 99
def ensure_system_menu_order(db: Session) -> None:
"""Move existing System directory to the end of the sidebar without recreating children."""
directory = db.scalar(
select(AdminResource).where(AdminResource.parent_id.is_(None), AdminResource.name == "System")
)
if directory is None:
return
if directory.sort != SYSTEM_MENU_SORT:
directory.sort = SYSTEM_MENU_SORT
db.flush()
def _ensure_resource(
db: Session,
*,
@@ -861,7 +877,7 @@ def seed_superuser(db: Session, username: str, password: str) -> None:
component="",
icon="ri:settings-3-line",
permission="",
sort=1,
sort=SYSTEM_MENU_SORT,
visible=True,
)
resource_ids = [directory.id]
+2
View File
@@ -57,6 +57,7 @@ def prepare_runtime() -> None:
ensure_report_menu,
ensure_discipline_menu,
ensure_edu_menu,
ensure_system_menu_order,
ensure_tech_menu,
)
@@ -70,6 +71,7 @@ def prepare_runtime() -> None:
ensure_discipline_menu(db)
ensure_tech_menu(db)
ensure_edu_menu(db)
ensure_system_menu_order(db)
db.commit()
finally:
db.close()
+10
View File
@@ -704,6 +704,16 @@ def test_seed_superuser_is_idempotent(client: TestClient):
assert directory is not None
assert directory.path == "/system"
assert directory.icon == "ri:settings-3-line"
assert directory.sort == 99
other_top = db.scalars(
select(AdminResource).where(
AdminResource.parent_id.is_(None),
AdminResource.name != "System",
AdminResource.status == "active",
)
).all()
assert other_top
assert directory.sort > max(item.sort for item in other_top)
page = db.scalar(select(AdminResource).where(AdminResource.parent_id == directory.id, AdminResource.name == "User"))
assert page is not None
assert page.component == "/system/user"