From 58e9dbc5b787196344ba1509a569dad4e593316e Mon Sep 17 00:00:00 2001 From: xfy Date: Thu, 4 Jun 2026 16:13:49 +0800 Subject: [PATCH] refactor: add status_label/status_class/formatted_date helpers to Post model --- src/models/post.rs | 14 ++++++++++++++ src/pages/admin/dashboard.rs | 17 +++-------------- src/pages/admin/posts.rs | 21 ++++----------------- 3 files changed, 21 insertions(+), 31 deletions(-) diff --git a/src/models/post.rs b/src/models/post.rs index cdfdba2..b60c581 100644 --- a/src/models/post.rs +++ b/src/models/post.rs @@ -54,6 +54,20 @@ impl Post { .map(|d| d.format("%Y-%m-%d").to_string()) .unwrap_or_else(|| self.created_at.format("%Y-%m-%d").to_string()) } + + pub fn status_label(&self) -> &'static str { + match self.status { + PostStatus::Published => "已发布", + PostStatus::Draft => "草稿", + } + } + + pub fn status_class(&self) -> &'static str { + match self.status { + PostStatus::Published => "text-green-600 dark:text-green-400", + PostStatus::Draft => "text-gray-400 dark:text-[#9b9c9d]", + } + } } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] diff --git a/src/pages/admin/dashboard.rs b/src/pages/admin/dashboard.rs index ee21a5f..0dc353f 100644 --- a/src/pages/admin/dashboard.rs +++ b/src/pages/admin/dashboard.rs @@ -98,20 +98,9 @@ fn StatCard(value: String, label: String) -> Element { #[component] fn RecentPostItem(post: Post) -> Element { - let date_str = post - .published_at - .map(|d| d.format("%Y-%m-%d").to_string()) - .unwrap_or_else(|| post.created_at.format("%Y-%m-%d").to_string()); - let status_label = if post.status == crate::models::post::PostStatus::Published { - "已发布" - } else { - "草稿" - }; - let status_class = if post.status == crate::models::post::PostStatus::Published { - "text-green-600 dark:text-green-400" - } else { - "text-gray-400 dark:text-[#9b9c9d]" - }; + let date_str = post.formatted_date(); + let status_label = post.status_label(); + let status_class = post.status_class(); rsx! { div { class: "flex justify-between items-center py-3 border-b border-gray-100 dark:border-[#333]", diff --git a/src/pages/admin/posts.rs b/src/pages/admin/posts.rs index c227d1f..5ae72f2 100644 --- a/src/pages/admin/posts.rs +++ b/src/pages/admin/posts.rs @@ -3,7 +3,7 @@ use dioxus::router::components::Link; use crate::api::posts::{delete_post, list_posts, CreatePostResponse, PostListResponse}; use crate::hooks::delayed_loading::use_delayed_loading; -use crate::models::post::{Post, PostStatus}; +use crate::models::post::Post; use crate::router::Route; #[component] @@ -103,22 +103,9 @@ pub fn Posts() -> Element { #[component] fn PostRow(post: Post, deleting: bool, on_delete: EventHandler) -> Element { - let date_str = post - .published_at - .map(|d| d.format("%Y-%m-%d").to_string()) - .unwrap_or_else(|| post.created_at.format("%Y-%m-%d").to_string()); - - let (status_label, status_class) = if post.status == PostStatus::Published { - ( - "已发布", - "bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-300", - ) - } else { - ( - "草稿", - "bg-gray-100 dark:bg-[#333] text-gray-600 dark:text-[#9b9c9d]", - ) - }; + let date_str = post.formatted_date(); + let status_label = post.status_label(); + let status_class = post.status_class(); rsx! { tr { class: "border-b border-gray-100 dark:border-[#333] last:border-0 hover:bg-gray-50 dark:hover:bg-[#2a2a2a] transition-colors",