health-content Specification
Purpose
提供健康科普分类、文章列表分页、首页入口承接和文章链接 web-view 打开能力,作为首页科普、眼健康专区内容和资讯入口的通用内容契约。
Requirements
Requirement: REQ-CONTENT-001-01 科普路由与入口
系统 MUST 提供健康科普列表页和详情页,并通过首页科普摘要可进入。
- MUST:注册
pages/index/pages/healthScienceList/healthScienceList。
- MUST:注册
pages/index/pages/healthScienceDetail/healthScienceDetail。
- MUST:
utils/homeRoute.js 白名单包含两个页面。
- MUST:首页健康科普“更多”入口进入列表页。
- MUST:首页文章点击进入详情页并传递列表返回的文章链接。
Scenario: 从首页进入科普
- Given 用户位于首页健康科普区块
- When 用户点击“更多”或文章卡片
- Then 系统 MUST 导航到对应列表页或详情页。
Requirement: REQ-CONTENT-001-02 科普分类
系统 MUST 使用真实接口查询健康科普分类。
- MUST:通过
01010041 查询分类。
- MUST:请求参数包含医院态字段,如
hospCode。
- MUST:归一
categoryID/id、name/categoryName/label。
- MUST:分类为空时提供“全部”或语义化空态,不得使用 mock 分类替代真实接口。
- MUST:可缓存分类但必须允许失败重试。
Scenario: 分类加载
- Given 用户进入科普列表页
- When 系统调用
01010041
- Then 页面 MUST 展示分类 tab 或空态/错误态。
Requirement: REQ-CONTENT-001-03 科普列表分页
系统 MUST 使用真实接口查询健康科普文章列表并支持分页。
- MUST:通过
01010042 查询文章列表。
- MUST:请求参数包含
categoryID、page、pageSize、hospCode。
- MUST:归一文章
articleID/id、标题、摘要、封面、发布时间、类型、分类。
- MUST:支持分类切换后重置分页。
- MUST:支持触底加载下一页并展示“没有更多了”。
- MUST:覆盖加载中、空数据、接口失败、分页结束状态。
Scenario: 列表分页
- Given 用户位于科普列表页
- When 用户切换分类或页面触底
- Then 系统 MUST 使用真实接口加载对应文章列表并更新分页状态。
Requirement: REQ-CONTENT-001-04 文章链接详情
系统 MUST 按旧源码点击语义打开健康科普文章链接,并且所有文章外链 MUST 通过 COMMON-002 的安全 WebView 契约打开。
- MUST:从文章列表项读取
sourceUrl/source_url 等文章链接字段。
- MUST:首页或列表文章点击时使用既有
utils/preview.openWebView,将 url/title/source 交给 pages/common/webview/webview。
- MUST:由 COMMON-002 执行 URL decode、http/https 协议校验、host 白名单校验、加载失败、重试与返回处理。
- MUST:科普详情旧路由被 query 或 EventChannel 直接打开时展示安全错误态与返回入口,不得将传入 URL 直接绑定至
web-view。
- MUST:缺少文章链接时展示错误/空态和返回提示。
- MUST NOT:详情页自行接收并渲染未校验的 query/EventChannel URL。
- MUST NOT:额外请求
/api/article/{articleId}、伪造静态正文或本地详情数据。
Scenario: 从列表安全打开文章详情
- GIVEN 用户点击一篇包含真实
sourceUrl 的科普文章
- WHEN CONTENT-001 发起文章外链打开
- THEN 系统 SHALL 通过
openWebView 调用 COMMON-002;仅 URL 通过协议与 host 白名单校验时,COMMON-002 才 SHALL 渲染 web-view。
Scenario: 直接访问旧详情路由
- GIVEN 用户或外部调用方直接携带 query/EventChannel URL 进入健康科普详情路由
- WHEN 页面初始化
- THEN 系统 SHALL 展示安全错误态和返回入口,且 SHALL NOT 将该 URL 直接渲染到
web-view。
Scenario: 外链不被允许
- GIVEN 文章 URL 为空、协议非法或 host 未登记
- WHEN 用户从首页或科普列表点击文章
- THEN 系统 SHALL 由 COMMON-002 展示可理解的安全拒绝反馈,且 SHALL NOT 加载外链内容。
Requirement: REQ-CONTENT-001-05 图片与资源兜底
系统 MUST 使用公共资源契约处理文章封面和正文资源。
- MUST:优先调用当前可用
utils/resource.js 中的图片 URL 归一方法。
- MUST:资源加载失败时清空错误图片或展示语义化兜底。
- MUST NOT:复制 COMMON-001 的上传下载实现。
Scenario: 封面加载失败
- Given 文章封面加载失败
- When 图片组件触发 error
- Then 页面 MUST 展示兜底状态,不得崩溃或重复请求无效资源。
Requirement: REQ-CONTENT-001-06 UI 与交互还原
系统 MUST 按新版设计和项目 UI 标准呈现科普列表与详情。
- MUST:列表页高还原
page-myopia-science 的分类 tab、内容卡片、图文/视频标识和信息层级。
- MUST:详情页作为旧源码文章链接承接页,缺链接时提供错误态和返回提示。
- MUST:无真实数据的推荐内容不得伪造;可以显示安全占位或返回列表入口。
- MUST:页面首屏直接服务内容查看,不新增营销落地页。
Scenario: 科普页面视觉检查
- Given 用户进入列表页或详情页
- When 页面渲染完成
- Then 页面 MUST 使用项目 UI token,且主要信息层级与新版设计一致。
Requirement: REQ-CONTENT-001-07 越界能力限制
系统 MUST 限制本模块只处理通用内容能力。
- MUST NOT:实现眼健康专区完整服务编排。
- MUST NOT:实现医生预约、咨询支付、IM/TRTC、档案写入、风险预测、报告生成。
- MUST NOT:调用支付、医保、实名 OCR、人脸识别接口。
- MUST:咨询/预约 CTA 只能跳转已有安全路由或显示建设中提示。
Scenario: 点击越界 CTA
- Given 用户位于科普详情页
- When 用户点击咨询或预约 CTA
- Then 系统 MUST 安全跳转已存在模块或显示建设中,不得触发咨询、支付、档案等闭环能力。