spec.md 6.0 KB

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 安全跳转已存在模块或显示建设中,不得触发咨询、支付、档案等闭环能力。