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()