From 1530d3a2f4c619fdb731f6d70edd286fc5e34bd5 Mon Sep 17 00:00:00 2001 From: xfy Date: Fri, 3 Jul 2026 10:46:57 +0800 Subject: [PATCH] =?UTF-8?q?style(admin/posts):=20=E9=A1=B6=E9=83=A8?= =?UTF-8?q?=E9=87=8D=E5=BB=BA=E6=8C=89=E9=92=AE=20loading=20=E7=94=A8=20sp?= =?UTF-8?q?inner=20=E8=A6=86=E7=9B=96=E6=96=87=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 工具条「重建内容」「重建全部」按钮 loading 时由「重建中...」文案 改为 spinner 居中覆盖、文字 opacity-40 衬底,与行内重建按钮的 loading 样式统一。 --- src/pages/admin/posts.rs | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/pages/admin/posts.rs b/src/pages/admin/posts.rs index 201041d..ccd2837 100644 --- a/src/pages/admin/posts.rs +++ b/src/pages/admin/posts.rs @@ -236,14 +236,19 @@ fn RebuildCacheBar( div { class: "flex items-center gap-3", div { class: "group relative", button { - class: if rebuilding() { "px-4 py-2 rounded-full text-sm font-medium cursor-not-allowed text-paper-secondary border border-paper-border" } else { "px-4 py-2 rounded-full text-sm font-medium cursor-pointer text-paper-primary border border-paper-border hover:border-paper-accent hover:text-paper-accent transition-all" }, + class: if rebuilding() { "relative px-4 py-2 rounded-full text-sm font-medium cursor-not-allowed text-paper-secondary border border-paper-border" } else { "px-4 py-2 rounded-full text-sm font-medium cursor-pointer text-paper-primary border border-paper-border hover:border-paper-accent hover:text-paper-accent transition-all" }, disabled: rebuilding(), onclick: move |_| do_rebuild(false), - if rebuilding() { - "重建中..." - } else { + span { + class: if rebuilding() { "opacity-40" } else { "" }, "重建内容" } + if rebuilding() { + span { + class: "absolute inset-0 flex items-center justify-center", + dangerous_inner_html: SPINNER_SVG, + } + } } div { class: "pointer-events-none absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-1.5 text-xs font-medium whitespace-nowrap rounded-lg opacity-0 group-hover:opacity-100 transition-opacity duration-200 bg-paper-primary text-paper-theme shadow-lg z-50", "重建 content_html 为空的文章渲染缓存" @@ -251,14 +256,19 @@ fn RebuildCacheBar( } div { class: "group relative", button { - class: if rebuilding() { "px-4 py-2 rounded-full text-sm font-medium cursor-not-allowed text-paper-secondary border border-paper-border" } else { "px-4 py-2 rounded-full text-sm font-medium cursor-pointer text-paper-primary border border-paper-border hover:border-paper-accent hover:text-paper-accent transition-all" }, + class: if rebuilding() { "relative px-4 py-2 rounded-full text-sm font-medium cursor-not-allowed text-paper-secondary border border-paper-border" } else { "px-4 py-2 rounded-full text-sm font-medium cursor-pointer text-paper-primary border border-paper-border hover:border-paper-accent hover:text-paper-accent transition-all" }, disabled: rebuilding(), onclick: move |_| do_rebuild(true), - if rebuilding() { - "重建中..." - } else { + span { + class: if rebuilding() { "opacity-40" } else { "" }, "重建全部" } + if rebuilding() { + span { + class: "absolute inset-0 flex items-center justify-center", + dangerous_inner_html: SPINNER_SVG, + } + } } div { class: "pointer-events-none absolute top-full left-1/2 -translate-x-1/2 mt-2 px-3 py-1.5 text-xs font-medium whitespace-nowrap rounded-lg opacity-0 group-hover:opacity-100 transition-opacity duration-200 bg-paper-primary text-paper-theme shadow-lg z-50", "重建所有文章的渲染缓存(含已有内容)"