From 67d4dd9ed19d8e136bab78311424a384c74ea826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E5=8F=89=E6=A0=91=E6=A0=91?= Date: Tue, 30 Dec 2025 00:45:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(settings):=20=E6=B7=BB=E5=8A=A0=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E6=A8=A1=E5=BC=8F=E5=BC=80=E5=85=B3=E5=92=8C=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=99=A8=E4=BF=A1=E6=81=AF=E6=98=BE=E7=A4=BA=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在设置面板中添加开发模式开关,允许用户手动设置服务器信息 修改页脚显示逻辑,根据开发模式状态显示自定义服务器信息或实际服务器信息 添加服务器图标显示功能,支持EdgeOne和Cloudflare的图标显示 --- public/cdn/cf.svg | 63 +++++++++++++++++ public/cdn/eo.png | Bin 0 -> 7531 bytes src/components/Footer.astro | 69 ++++++++++++++++--- src/components/widget/DisplaySettings.svelte | 41 +++++++++++ src/utils/setting-utils.ts | 18 +++++ 5 files changed, 180 insertions(+), 11 deletions(-) create mode 100644 public/cdn/cf.svg create mode 100644 public/cdn/eo.png diff --git a/public/cdn/cf.svg b/public/cdn/cf.svg new file mode 100644 index 000000000..eaa2516ca --- /dev/null +++ b/public/cdn/cf.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/cdn/eo.png b/public/cdn/eo.png new file mode 100644 index 0000000000000000000000000000000000000000..9b5566e58148d8a48f53677904d61e806f37c561 GIT binary patch literal 7531 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 -
+
© 2024 - {currentYear} {profileConfig.name} ,采用 @@ -47,22 +47,69 @@ try { 皖ICP备2025099787号-2
- +
+ + +
diff --git a/src/components/widget/DisplaySettings.svelte b/src/components/widget/DisplaySettings.svelte index e487b982d..5db84f6dc 100644 --- a/src/components/widget/DisplaySettings.svelte +++ b/src/components/widget/DisplaySettings.svelte @@ -16,6 +16,10 @@ import { setBgHueRotate, getHideBg, setHideBg, + getDevMode, + setDevMode, + getDevServer, + setDevServer, } from "@utils/setting-utils"; import { AUTO_MODE, DARK_MODE, LIGHT_MODE } from "@constants/constants"; @@ -25,6 +29,8 @@ let isRainbowMode = getRainbowMode(); let rainbowSpeed = getRainbowSpeed(); let bgBlur = getBgBlur(); let hideBg = getHideBg(); +let isDevMode = getDevMode(); +let devServer = getDevServer(); let animationId: number; let lastUpdate = 0; let rainbowHue = 0; // Independent hue for background rotation @@ -77,6 +83,15 @@ function toggleHideBg() { setHideBg(hideBg); } +function toggleDevMode() { + isDevMode = !isDevMode; + setDevMode(isDevMode); +} + +function onDevServerChange() { + setDevServer(devServer); +} + function onSpeedChange() { setRainbowSpeed(rainbowSpeed); } @@ -207,6 +222,32 @@ onMount(() => { + +
+
+ 开发模式 +
+ +
+ + {#if isDevMode} +
+
+ Server +
+
+ +
+
+ {/if} diff --git a/src/utils/setting-utils.ts b/src/utils/setting-utils.ts index e6506412e..bbc53a5d3 100644 --- a/src/utils/setting-utils.ts +++ b/src/utils/setting-utils.ts @@ -94,6 +94,24 @@ export function setHideBg(hide: boolean): void { } } +export function getDevMode(): boolean { + const stored = localStorage.getItem("dev-mode"); + return stored === "true"; +} + +export function setDevMode(enabled: boolean): void { + localStorage.setItem("dev-mode", String(enabled)); +} + +export function getDevServer(): string { + const stored = localStorage.getItem("dev-server"); + return stored || ""; +} + +export function setDevServer(server: string): void { + localStorage.setItem("dev-server", server); +} + export function applyThemeToDocument(theme: LIGHT_DARK_MODE) { switch (theme) { case LIGHT_MODE: