spec.md 5.1 KB

message-center Specification

Purpose

提供普瑞互联网医院智慧医院小程序 V2.0 的消息列表、分类筛选、消息详情、已读/删除、未读徽标和动态跳转白名单能力。

Requirements

Requirement: 消息列表与未读

系统 MUST 提供 pages/tabBar/message/message 一级 tab,支持:

  • 调用 03100201 获取消息列表与未读数;请求参数至少包含 receiveUser, receiveTypeCode, hospCode, messageTypeCode,分页参数 pageNo / pageSize
  • 响应字段归一:messageList, unreadNmber, unreadObj, remainingQty
  • 列表卡片显示图标(按类型 4 色)、标题、摘要单行省略、时间、未读红点;已读态透明度 0.72、标题字重 600。
  • 分类筛选 chip:全部 / 就诊 / 缴费 / 系统,按 messageTypeCode 关键词归一,未命中归入"其他"。
  • 下拉刷新 / 触底加载下一页;分页数据 remainingQty === 0 时停止触底。
  • 失败/空/未登录/未选医院/跳转越界五种状态全部覆盖。

Scenario: 拉取首页未读

  • Given 用户已登录且 appReady=true, hospitalReady=true
  • When 消息页 onShow 触发
  • Then 顺序执行 fetchMessageList({ messageTypeCode: '' })fetchHomeUnreadCount();未读数写入 tabBarSettings.messageUnreadCountgetTabBar().refresh()

Scenario: 分类筛选

  • Given 列表已加载
  • When 用户点击"缴费" chip
  • Then 重新调用 fetchMessageList({ messageTypeCode: <缴费 code> }),列表与 chip 选中态同步更新,未读徽标按 categorizeMessageType 重算。

Requirement: 消息详情 / 分类详情

系统 MUST 提供 pages/message/messageDetail/messageDetail 二级页:

  • 路由参数:messageID(单条)/ messageTypeCode(分类),可附带 jumpPages
  • 单条详情进入即调用 03100098 标记已读;失败保留未读态并展示重试。
  • 分类详情复用消息卡渲染逻辑,渲染该分类下消息列表。
  • 底部"查看原文"按钮:调用 messageJumpRouter.resolveJumpTarget(jumpPages);命中走白名单,未命中走兜底。
  • 右上角"更多":删除(带二次确认)。

Scenario: 进入单条详情

  • Given 消息有 messageID
  • When 页面 onLoad
  • Then 调 markMessageRead({ messageID }),同时渲染消息体;若 jumpPages 存在则底部展示"查看原文"。

Scenario: 进入分类详情

  • Given 仅有 messageTypeCode,无 messageID
  • When 页面 onLoad
  • Then 调 fetchMessageList({ messageTypeCode }) 渲染分类列表;底部不展示"查看原文"。

Requirement: 已读 / 已处理

  • 系统 MUST 通过接口 03100098 支持消息已读/已处理。
  • 系统 MUST 在详情页 onLoad 自动调用;列表长按菜单也可手动调用。
  • 系统 MUST 在失败时 toast 提示,保留未读态,不删除消息项。

Scenario: 标记消息已读

  • Given 用户打开未读消息详情
  • When markMessageRead({ messageID }) 调用成功
  • Then 系统 MUST 将该消息视为已读并同步未读徽标。

Requirement: 删除消息

  • 系统 MUST 通过接口 03100212 支持删除消息。
  • 系统 MUST 在列表删除操作和详情页右上角更多菜单提供删除入口。
  • 系统 MUST 使用 wx.showModal 二次确认,标题"确认删除",内容"删除后将不再展示该消息"。
  • 系统 MUST 在失败时 toast 提示,并保留或恢复消息项。

Scenario: 删除消息

  • Given 用户在列表或详情页点击删除消息
  • When 用户确认删除且接口成功
  • Then 系统 MUST 从当前列表中移除该消息并刷新未读徽标。

Requirement: 动态跳转白名单

  • 所有 jumpPages MUST 经过 utils/messageJumpRouter.jsresolveJumpTarget(jumpPages)
  • 命中规则:优先匹配 eventCode === '2004'/pages/tabBar/order/order;否则 routePath 必须在 utils/homeRoute.js 的白名单内。
  • 非法路径:toast 提示"暂不支持打开该消息",不跳转,不暴露原始路径。
  • 01030009 菜单:仅渲染 routePath 在白名单内的项;其余项隐藏。

Scenario: eventCode 2004 命中订单 tab

  • Given 后端返回 { eventCode: '2004', params: { ... } }
  • When 用户点击消息
  • Then resolveJumpTarget 返回 { kind: 'tab', path: '/pages/tabBar/order/order', params },调用 navigateToRoutewx.switchTab

Scenario: 非法 routePath 兜底

  • Given 后端返回 { routePath: '/pages/unknown/page' }
  • When 用户点击消息
  • Then resolveJumpTarget 返回 null;调用方展示 wx.showToast({ title: '暂不支持打开该消息', icon: 'none' })

Requirement: tabBar 徽标

  • 系统 MUST 使用 unreadBadge.syncMessageUnread(count) 写入 getApp().globalData.tabBarSettings.messageUnreadCount
  • 系统 MUST 触发 getTabBar().refresh() 刷新徽标。
  • 系统 MUST 在列表加载完成、详情已读回调、删除成功后同步未读数。

Scenario: 同步 tabBar 未读徽标

  • Given 消息列表加载完成并返回未读数
  • When 系统调用 syncMessageUnread(count)
  • Then tabBar MUST 展示最新消息未读徽标。