mahjong_group/docs/1.0.0/历史需求/站内信需求.md
2026-01-01 14:39:23 +08:00

94 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 新功能需求文档
## 1. 增加新功能
- 1.1 站内信
---
## 1.1 站内信
### (1) 入口
1. **位置**
- 在 App/小程序的 **“我的”页面** → **功能区**,新增站内信入口 **【我的消息】**。
2. **红点提示**
- 当存在未读消息时,入口 icon 右上角显示 **红色圆点**(数量可扩展为数字气泡)。
- 进入站内信页面后,红点消失(默认已读所有消息)。
---
### (2) 详情页(站内信列表页)
#### 2.1 页面结构
- 顶部导航栏:
- 左侧返回按钮(返回上一级页面)
- 中间标题文字:“我的消息”
- 右侧占位元素(保持左右对称布局)
- Tab 分类栏:
- 位于标题下方,支持切换 **“全部”** 与 **“私信”** 两类消息。
- 当前选中 Tab 高亮显示(背景色 `#C4FFDF`、文字色 `#00AC4E`、边框色 `#00AC4E`),未选中 Tab 为白底黑字灰框。
- 分割线Tab 分类栏下方有一条 1rpx 高的浅灰色分割线。
- 消息列表区域:
- 占满剩余屏幕高度,支持纵向滚动。
- 列表为空时显示缺省提示(后期可补充)。
#### 2.2 消息列表排序
- 所有通知按 **最近时间倒序** 排列(最新发布的消息排在最前)。
#### 2.3 单条消息展示字段
每条消息以 **圆角白色卡片** 形式呈现,包含以下信息:
1. **标题**
- 字体大小 32rpx靠左显示距左边距 30rpx顶部间距 22rpx。
2. **正文**
- 字体大小 32rpx实际可根据视觉稿调整为 28rpx 以提升可读性),靠左显示,距左边距 30rpx与标题间距 10rpx。
- 正文支持长文本:
- 若内容超出卡片宽度,自动换行。
- 若内容高度超出卡片可视范围,卡片高度自动延伸或内部可滚动查看(确保完整显示)。
3. **通知时间**
- 字体大小 32rpx建议实际用 2428rpx靠右显示右外边距 18rpx底部边距 10rpx与正文之间保留适当间距如 70rpx 或由内容自适应)。
- 时间格式示例:`2025/01/01 11:12`(后期统一规范为 `YYYY-MM-DD HH:mm`)。
#### 2.4 默认已读逻辑
- 用户 **进入站内信列表页** 时,系统自动将所有消息标记为已读:
- 前端调用接口将当前用户所有未读消息状态更新为已读。
- 同时更新入口红点状态为无未读。
---
### (3) 通知发送(后台功能,前端配合展示)
#### 3.1 后台配置能力
- 管理员可在后台配置通知的发送规则与内容。
- 通知分为 **自动发送****手动发送** 两类。
#### 3.2 自动发送
- 定义固定的触发条件和消息模板。触发条件满足时,系统自动向目标用户推送通知。
- 已知自动发送场景(可扩展):
1. **组局成功时**:所有参与人收到相应通知。
2. **组局失败时**:所有参与人收到相应通知。
3. ……(待补充其他业务事件,如活动开始提醒、订单状态变更等)
#### 3.3 手动发送
- 管理员可手动选择:
1. **单个或多个指定用户**:发送相同内容的自定义通知。
2. **全部用户**:发送相同内容的自定义通知。
- 通知内容完全由发送者自定义(标题、正文)。
#### 3.4 前端展示区分(可扩展)
- 若业务需要,可在消息列表中通过标签或图标区分 **系统自动通知****私信/人工通知**
- Tab “私信” 仅展示手动发送给指定用户的消息,“全部” 则展示所有类型。
---
### (4) 数据来源与交互
- 前端通过接口获取消息列表,按 Tab 分类请求不同类型数据。
- 切换 Tab 时重新拉取对应分类消息并渲染。
- 列表数据字段至少包括:
- `id`(唯一标识)
- `title`(标题)
- `content`(正文)
- `time`(通知时间)
- `isRead`(是否已读,用于标记样式或逻辑)
- `type`(可选,用于区分自动/手动或私信/系统)
---