From c6435c6db5abd643001e76aac5d2eb0cfa0b3e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=A1=E5=A4=8D=E4=B9=A0?= <2353956224@qq.com> Date: Fri, 6 Feb 2026 20:03:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/ConfigPage.vue | 15 ++++++++++++++- src/types/electron.d.ts | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/pages/ConfigPage.vue b/src/pages/ConfigPage.vue index 76c6841..731debe 100644 --- a/src/pages/ConfigPage.vue +++ b/src/pages/ConfigPage.vue @@ -517,7 +517,11 @@ const saveToLocalStorage = () => { const saveToFile = async () => { if (!isElectronEnv) return try { - await window.electronAPI.saveRunConfig(JSON.parse(JSON.stringify(config.value))) + const configToSave = JSON.parse(JSON.stringify(config.value)) + // ConfigPage 不管理 filters,HostListDialog 会单独管理 + // 删除 filters 避免用 ConfigPage 中可能过期的状态覆盖后端 + delete configToSave.filters + await window.electronAPI.saveRunConfig(configToSave) } catch (e) { console.error('保存配置失败:', e) } @@ -706,6 +710,15 @@ const handleStart = async (specificGroupIndex) => { } } + // 预热所有视图,确保后台视图完成渲染,解决自动化执行失败问题 + try { + console.log('[ConfigPage] 预热所有视图...') + await window.electronAPI.warmUpViews() + console.log('[ConfigPage] 视图预热完成') + } catch (e) { + console.warn('[ConfigPage] 视图预热失败,继续启动:', e) + } + const results = await Promise.allSettled( startTasks.map(async ({ viewId, account, delay }) => { await new Promise(r => setTimeout(r, delay)) diff --git a/src/types/electron.d.ts b/src/types/electron.d.ts index dc11a59..f98a960 100644 --- a/src/types/electron.d.ts +++ b/src/types/electron.d.ts @@ -81,6 +81,7 @@ export interface ElectronAPI { // 基础视图控制 hideViews: () => Promise<{ success: boolean }> showViews: () => Promise<{ success: boolean }> + warmUpViews: () => Promise<{ success: boolean; error?: string }> switchTab: (tab: TabId) => Promise<{ success: boolean; currentTab?: TabId; error?: string }> switchToView: (viewId: number) => Promise<{ success: boolean; currentViewId?: number; error?: string }> getCurrentTab: () => Promise