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}