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