# 安全内容中心开发记录 ## 单篇详情接口 随后内置浏览器在contents=3新构建加载公告列表,点击“模拟公告9”成功进入内容详情并显示远程正文,真实阅读路径已验证。首轮超时未持续阻断,仍不代表远程环境稳定性已验收。 新增GET /heqi/client/v1/user/public/contents/:identity,使用identity、status=1、publish_status=published及notice/safety_article/law类型约束读取,软删除沿用GORM过滤;不存在返回1112。响应白名单仅identity/title/body/content_type/version_no。ClientRepository.safetyContent与页面详情加载接入该接口,避免每次读取全部内容,1112显示已下架说明,其他错误保留重试。 content_detail.go/对应测试及routers/client.go为后端变更;App仓储、页面和fixture测试同步更新。后端SQLMock覆盖发布约束和最小字段、无记录返回1112;用户逻辑与路由测试通过;三个Flutter页面测试、analyze及Web构建通过。API已更新至PID45776,仍连接原远程数据库,无迁移或数据写入。首次HTTP联调超时,不以单元测试替代真实联调证据。 ## 后续扩展:安全宣传与法律法规文本内容 后台resources.ts的cms_content新增safety_article(安全宣传)和law(法律法规)选项,沿用已有varchar内容类型及发布/启用流程,不改变原notice/agreement接口契约,无数据库迁移。App安全内容中心支持这两类的筛选与独立正文;协议仍不进入安全内容,视频仍暂未开放。后台表单浏览器已看到新增选项,未发布测试法规或安全知识。三个widget测试、后台类型检查、Flutter analyze与Web构建通过。 注意:这仅补齐文本分类维护,不代表图43-1/43-3视觉和完整功能通过;宣传配图、法规级别/文号/施行日期/原文链接、内容分页和公开响应最小化仍待完成。正式发布内容需由运营提供,不能用自动编写的安全法律内容替代。 ## 范围与实现 对照43-4-平台公告设计图,新增安全内容中心与独立公告正文路由。当前后台仅支持notice、agreement,因此仅开放真实公告搜索和阅读,安全宣传、视频、法律法规保留入口并标“暂未开放”,不自行归为二期。 核心文件:apps/user_app/lib/ui/features/home/safety_contents_page.dart负责已发布公告筛选、标题搜索、正文、空状态及下架提示;app/router.dart增加公开/contents及/contents/:identity路由;首页新增查看更多并把公告弹窗改为独立详情;设置增加安全内容入口。沿用PrimaryRepository与公开已发布内容接口,无数据库结构或内容变更。刷新详情会重新读取发布状态,协议不能通过公告详情标识被展示。 ## 验证与缺项 Flutter analyze通过,两项widget测试通过,覆盖公告搜索、协议隔离和非公告详情拒绝。Web构建通过;内置浏览器实测列表显示远程模拟公告,搜索“公告 9”仅剩匹配记录。 此页未完成1:1验收:缺少设计稿的公告子分类、置顶、摘要、已读状态、发布时间及配图,后台字段和接口仍需补齐。当前列表为已发布内容全集本地搜索,需后续增加分页与服务端筛选。无新增依赖,不将测试公告当正式安全知识内容。图43及43-4只计新增部分实现,不计验收完成。