From 3f96c9c6502243b06efd4bb34a189e72e3a5557c Mon Sep 17 00:00:00 2001
From: yearning <10538594+wangweifeng1999@user.noreply.gitee.com>
Date: 星期一, 28 九月 2026 19:24:55 +0800
Subject: [PATCH] 复制项目

---
 frontend/src/systemSettings.tsx |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/frontend/src/systemSettings.tsx b/frontend/src/systemSettings.tsx
new file mode 100644
index 0000000..b4b3233
--- /dev/null
+++ b/frontend/src/systemSettings.tsx
@@ -0,0 +1,52 @@
+import { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react";
+import { api } from "./api";
+
+export type SystemSettings = {
+  system_name: string;
+  logo_url: string | null;
+};
+
+const DEFAULT: SystemSettings = {
+  system_name: "鑰冭瘯闃呭嵎绯荤粺",
+  logo_url: null,
+};
+
+const SystemSettingsContext = createContext<{
+  settings: SystemSettings;
+  logoCacheKey: number;
+  refresh: () => Promise<void>;
+}>({ settings: DEFAULT, logoCacheKey: 0, refresh: async () => {} });
+
+export function SystemSettingsProvider({ children }: { children: React.ReactNode }) {
+  const [settings, setSettings] = useState<SystemSettings>(DEFAULT);
+  const [logoCacheKey, setLogoCacheKey] = useState(0);
+
+  const refresh = useCallback(async () => {
+    try {
+      const { data } = await api.get<SystemSettings>("/api/settings");
+      setSettings(data);
+      setLogoCacheKey((k) => k + 1);
+      document.title = data.system_name;
+    } catch {
+      setSettings(DEFAULT);
+    }
+  }, []);
+
+  useEffect(() => {
+    refresh();
+  }, [refresh]);
+
+  const value = useMemo(() => ({ settings, logoCacheKey, refresh }), [settings, logoCacheKey, refresh]);
+
+  return <SystemSettingsContext.Provider value={value}>{children}</SystemSettingsContext.Provider>;
+}
+
+export function useSystemSettings() {
+  return useContext(SystemSettingsContext);
+}
+
+export function logoSrc(logoUrl: string | null, cacheBust?: number) {
+  if (!logoUrl) return null;
+  const q = cacheBust ? `?t=${cacheBust}` : "";
+  return `${logoUrl}${q}`;
+}

--
Gitblit v1.8.0