From 826acf40bff56d7d931683c80e2ee17c7bd0d6f8 Mon Sep 17 00:00:00 2001 From: mtvpls Date: Tue, 17 Mar 2026 10:54:34 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B5=E8=A7=86=E7=9B=B4=E6=92=AD=E4=B8=89?= =?UTF-8?q?=E7=A7=8D=E4=BB=A3=E7=90=86=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/admin/page.tsx | 50 ++++++------ src/app/api/admin/live/route.ts | 15 ++-- src/app/api/proxy/m3u8/route.ts | 12 +-- src/app/live/page.tsx | 138 +++++++++++++++++++++----------- src/lib/admin.types.ts | 2 +- 5 files changed, 132 insertions(+), 85 deletions(-) diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index e63c876..07dbe5a 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -380,7 +380,7 @@ interface LiveDataSource { channelNumber?: number; disabled?: boolean; from: 'config' | 'custom'; - proxyMode?: boolean; // 代理模式开关 + proxyMode?: 'full' | 'm3u8-only' | 'direct'; // 代理模式 } // 自定义分类数据类型 @@ -10937,12 +10937,15 @@ const LiveSourceConfig = ({ }); }; - const handleToggleProxyMode = (key: string) => { - withLoading(`toggleLiveProxyMode_${key}`, async () => { + const handleSetProxyMode = (key: string, mode: 'full' | 'm3u8-only' | 'direct') => { + withLoading(`setLiveProxyMode_${key}`, async () => { + // 保存旧值用于回滚 + const oldMode = liveSources.find((s) => s.key === key)?.proxyMode; + // 乐观更新本地状态 setLiveSources((prev) => prev.map((s) => - s.key === key ? { ...s, proxyMode: !s.proxyMode } : s + s.key === key ? { ...s, proxyMode: mode } : s ) ); @@ -10951,13 +10954,14 @@ const LiveSourceConfig = ({ method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ - action: 'toggle_proxy_mode', + action: 'set_proxy_mode', key, + proxyMode: mode, }), }); if (!response.ok) { - throw new Error('切换代理模式失败'); + throw new Error('设置代理模式失败'); } // 成功后刷新配置 @@ -10966,17 +10970,17 @@ const LiveSourceConfig = ({ // 失败时回滚本地状态 setLiveSources((prev) => prev.map((s) => - s.key === key ? { ...s, proxyMode: !s.proxyMode } : s + s.key === key ? { ...s, proxyMode: oldMode } : s ) ); showError( - error instanceof Error ? error.message : '切换代理模式失败', + error instanceof Error ? error.message : '设置代理模式失败', showAlert ); throw error; } }).catch(() => { - console.error('操作失败', 'toggle_proxy_mode', key); + console.error('操作失败', 'set_proxy_mode', key); }); }; @@ -11157,28 +11161,22 @@ const LiveSourceConfig = ({ -