From fce706198ada7f7f7559a93f9ffdd1d5d2d90c0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=A1=E5=A4=8D=E4=B9=A0?= <2353956224@qq.com> Date: Thu, 5 Feb 2026 18:46:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=E9=87=91=E7=A5=A8?= =?UTF-8?q?=E6=99=AE=E7=A5=A8=E7=AD=9B=E9=80=89=E5=92=8C=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E6=B6=88=E8=B4=B9=E4=B8=BB=E6=92=AD=E8=BF=87?= =?UTF-8?q?=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/HostListDialog.vue | 32 +++++++++++++++++++++++++++++++ src/pages/ConfigPage.vue | 29 +++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/components/HostListDialog.vue b/src/components/HostListDialog.vue index 27a691d..89ef770 100644 --- a/src/components/HostListDialog.vue +++ b/src/components/HostListDialog.vue @@ -250,6 +250,24 @@ onMounted(() => { } }) +// 监听过滤器变化,同步到后端配置 +watch(() => filters.value, async (newFilters) => { + if (!isElectron()) return + try { + await window.electronAPI.updateAutomationConfig({ + filters: { + gold: newFilters.gold, + ordinary: newFilters.ordinary, + minOnlineFans: newFilters.minOnlineFans ? parseInt(newFilters.minOnlineFans) : 0, + maxOnlineFans: newFilters.maxOnlineFans ? parseInt(newFilters.maxOnlineFans) : 0, + } + }) + console.log('[HostListDialog] 过滤配置已同步:', newFilters) + } catch (e) { + console.error('同步过滤配置失败:', e) + } +}, { deep: true }) + // Loading const loadHosts = async () => { if (!isElectron()) return @@ -272,6 +290,20 @@ const loadConfig = async () => { if (config?.filters?.hostsLevelList) { selectedLevels.value = new Set(config.filters.hostsLevelList) } + // 加载金票/普票过滤配置 + if (config?.filters?.gold !== undefined) { + filters.value.gold = config.filters.gold + } + if (config?.filters?.ordinary !== undefined) { + filters.value.ordinary = config.filters.ordinary + } + // 加载在线人数过滤配置 + if (config?.filters?.minOnlineFans !== undefined && config.filters.minOnlineFans > 0) { + filters.value.minOnlineFans = config.filters.minOnlineFans + } + if (config?.filters?.maxOnlineFans !== undefined && config.filters.maxOnlineFans > 0 && config.filters.maxOnlineFans < 9999999999999) { + filters.value.maxOnlineFans = config.filters.maxOnlineFans + } } catch (e) { console.error('加载配置失败:', e) } diff --git a/src/pages/ConfigPage.vue b/src/pages/ConfigPage.vue index 64d11f8..76c6841 100644 --- a/src/pages/ConfigPage.vue +++ b/src/pages/ConfigPage.vue @@ -706,13 +706,40 @@ const handleStart = async (specificGroupIndex) => { } } - await Promise.allSettled( + const results = await Promise.allSettled( startTasks.map(async ({ viewId, account, delay }) => { await new Promise(r => setTimeout(r, delay)) return window.electronAPI.startTikTokAutomation(viewId, account) }) ) + // 检查启动结果 + const failedResults = results + .map((r, i) => ({ result: r, task: startTasks[i] })) + .filter(({ result }) => { + if (result.status === 'rejected') return true + if (result.status === 'fulfilled' && !result.value.success) return true + return false + }) + + // 如果全部失败,显示错误并不跳转 + if (failedResults.length === startTasks.length) { + const firstError = failedResults[0] + let errorMsg = '启动失败' + if (firstError.result.status === 'rejected') { + errorMsg = firstError.result.reason?.message || '启动失败' + } else if (firstError.result.status === 'fulfilled') { + errorMsg = firstError.result.value.error || '启动失败' + } + alert(`启动失败:${errorMsg}`) + return + } + + // 如果部分失败,显示警告但继续 + if (failedResults.length > 0) { + console.warn(`部分账号启动失败: ${failedResults.length}/${startTasks.length}`) + } + setIsRunning(true) currentGroupIndex.value = activeGroupIndex const status = await window.electronAPI.getRotationStatus()