From c550289527bee89c92df3a42a19ce015d9849ddd Mon Sep 17 00:00:00 2001 From: Zichao Lin Date: Sun, 5 Jul 2026 23:56:28 +0800 Subject: [PATCH] refactor(ui): merge showcase settings into settings page tab, fix profile showcase GET route, fix layout --- app/routers/web.py | 39 +++++++++------ app/templates/profile_showcase.html | 57 ++++++++++++++++++++++ app/templates/profiles.html | 3 +- app/templates/settings.html | 73 +++++++++++++++++++++++++++-- 4 files changed, 151 insertions(+), 21 deletions(-) create mode 100644 app/templates/profile_showcase.html diff --git a/app/routers/web.py b/app/routers/web.py index c464d4f..5ed4dee 100644 --- a/app/routers/web.py +++ b/app/routers/web.py @@ -77,8 +77,10 @@ def login_submit( def settings_page( request: Request, user: User = Depends(get_current_user_web), + db: Session = Depends(get_db), ): - return templates.TemplateResponse("settings.html", {"request": request, "user": user}) + profiles = db.query(Profile).filter(Profile.user_id == user.id).all() + return templates.TemplateResponse("settings.html", {"request": request, "user": user, "profiles": profiles}) @router.post("/settings/change-username") @@ -458,16 +460,9 @@ async def upload_image( # ---------- Showcase ---------- -@router.get("/showcase/manage", response_class=HTMLResponse) -def showcase_manage(request: Request, user: User = Depends(get_current_user_web), db: Session = Depends(get_db)): - profiles = db.query(Profile).filter(Profile.user_id == user.id).all() - profile_cards = {} - for p in profiles: - cards = db.query(Postcard).filter(Postcard.profile_id == p.id).all() - profile_cards[p.id] = cards - return templates.TemplateResponse("showcase_manage.html", { - "request": request, "user": user, "profiles": profiles, "profile_cards": profile_cards, - }) +@router.get("/showcase/manage") +def showcase_manage_redirect(user: User = Depends(get_current_user_web)): + return _redirect("/settings?tab=showcase") @router.post("/showcase/manage") @@ -475,7 +470,23 @@ def showcase_manage_save(request: Request, showcase_mode: str = Form("profile"), if showcase_mode in ("profile", "flat"): user.showcase_mode = showcase_mode db.commit() - return _redirect("/showcase/manage") + return _redirect("/settings?tab=showcase") + + +@router.get("/profiles/{profile_id}/showcase", response_class=HTMLResponse) +def profile_showcase_page( + request: Request, + profile_id: int, + user: User = Depends(get_current_user_web), + db: Session = Depends(get_db), +): + p = db.query(Profile).filter(Profile.id == profile_id, Profile.user_id == user.id).first() + if not p: + return _redirect("/settings?tab=showcase") + cards = db.query(Postcard).filter(Postcard.profile_id == profile_id).all() + return templates.TemplateResponse("profile_showcase.html", { + "request": request, "user": user, "profile": p, "cards": cards, + }) @router.post("/profiles/{profile_id}/showcase") @@ -492,7 +503,7 @@ def profile_showcase_save( if showcase_visible in ("sent", "received", "both"): p.showcase_visible = showcase_visible db.commit() - return _redirect("/showcase/manage") + return _redirect("/settings?tab=showcase") @router.post("/postcards/{postcard_id}/showcase-toggle") @@ -503,7 +514,7 @@ def postcard_showcase_toggle(postcard_id: int, showcase_hidden: str = Form(""), if profile and profile.showcase_enabled: pc.showcase_hidden = showcase_hidden == "1" db.commit() - return _redirect("/showcase/manage") + return _redirect("/settings?tab=showcase") @router.get("/u/{username}", response_class=HTMLResponse) diff --git a/app/templates/profile_showcase.html b/app/templates/profile_showcase.html new file mode 100644 index 0000000..e402375 --- /dev/null +++ b/app/templates/profile_showcase.html @@ -0,0 +1,57 @@ +{% extends "base.html" %} +{% block title %}{{ profile.nickname }} 展示设置 - 明信片管理器{% endblock %} +{% block content %} +
+
+ +

{{ profile.nickname }} 展示设置

+
+
+ +
+
+
+ + +
+
+ + +
+
+
+ +{% if profile.showcase_enabled and cards %} +
+

单张明信片展示控制

+
+ {% for pc in cards %} +
+ {{ pc.card_number }} + + {{ {'sent':'寄出','delivered':'送达','received':'收到'}.get(pc.status, pc.status) }} + + + {% if pc.showcase_hidden %}隐藏{% endif %} +
+ {% endfor %} +
+
+{% endif %} + +{% if not profile.showcase_enabled %} +
+

开启展示后可控制单张明信片的可见性

+
+{% endif %} +{% endblock %} diff --git a/app/templates/profiles.html b/app/templates/profiles.html index 4143b45..43abb3f 100644 --- a/app/templates/profiles.html +++ b/app/templates/profiles.html @@ -51,8 +51,7 @@