From 8845577958dd7ec210efd5d42b041598fd0bb54a Mon Sep 17 00:00:00 2001 From: xfy Date: Wed, 3 Jun 2026 18:35:36 +0800 Subject: [PATCH] feat: wrap frontend routes in FrontendLayout via router #[layout] attribute MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - All public-facing pages (Home, Archives, Tags, PostDetail, Search, About, HomePage) are now wrapped in #[layout(FrontendLayout)] - Header and Footer stay mounted during page transitions, only the content swaps — eliminates full-page flash/flicker - Login and Register routes moved outside FrontendLayout since they are standalone pages without navigation header - Route order restructured: FrontendLayout block → admin nest → auth pages - Note: #[end_layout]/#[end_nest] must have a variant after them in the enum, otherwise the Routable derive macro fails with 'expected identifier' --- src/router.rs | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/router.rs b/src/router.rs index bfbbee5..0e9e0fd 100644 --- a/src/router.rs +++ b/src/router.rs @@ -2,6 +2,7 @@ use dioxus::prelude::*; use std::sync::Arc; use crate::components::admin_layout::AdminLayout; +use crate::components::frontend_layout::FrontendLayout; use crate::context::UserContext; use crate::pages::about::About; use crate::pages::admin::{Admin, Posts, Write}; @@ -17,14 +18,24 @@ use crate::theme::{use_theme_provider, Theme, ThemePreload}; #[derive(Clone, Routable, Debug, PartialEq)] #[rustfmt::skip] pub enum Route { - #[route("/")] - Home {}, - #[route("/page/:page")] - HomePage { page: i32 }, - #[route("/login")] - Login {}, - #[route("/register")] - Register {}, + #[layout(FrontendLayout)] + #[route("/")] + Home {}, + #[route("/page/:page")] + HomePage { page: i32 }, + #[route("/archives")] + Archives {}, + #[route("/tags")] + Tags {}, + #[route("/tags/:tag")] + TagDetail { tag: String }, + #[route("/post/:slug")] + PostDetail { slug: String }, + #[route("/search")] + Search {}, + #[route("/about")] + About {}, + #[end_layout] #[nest("/admin")] #[layout(AdminLayout)] @@ -37,18 +48,10 @@ pub enum Route { #[end_layout] #[end_nest] - #[route("/archives")] - Archives {}, - #[route("/tags")] - Tags {}, - #[route("/tags/:tag")] - TagDetail { tag: String }, - #[route("/post/:slug")] - PostDetail { slug: String }, - #[route("/search")] - Search {}, - #[route("/about")] - About {}, + #[route("/login")] + Login {}, + #[route("/register")] + Register {}, } #[component]