From be5923bda9633b80ba1cc2945494631df0c77cea Mon Sep 17 00:00:00 2001 From: qiyinxi Date: Tue, 8 Sep 2026 10:34:45 +0200 Subject: [PATCH] =?UTF-8?q?fix(maa):=20=E7=94=A8=E6=88=B7=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=A1=B5=E5=9C=A8=E7=BC=BA=E5=B0=91=E5=88=86=E6=9C=8D?= =?UTF-8?q?=E5=85=B3=E5=8D=A1=E6=95=B0=E6=8D=AE=E6=97=B6=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E6=95=B4=E9=A1=B5=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit loadActivityStageOptions 把 overview.StageByServer 无条件赋给 stageOverviewByServer,字段缺席时 ref 被抹成 undefined,把 234 行特意给的 {} 默认值也一起抹掉;紧接着 applyServerStageOptions 里的 `if (!stageOverview) return` 只防住「某服务器没有条目」,防不住「容器本身没了」, 于是上一行 stageOverviewByServer.value[server] 先抛 TypeError。 该函数由服务器切换的 watcher 触发,loadUserData 填表期间就会跑到, 所以表现为打开页面即整页渲染失败。 改为缺字段时给出可读提示并保留原有数据,不再写入 undefined;断言类型同时 放宽成 Partial<...> | undefined,让 TS 强制这次判空——后端 InfoOut.data 是 Dict[str, Any],该字段不进 schema,原来的断言提供不了任何保护。 Closes #614 Co-Authored-By: Claude Opus 5 (1M context) --- frontend/src/views/EditView/User/MAAUserEdit.vue | 10 +++++++++- res/version.json | 3 ++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/EditView/User/MAAUserEdit.vue b/frontend/src/views/EditView/User/MAAUserEdit.vue index abf78a999..732e17022 100644 --- a/frontend/src/views/EditView/User/MAAUserEdit.vue +++ b/frontend/src/views/EditView/User/MAAUserEdit.vue @@ -849,7 +849,15 @@ const loadActivityStageOptions = async () => { return } - const overview = response.data as HomeOverviewResponse + const overview = response.data as Partial | undefined + if (!overview?.StageByServer) { + // 不能直接赋值: 字段缺席会把 stageOverviewByServer 的 {} 默认值抹成 undefined, + // 之后服务器切换的 watcher 一跑 applyServerStageOptions 就会整页崩 + logger.error('活动关卡数据缺少 StageByServer 字段,后端版本可能与前端不匹配') + activityStageError.value = '加载活动关卡失败:返回数据缺少关卡信息' + return + } + stageOverviewByServer.value = overview.StageByServer applyServerStageOptions() } catch (error) { diff --git a/res/version.json b/res/version.json index c1b62c648..0aa8d5733 100644 --- a/res/version.json +++ b/res/version.json @@ -114,7 +114,8 @@ "MFW专项 准备运行环境确实找不到 uv 时改为给出可照做的中文提示,写明 uv.exe 该放的完整路径,以及本机已有完整 Python 3.12 时可改设环境变量跳过下载 by [@qiyinxi](https://github.com/qiyinxi)", "MFW专项 修复脚本侧强制停止任务(如 MaaEnd 分辨率不达标时的强停)被记成「任务完成」的问题:现在被强停的任务按失败记录,本轮剩余任务不再投递,不会再出现整轮一件事没做却报成全部成功 by [@qiyinxi](https://github.com/qiyinxi)", "MAA专项 修复 MAA 卡死后不会被判定为超时、任务一直挂着的问题:MAA 每隔一段时间输出的日志停滞提示被当成任务仍在推进,把超时计时反复重置,剿灭等超时阈值长于提示间隔的模式永远等不到超时;现已识别新旧两版 MAA 的该提示,MAA 的五种界面语言均生效 by [@qiyinxi](https://github.com/qiyinxi)", - "MAA专项 修复关闭理智作战后活动关优先任务一并从任务队列中消失的问题 by [@1w1w11w1](https://github.com/1w1w11w1)" + "MAA专项 修复关闭理智作战后活动关优先任务一并从任务队列中消失的问题 by [@1w1w11w1](https://github.com/1w1w11w1)", + "MAA专项 修复用户配置页在后端未返回分服关卡数据时整页打不开的问题:前端原样接收该字段并覆盖默认值,字段缺席时切换服务器就会报错崩掉整页;现在缺字段会给出「后端版本可能不匹配」的提示而不是白屏" ] }, "v5.5.0-beta.2": {