diff --git a/docs/BRD_IMPLEMENTATION_AUDIT.md b/docs/BRD_IMPLEMENTATION_AUDIT.md
index aa433c9a..dde05875 100644
--- a/docs/BRD_IMPLEMENTATION_AUDIT.md
+++ b/docs/BRD_IMPLEMENTATION_AUDIT.md
@@ -273,3 +273,4 @@
- 2026-07-14 BRD M1 场景启停边界复核:停用场景此前在新训练启动时可能因内置 seed 回退而继续可用,管理端“停用”不具备实际阻断效果;现仅在新开始训练前检查数据库场景的 `enabled` 状态,已停用场景明确拒绝,历史训练/复盘读取不受影响。新增服务源码回归测试与 `demo-check` marker,未修改生产数据。
- 2026-07-14 BRD M1 派发场景状态与展示一致性复核:修复停用场景仍可通过直接派发接口进入待训练,以及客户端传入场景名称可与场景 ID 不一致的问题;主管派发现在复用启停校验,记录名称始终取服务端场景定义。历史任务读取不受影响,未修改生产数据。
- 2026-07-14 BRD M1 场景筛选回退语义复核:场景表查询成功但岗位/类型没有启用场景时,旧逻辑仍回退到内置场景,可能把不匹配或已停用场景展示给员工/主管;现仅在数据库异常时保留 seed fallback,真实空结果保持为空,并补岗位筛选回归测试。未修改生产数据。
+- 2026-07-14 BRD M1 主管场景入口回退复核:后端已启用场景 API 优先,但主管指派页模板仍循环三条静态场景,且 API 正常空结果会继续显示静态选项;现改为循环 API 场景,真实空结果显示“暂无可派发的已启用场景”,只有请求失败才使用本地兜底。复盘后再练入口同步保持真实空结果为空,未修改生产数据。
diff --git a/mobile-uni/src/pages/supervisor/assign/index.vue b/mobile-uni/src/pages/supervisor/assign/index.vue
index 148bfb9b..86277274 100644
--- a/mobile-uni/src/pages/supervisor/assign/index.vue
+++ b/mobile-uni/src/pages/supervisor/assign/index.vue
@@ -45,9 +45,9 @@
/>
训练场景
-
+
+ 暂无可派发的已启用场景
指派原因
-
@@ -255,10 +256,8 @@ const loadScenarioOptions = async () => {
}
return;
}
- scenarioOptions.value = [...supervisorScenarioOptions];
- if (!isScenarioId(assignmentScenarioId.value)) {
- assignmentScenarioId.value = supervisorScenarioOptions[0].id;
- }
+ scenarioOptions.value = [];
+ assignmentScenarioId.value = '';
} catch {
scenarioOptions.value = [...supervisorScenarioOptions];
if (!isScenarioId(assignmentScenarioId.value)) {
diff --git a/mobile-uni/src/pages/supervisor/review/index.vue b/mobile-uni/src/pages/supervisor/review/index.vue
index b7ae94de..d0e28e24 100644
--- a/mobile-uni/src/pages/supervisor/review/index.vue
+++ b/mobile-uni/src/pages/supervisor/review/index.vue
@@ -319,6 +319,8 @@ const loadScenarioOptions = async () => {
.map((item) => ({ id: item.id, name: item.name }));
if (nextOptions.length) {
scenarioOptions.value = nextOptions;
+ } else {
+ scenarioOptions.value = [];
}
} catch {
scenarioOptions.value = [...supervisorScenarioOptions];
diff --git a/mobile-uni/tests/supervisor-view.test.mjs b/mobile-uni/tests/supervisor-view.test.mjs
index b394ac6b..28d78326 100644
--- a/mobile-uni/tests/supervisor-view.test.mjs
+++ b/mobile-uni/tests/supervisor-view.test.mjs
@@ -159,8 +159,10 @@ test('主管页面共享三个业务场景及文本推荐规则', () => {
'repair-elevator-delay'
]);
assert.match(practiceServiceSource, /getPracticeScenarios/);
- assert.match(assignPageSource, /scenarioOptions/);
+ assert.match(assignPageSource, /v-for="item in scenarioOptions"/);
+ assert.match(assignPageSource, /暂无可派发的已启用场景/);
assert.match(reviewPageSource, /scenarioOptions/);
+ assert.match(reviewPageSource, /scenarioOptions\.value = \[\]/);
assert.equal(inferSupervisorScenarioId('电梯故障沟通低分'), 'repair-elevator-delay');
assert.equal(inferSupervisorScenarioId('投诉接待需要补练'), 'complaint-water');
assert.equal(inferSupervisorScenarioId('催缴物业费'), 'fee-parking');
diff --git a/scripts/demo-check.sh b/scripts/demo-check.sh
index 203e3963..c4ba604d 100755
--- a/scripts/demo-check.sh
+++ b/scripts/demo-check.sh
@@ -530,6 +530,7 @@ contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service
contains mobile-uni/src/services/practice.ts "/api/aihr/mobile/practice/assignments"
contains mobile-uni/src/services/practice.ts "/api/train/practice/scenarios?position="
contains mobile-uni/src/pages/supervisor/assign/index.vue "scenarioOptions"
+contains mobile-uni/src/pages/supervisor/assign/index.vue "暂无可派发的已启用场景"
contains mobile-uni/src/pages/supervisor/review/index.vue "scenarioOptions"
contains frontend/src/api/aihr/case.ts "/api/knowledge/case/upload"
contains frontend/src/api/aihr/case.ts "/api/knowledge/case/records?limit="