diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrSopDto.java b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrSopDto.java index b0cb42f1..f9d70a4a 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrSopDto.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrSopDto.java @@ -131,7 +131,7 @@ public final class AihrSopDto { } } - public record RecordResponse(String title, String category, String version, String status, String owner, String summary) { + public record RecordResponse(String title, String category, String version, String status, String owner, String summary, String source) { } public record ProcessingOverviewResponse( diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java index efe94483..536ce4c9 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java @@ -3446,9 +3446,9 @@ public class AihrSopSeedService { private static List records() { return List.of( - new RecordResponse("投诉处理 SOP v1.0", "投诉处理", "v1.0", "已入库", "品质组", "业主投诉的接待、记录、派单、反馈和闭环确认。"), - new RecordResponse("催缴沟通 SOP v1.0", "催缴沟通", "v1.0", "已入库", "财务组", "缴费提醒、费用争议回应、服务问题承接。"), - new RecordResponse("报修跟进 SOP v1.0", "报修跟进", "v1.0", "待审核", "工程组", "报修接单、派工、现场反馈、复核关闭。") + new RecordResponse("投诉处理 SOP v1.0", "投诉处理", "v1.0", "已入库", "品质组", "业主投诉的接待、记录、派单、反馈和闭环确认。", "demo"), + new RecordResponse("催缴沟通 SOP v1.0", "催缴沟通", "v1.0", "已入库", "财务组", "缴费提醒、费用争议回应、服务问题承接。", "demo"), + new RecordResponse("报修跟进 SOP v1.0", "报修跟进", "v1.0", "待审核", "工程组", "报修接单、派工、现场反馈、复核关闭。", "demo") ); } diff --git a/docs/BRD_IMPLEMENTATION_AUDIT.md b/docs/BRD_IMPLEMENTATION_AUDIT.md index b9055ecf..6b309672 100644 --- a/docs/BRD_IMPLEMENTATION_AUDIT.md +++ b/docs/BRD_IMPLEMENTATION_AUDIT.md @@ -266,3 +266,4 @@ - 2026-07-14 BRD G3 组织快照质量门禁修复:生产默认关闭 `store-display-fields` 时,`AihrOrgSyncService` 原先在 `orgRow()` 内先清空姓名/部门,再以已屏蔽的 `OrgRow` 计算 `suspectText`,外部姓名/部门中的问号乱码可能被漏报,覆盖写入保护因此不完整。现先基于外部原始字段计算 `suspectText`,再独立保存质量标记;展示字段仍按生产脱敏策略清空,组织表结构和写入字段不变。新增 `AihrOrgSyncServiceTest` 回归和 `demo-check` marker;未修改生产数据。正式同步仍需真实上游快照、手机号映射和法务确认。 - 2026-07-14 BRD 4.3.4 每日三题资格边界修复:`aihr_org_snapshot` 没有 `hire_date` 时,旧逻辑用“移动端训练记录少于 3 次”推断新员工,可能把老员工或临时账号误派每日三题。现仅在本地 `application-dev.yml` 显式开启 `allow-legacy-daily-drill-fallback=true`;生产默认关闭,正式环境必须等组织同步提供 `hire_date` 后再按三个月窗口派发。新增边界测试和 `demo-check` marker;不改数据库结构,不伪造正式新员工数据。 - 2026-07-14 BRD 4.3.4 每日三题生产 profile 硬门禁:旧回退即使被环境变量显式打开,仍可能在生产 profile 生效;现仅允许 `dev/local` profile 使用训练次数兼容回退,`prod` 或混合 profile 强制关闭。新增 profile 边界测试和 `demo-check` marker;未修改数据库结构或生产数据。 +- 2026-07-14 BRD 6.3 SOP 来源标识修复:SOP 检索成功时前端原先忽略 API 返回的 `records`,后端返回的内置记录也没有来源字段,可能把演示文档显示成真实知识库;现 API 成功态只使用响应记录,内置记录明确标记 `source=demo`,失败/未检索态继续保留已有回退提示。未修改知识库数据或生产环境。 diff --git a/frontend/src/views/knowledge/sop.vue b/frontend/src/views/knowledge/sop.vue index cfd2d550..2f3871f1 100644 --- a/frontend/src/views/knowledge/sop.vue +++ b/frontend/src/views/knowledge/sop.vue @@ -340,7 +340,12 @@ const seedRecords = [ } ]; -const records = computed(() => [...uploadedRecords.value, ...seedRecords]); +const records = computed(() => { + if (apiMode.value === 'api') { + return [...uploadedRecords.value, ...(apiResult.value?.records ?? [])]; + } + return apiMode.value === 'fallback' ? [...seedRecords] : [...uploadedRecords.value, ...seedRecords]; +}); function selectCategory(item: Category) { selectedCategory.value = item; diff --git a/scripts/demo-check.sh b/scripts/demo-check.sh index c5e4f9c5..19f80689 100755 --- a/scripts/demo-check.sh +++ b/scripts/demo-check.sh @@ -417,6 +417,8 @@ contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service contains frontend/src/views/knowledge/sop.vue "训练题已生成" contains frontend/src/views/knowledge/sop.vue "不代表这些文档已真实入库" contains frontend/src/views/knowledge/sop.vue "内置演示" +contains frontend/src/views/knowledge/sop.vue "apiResult.value?.records" +contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrSopDto.java "String source" contains frontend/src/views/knowledge/processing.vue "当前显示演示数据,不代表真实库统计" contains frontend/src/views/knowledge/cases.vue "不代表真实案例库数据" contains frontend/src/views/recruit/interview.vue "不代表真实面试数据"