yggdrasil/src/router.rs
xfy 06302b14de 实现 PaperMod 风格标签页面:标签列表 + 标签详情
- 新增 /tags 页面:展示所有标签及文章数量,按字母排序
- 新增 /tags/:tag 动态路由:展示该标签下的文章列表
- Post/POSTS 改为 pub,供 tags 模块复用
- NavItem 高亮也匹配 TagDetailPage
- 修复 CSS 路径为绝对路径,解决子路由下样式失效

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 13:43:38 +08:00

59 lines
1.2 KiB
Rust

use dioxus::prelude::*;
use crate::pages::admin::AdminPage;
use crate::pages::archives::ArchivesPage;
use crate::pages::home::HomePage;
use crate::pages::login::LoginPage;
use crate::pages::register::RegisterPage;
use crate::pages::tags::{TagsPage, TagDetailPage};
use crate::theme::{Theme, ThemePreload, use_theme_provider};
#[derive(Clone, Routable, Debug, PartialEq)]
pub enum Route {
#[route("/")]
HomePage {},
#[route("/login")]
LoginPage {},
#[route("/register")]
RegisterPage {},
#[route("/admin")]
AdminPage {},
#[route("/archives")]
ArchivesPage {},
#[route("/tags")]
TagsPage {},
#[route("/tags/:tag")]
TagDetailPage { tag: String },
#[route("/search")]
SearchPage {},
#[route("/about")]
AboutPage {},
}
#[component]
pub fn AppRouter() -> Element {
let theme = use_theme_provider();
let theme_class = match theme() {
Theme::Dark => "dark",
Theme::Light => "",
};
rsx! {
div {
class: "{theme_class}",
ThemePreload {}
Router::<Route> {}
}
}
}
#[component]
pub fn SearchPage() -> Element {
rsx! { "Search" }
}
#[component]
pub fn AboutPage() -> Element {
rsx! { "About" }
}