From 90129c0d696d5f6a2523c1fbe876991feb0bc7f8 Mon Sep 17 00:00:00 2001 From: shinya Date: Tue, 15 Jul 2025 22:20:42 +0800 Subject: [PATCH] feat: add global image proxy config --- README.md | 1 + src/app/admin/page.tsx | 42 ++++++++++++- src/app/api/admin/site/route.ts | 6 +- src/app/layout.tsx | 3 + src/components/EpisodeSelector.tsx | 4 +- src/components/SettingsButton.tsx | 98 +++++++++++++++++++++++++++--- src/lib/admin.types.ts | 1 + src/lib/config.ts | 5 ++ src/lib/utils.ts | 21 +++++-- 9 files changed, 165 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 2779760..dcef62f 100644 --- a/README.md +++ b/README.md @@ -190,6 +190,7 @@ networks: | REDIS_URL | redis 连接 url,若 NEXT_PUBLIC_STORAGE_TYPE 为 redis 则必填 | 连接 url | 空 | | NEXT_PUBLIC_ENABLE_REGISTER | 是否开放注册,仅在 redis 部署时生效 | true / false | false | | NEXT_PUBLIC_SEARCH_MAX_PAGE | 搜索接口可拉取的最大页数 | 1-50 | 5 | +| NEXT_PUBLIC_IMAGE_PROXY | 默认的浏览器端图片代理 | url prefix | (空) | ## 配置说明 diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index 9e17e5d..5ca82f1 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -50,6 +50,7 @@ interface SiteConfig { Announcement: string; SearchDownstreamMaxPage: number; SiteInterfaceCacheTime: number; + ImageProxy: string; } // 视频源数据类型 @@ -947,6 +948,7 @@ const SiteConfigComponent = ({ config }: { config: AdminConfig | null }) => { Announcement: '', SearchDownstreamMaxPage: 1, SiteInterfaceCacheTime: 7200, + ImageProxy: '', }); // 保存状态 const [saving, setSaving] = useState(false); @@ -958,7 +960,10 @@ const SiteConfigComponent = ({ config }: { config: AdminConfig | null }) => { useEffect(() => { if (config?.SiteConfig) { - setSiteSettings(config.SiteConfig); + setSiteSettings({ + ...config.SiteConfig, + ImageProxy: config.SiteConfig.ImageProxy || '', + }); } }, [config]); @@ -1092,6 +1097,41 @@ const SiteConfigComponent = ({ config }: { config: AdminConfig | null }) => { /> + {/* 图片代理 */} +
+ + + !isD1Storage && + setSiteSettings((prev) => ({ + ...prev, + ImageProxy: e.target.value, + })) + } + disabled={isD1Storage} + className={`w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-green-500 focus:border-transparent ${ + isD1Storage ? 'opacity-50 cursor-not-allowed' : '' + }`} + /> +

+ 用于代理图片访问,解决跨域或访问限制问题。留空则不使用代理。 +

+
+ {/* 操作按钮 */}
+