From 8cd5ddb4006c498e3ccf5f8a65f853f0f35a6c98 Mon Sep 17 00:00:00 2001
From: Color2333 <1552429809@qq.com>
Date: Sat, 10 Oct 2026 10:50:16 +0800
Subject: [PATCH] =?UTF-8?q?feat(frontend):=20=E8=AE=BE=E8=AE=A1=E4=BB=A4?=
=?UTF-8?q?=E7=89=8C=20v3=20=E7=B2=BE=E4=BF=AE=E2=80=94=E2=80=94=E6=9A=96?=
=?UTF-8?q?=E9=98=B4=E5=BD=B1/=E5=A2=A8=E8=89=B2=E4=BA=94=E9=98=B6/?=
=?UTF-8?q?=E5=BC=B9=E7=B0=A7=E5=8A=A8=E6=95=88/=E7=B3=BB=E7=BB=9F?=
=?UTF-8?q?=E4=B8=BB=E9=A2=98=E8=B7=9F=E9=9A=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 调色板:品牌橙深化为陶土色阶,纸面分层暖白,墨色五阶层级
- 阴影体系:暖棕灰调 xs→xl 五档(暖色主题高级感的关键)
- 动效:弹簧曲线 --ease-spring、骨架屏微光、scale-in、主题切换平滑过渡
- 侧边栏:新对话渐变按钮、激活项左缘指示条、首次访问跟随系统暗色、v2.1
- 旧任务 'Py' 标签改为 '存档'(全部执行已是 Go)
- 文本选中品牌化、:focus-visible 焦点环、tabular-nums 数字排版
---
frontend/src/components/Sidebar.tsx | 14 +-
frontend/src/index.css | 261 ++++++++++++++++++++++------
frontend/src/pages/Dashboard.tsx | 2 +-
frontend/src/pages/JobMonitor.tsx | 2 +-
4 files changed, 216 insertions(+), 63 deletions(-)
diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx
index 76c128e..84c65d6 100644
--- a/frontend/src/components/Sidebar.tsx
+++ b/frontend/src/components/Sidebar.tsx
@@ -66,10 +66,14 @@ const TOOL_GROUPS: { label: string; items: { to: string; icon: typeof Search; la
function useDarkMode() {
const [dark, setDark] = useState(() => {
if (typeof window === "undefined") return false;
- return localStorage.getItem("theme") === "dark";
+ const saved = localStorage.getItem("theme");
+ if (saved) return saved === "dark";
+ // 首次访问跟随系统偏好
+ return window.matchMedia?.("(prefers-color-scheme: dark)").matches ?? false;
});
useEffect(() => {
const root = document.documentElement;
+ root.classList.add("theme-transition");
if (dark) {
root.classList.add("dark");
localStorage.setItem("theme", "dark");
@@ -77,6 +81,8 @@ function useDarkMode() {
root.classList.remove("dark");
localStorage.setItem("theme", "light");
}
+ const t = setTimeout(() => root.classList.remove("theme-transition"), 300);
+ return () => clearTimeout(t);
}, [dark]);
return [dark, () => setDark((d) => !d)] as const;
}
@@ -181,7 +187,7 @@ export default function Sidebar() {
- v0.2.0
+ v2.1
diff --git a/frontend/src/pages/JobMonitor.tsx b/frontend/src/pages/JobMonitor.tsx
index 2ad648d..71c4790 100644
--- a/frontend/src/pages/JobMonitor.tsx
+++ b/frontend/src/pages/JobMonitor.tsx
@@ -130,7 +130,7 @@ export default function JobMonitor() {
: "bg-orange-100 text-orange-700"
}`}
>
- {(j as any).authority === "go_core" ? "Go" : "Py"}
+ {(j as any).authority === "go_core" ? "Go" : "存档"}
)}
{j.id}