Compare commits
9 Commits
373498870a
...
369b4838a3
| Author | SHA1 | Date | |
|---|---|---|---|
| 369b4838a3 | |||
| ae770cae3a | |||
| 23f0cc6222 | |||
| b366c00e74 | |||
| b666472193 | |||
| 3ade2569df | |||
| 40114b603c | |||
| 3f7d112898 | |||
| 528a79fb83 |
10
input.css
10
input.css
@ -334,6 +334,12 @@
|
|||||||
height: auto;
|
height: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dark .md-content img:not(.blur-img-placeholder):not(.blur-img-full),
|
||||||
|
.dark .md-content .blur-img,
|
||||||
|
.dark .lightbox-img {
|
||||||
|
filter: brightness(0.9);
|
||||||
|
}
|
||||||
|
|
||||||
.md-content-img-zoomable {
|
.md-content-img-zoomable {
|
||||||
cursor: zoom-in;
|
cursor: zoom-in;
|
||||||
transition: opacity 0.2s ease-out;
|
transition: opacity 0.2s ease-out;
|
||||||
@ -628,10 +634,6 @@
|
|||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 暗色模式灰底 */
|
|
||||||
.dark .blur-img {
|
|
||||||
background: var(--color-paper-code-bg, #2a2a2a);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes fadeIn {
|
@keyframes fadeIn {
|
||||||
|
|||||||
BIN
public/images/xiantiaoxiaogou_02.webp
Normal file
BIN
public/images/xiantiaoxiaogou_02.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 53 KiB |
@ -12,6 +12,7 @@ use dioxus::prelude::*;
|
|||||||
|
|
||||||
use crate::api::posts::{search_posts, PostListResponse};
|
use crate::api::posts::{search_posts, PostListResponse};
|
||||||
use crate::components::post_card::PostCard;
|
use crate::components::post_card::PostCard;
|
||||||
|
use crate::components::empty_state::EmptyState;
|
||||||
use crate::components::skeletons::delayed_skeleton::DelayedSkeleton;
|
use crate::components::skeletons::delayed_skeleton::DelayedSkeleton;
|
||||||
use crate::components::skeletons::search_skeleton::SearchSkeleton;
|
use crate::components::skeletons::search_skeleton::SearchSkeleton;
|
||||||
|
|
||||||
@ -72,7 +73,10 @@ pub fn Search() -> Element {
|
|||||||
DelayedSkeleton { SearchSkeleton {} }
|
DelayedSkeleton { SearchSkeleton {} }
|
||||||
} else if let Some(Ok(PostListResponse { posts, total: _ })) = search_res() {
|
} else if let Some(Ok(PostListResponse { posts, total: _ })) = search_res() {
|
||||||
if posts.is_empty() {
|
if posts.is_empty() {
|
||||||
div { class: "text-center text-paper-secondary py-20", "未找到相关文章" }
|
EmptyState {
|
||||||
|
title: "未找到相关文章",
|
||||||
|
description: "换个关键词再试一次吧",
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for post in posts.iter() {
|
for post in posts.iter() {
|
||||||
PostCard { key: "{post.id}", post: post.clone() }
|
PostCard { key: "{post.id}", post: post.clone() }
|
||||||
@ -80,6 +84,15 @@ pub fn Search() -> Element {
|
|||||||
}
|
}
|
||||||
} else if search_res().as_ref().map(|r| r.is_err()).unwrap_or(false) {
|
} else if search_res().as_ref().map(|r| r.is_err()).unwrap_or(false) {
|
||||||
div { class: "text-center text-red-500 dark:text-red-400 py-20", "搜索失败" }
|
div { class: "text-center text-red-500 dark:text-red-400 py-20", "搜索失败" }
|
||||||
|
} else {
|
||||||
|
div { class: "flex flex-col items-center justify-center mt-24 mb-12 page-enter",
|
||||||
|
img {
|
||||||
|
class: "w-56 h-auto rounded-lg select-none dark:brightness-90",
|
||||||
|
src: "/images/xiantiaoxiaogou_02.webp",
|
||||||
|
alt: "空状态提示",
|
||||||
|
draggable: "false",
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@ use crate::api::posts::{get_posts_by_tag, list_tags, PostListResponse, TagListRe
|
|||||||
use crate::components::post_card::PostCard;
|
use crate::components::post_card::PostCard;
|
||||||
use crate::components::skeletons::delayed_skeleton::DelayedSkeleton;
|
use crate::components::skeletons::delayed_skeleton::DelayedSkeleton;
|
||||||
use crate::components::skeletons::tags_skeleton::{TagDetailSkeleton, TagsSkeleton};
|
use crate::components::skeletons::tags_skeleton::{TagDetailSkeleton, TagsSkeleton};
|
||||||
|
use crate::components::empty_state::EmptyState;
|
||||||
use crate::router::Route;
|
use crate::router::Route;
|
||||||
|
|
||||||
/// 标签云页面组件,对应路由 `/tags`。
|
/// 标签云页面组件,对应路由 `/tags`。
|
||||||
@ -49,6 +50,14 @@ fn TagsContent() -> Element {
|
|||||||
|
|
||||||
match tags_data {
|
match tags_data {
|
||||||
Some(Ok(tags)) => {
|
Some(Ok(tags)) => {
|
||||||
|
if tags.is_empty() {
|
||||||
|
rsx! {
|
||||||
|
EmptyState {
|
||||||
|
title: "暂无标签",
|
||||||
|
description: "当前还没有任何标签。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
let total = tags.iter().map(|t| t.post_count).sum::<i64>();
|
let total = tags.iter().map(|t| t.post_count).sum::<i64>();
|
||||||
rsx! {
|
rsx! {
|
||||||
div { class: "mt-2 text-base text-paper-secondary",
|
div { class: "mt-2 text-base text-paper-secondary",
|
||||||
@ -74,6 +83,7 @@ fn TagsContent() -> Element {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Some(Err(_)) => {
|
Some(Err(_)) => {
|
||||||
rsx! {
|
rsx! {
|
||||||
div { class: "text-center text-red-500 dark:text-red-400 py-20", "加载失败" }
|
div { class: "text-center text-red-500 dark:text-red-400 py-20", "加载失败" }
|
||||||
@ -116,17 +126,28 @@ fn TagDetailContent(tag: String) -> Element {
|
|||||||
|
|
||||||
match posts_data {
|
match posts_data {
|
||||||
Some(Ok((posts, total))) => {
|
Some(Ok((posts, total))) => {
|
||||||
|
if posts.is_empty() {
|
||||||
rsx! {
|
rsx! {
|
||||||
div { class: "mt-2 text-base text-paper-secondary",
|
EmptyState {
|
||||||
|
title: "暂无文章",
|
||||||
|
description: "该标签下还没有发布任何文章。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rsx! {
|
||||||
|
div { class: "mt-2 mb-8 text-base text-paper-secondary",
|
||||||
"共 "
|
"共 "
|
||||||
span { class: "font-medium text-paper-primary", "{total}" }
|
span { class: "font-medium text-paper-primary", "{total}" }
|
||||||
" 篇文章"
|
" 篇文章"
|
||||||
}
|
}
|
||||||
|
div { class: "mt-8",
|
||||||
for post in posts.iter() {
|
for post in posts.iter() {
|
||||||
PostCard { key: "{post.id}", post: post.clone() }
|
PostCard { key: "{post.id}", post: post.clone() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some(Err(_)) => {
|
Some(Err(_)) => {
|
||||||
rsx! {
|
rsx! {
|
||||||
div { class: "text-center text-red-500 dark:text-red-400 py-20", "加载失败" }
|
div { class: "text-center text-red-500 dark:text-red-400 py-20", "加载失败" }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user