From e23d8ed5fcd08c77d28bbb0f162bed02a8514eb9 Mon Sep 17 00:00:00 2001 From: syokounya Date: Wed, 15 Apr 2026 04:43:49 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(gui):=20=E5=AE=9A=E6=97=B6=E8=BF=9C?= =?UTF-8?q?=E5=BE=81=E6=A3=80=E6=9F=A5=E9=A1=BA=E5=B8=A6=E9=A2=86=E5=8F=96?= =?UTF-8?q?=E5=A5=96=E5=8A=B1=E5=B9=B6=E6=99=BA=E8=83=BD=E8=B7=B3=E8=BF=87?= =?UTF-8?q?=E6=B5=B4=E5=AE=A4=E7=BB=B4=E4=BF=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 仅在前端 Scheduler 的自动远征检查(挂机模式)中,后续追加任务奖励领取与浴室维修 - 手动点击'收取远征'按钮不受影响 - 执行浴室维修前,先查询后端 taskStatus;若有战斗任务 running,则跳过维修并记录日志,避免占用舰队 --- src/model/scheduler/Scheduler.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/model/scheduler/Scheduler.ts b/src/model/scheduler/Scheduler.ts index b4652ed..20a8e3a 100644 --- a/src/model/scheduler/Scheduler.ts +++ b/src/model/scheduler/Scheduler.ts @@ -290,6 +290,7 @@ export class Scheduler { Logger.debug(`consumeNext: 「${task.name}」 type=${task.type} remaining=${task.remainingTimes}/${task.totalTimes} req=${JSON.stringify(task.request)}`, 'scheduler'); // 远征任务: 直接调用远征 API,不走 taskStart 流程 + // 挂机模式下顺带领取奖励并执行智能浴室维修 if (task.type === 'expedition') { try { this.emitLog('info', '正在检查远征...'); @@ -298,6 +299,28 @@ export class Scheduler { } catch { this.emitLog('debug', '远征检查跳过'); } + + try { + this.emitLog('info', '正在领取任务奖励...'); + await this.api.rewardCollect(); + this.emitLog('info', '任务奖励领取完成'); + } catch { + this.emitLog('debug', '任务奖励领取跳过'); + } + + try { + const taskStatus = await this.api.taskStatus(); + if (taskStatus.success && taskStatus.data?.status === 'running') { + this.emitLog('info', '检测到战斗任务进行中,跳过浴室维修'); + } else { + this.emitLog('info', '正在检查浴室维修...'); + await this.api.repairBath(); + this.emitLog('info', '浴室维修检查完成'); + } + } catch { + this.emitLog('debug', '浴室维修检查跳过'); + } + this.currentTask = null; this.consumeNext(); return; From 0bc7f2c5ceb98eb30f13a0bc5beff13c53afa310 Mon Sep 17 00:00:00 2001 From: syokounya Date: Wed, 15 Apr 2026 05:06:18 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat(gui):=20=E5=89=8D=E7=AB=AF=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=20/api/expedition/auto=5Fcheck=20=E6=8C=82=E6=9C=BA?= =?UTF-8?q?=E4=B8=93=E7=94=A8=E7=AB=AF=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ApiClient 新增 expeditionAutoCheck 方法 - Scheduler.start() 和 consumeNext() 中的远征检查均改调新端点 - 移除前端手动串调 rewardCollect / repairBath 的逻辑,统一由后端处理 --- src/model/ApiClient.ts | 4 ++++ src/model/scheduler/Scheduler.ts | 35 +++++++------------------------- 2 files changed, 11 insertions(+), 28 deletions(-) diff --git a/src/model/ApiClient.ts b/src/model/ApiClient.ts index a9fb81b..aee3aba 100644 --- a/src/model/ApiClient.ts +++ b/src/model/ApiClient.ts @@ -170,6 +170,10 @@ export class ApiClient { return this.request('POST', '/api/expedition/check'); } + async expeditionAutoCheck(allowRepair = true): Promise { + return this.request('POST', '/api/expedition/auto_check', { allow_repair: allowRepair }); + } + // ── 游戏状态查询 ── async gameContext(): Promise> { diff --git a/src/model/scheduler/Scheduler.ts b/src/model/scheduler/Scheduler.ts index 20a8e3a..923d7f5 100644 --- a/src/model/scheduler/Scheduler.ts +++ b/src/model/scheduler/Scheduler.ts @@ -289,38 +289,17 @@ export class Scheduler { Logger.debug(`consumeNext: 「${task.name}」 type=${task.type} remaining=${task.remainingTimes}/${task.totalTimes} req=${JSON.stringify(task.request)}`, 'scheduler'); - // 远征任务: 直接调用远征 API,不走 taskStart 流程 - // 挂机模式下顺带领取奖励并执行智能浴室维修 + // 远征任务: 调用挂机专用自动检查端点,不走 taskStart 流程 + // 若队列里还有后续任务,则禁止自动维修,避免任务间隙占用舰队 if (task.type === 'expedition') { + const allowRepair = this._taskQueue.length === 0; try { - this.emitLog('info', '正在检查远征...'); - await this.api.expeditionCheck(); - this.emitLog('info', '远征检查完成'); + this.emitLog('info', '正在执行自动远征检查...'); + await this.api.expeditionAutoCheck(allowRepair); + this.emitLog('info', '自动远征检查完成'); } catch { - this.emitLog('debug', '远征检查跳过'); + this.emitLog('debug', '自动远征检查跳过'); } - - try { - this.emitLog('info', '正在领取任务奖励...'); - await this.api.rewardCollect(); - this.emitLog('info', '任务奖励领取完成'); - } catch { - this.emitLog('debug', '任务奖励领取跳过'); - } - - try { - const taskStatus = await this.api.taskStatus(); - if (taskStatus.success && taskStatus.data?.status === 'running') { - this.emitLog('info', '检测到战斗任务进行中,跳过浴室维修'); - } else { - this.emitLog('info', '正在检查浴室维修...'); - await this.api.repairBath(); - this.emitLog('info', '浴室维修检查完成'); - } - } catch { - this.emitLog('debug', '浴室维修检查跳过'); - } - this.currentTask = null; this.consumeNext(); return;