2726 lines
32 KiB
Markdown
2726 lines
32 KiB
Markdown
# 丹阳公益婚恋服务平台
|
||||
|
|
# V1.0 前端信息架构、路由与状态管理设计
|
|||
|
|
|
|||
|
|
版本:V1.0
|
|||
|
|
适用范围:微信小程序用户端、公益红娘工作台、运营管理后台
|
|||
|
|
目标:统一页面组织、路由规则、登录态、审核态、婚恋状态、缓存策略、消息未读、表单草稿与异常跳转逻辑
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一章 设计目标
|
|||
|
|
|
|||
|
|
本文件主要解决四类问题:
|
|||
|
|
|
|||
|
|
1. 用户从哪里进入、下一步去哪
|
|||
|
|
2. 不同账号状态下可以访问哪些页面
|
|||
|
|
3. 页面之间如何统一跳转
|
|||
|
|
4. 前端状态、缓存、表单草稿和消息如何管理
|
|||
|
|
|
|||
|
|
V1.0必须避免:
|
|||
|
|
|
|||
|
|
- 页面之间互相乱跳
|
|||
|
|
- 登录态丢失
|
|||
|
|
- 审核中还能进入匹配页
|
|||
|
|
- 已封禁用户仍能聊天
|
|||
|
|
- 已成功牵手仍被持续推荐
|
|||
|
|
- 用户填一半资料退出后全部丢失
|
|||
|
|
- 消息未读数量不一致
|
|||
|
|
- 页面各自维护一套用户状态
|
|||
|
|
- 后台刷新页面后上下文丢失
|
|||
|
|
|
|||
|
|
核心原则:
|
|||
|
|
|
|||
|
|
> **路由由状态决定,页面不能自己猜状态。**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第二章 前端整体信息架构
|
|||
|
|
|
|||
|
|
前端分为三个独立应用域。
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
丹阳公益婚恋服务平台
|
|||
|
|
│
|
|||
|
|
├── 微信小程序用户端
|
|||
|
|
│
|
|||
|
|
├── 公益红娘工作台
|
|||
|
|
│
|
|||
|
|
└── 运营管理后台
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
三个端共享:
|
|||
|
|
|
|||
|
|
- 用户基础数据定义
|
|||
|
|
- 状态枚举
|
|||
|
|
- 权限模型
|
|||
|
|
- API规范
|
|||
|
|
- Design Token
|
|||
|
|
- 部分通用业务规则
|
|||
|
|
|
|||
|
|
但路由和状态容器独立。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第三章 用户端信息架构
|
|||
|
|
|
|||
|
|
用户端一级结构保持:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
首页
|
|||
|
|
找对象
|
|||
|
|
消息
|
|||
|
|
活动
|
|||
|
|
我的
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
底部Tab只对以下用户开放:
|
|||
|
|
|
|||
|
|
> 已登录 + 已实名 + 已完成资料 + 已审核通过 + 账号正常
|
|||
|
|
|
|||
|
|
其他状态用户不进入完整Tab体系。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第四章 用户端路由分层
|
|||
|
|
|
|||
|
|
建议将页面分成六类。
|
|||
|
|
|
|||
|
|
## 4.1 启动与身份类
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
启动
|
|||
|
|
登录
|
|||
|
|
绑定手机号
|
|||
|
|
实名认证说明
|
|||
|
|
实名认证
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.2 新手资料类
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
基础资料
|
|||
|
|
生活资料
|
|||
|
|
照片上传
|
|||
|
|
婚恋态度
|
|||
|
|
择偶条件
|
|||
|
|
资料确认
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.3 审核状态类
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
审核中
|
|||
|
|
审核退回
|
|||
|
|
账号受限
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.4 主业务类
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
首页
|
|||
|
|
找对象
|
|||
|
|
用户详情
|
|||
|
|
我的缘分
|
|||
|
|
消息
|
|||
|
|
聊天
|
|||
|
|
活动
|
|||
|
|
公益红娘
|
|||
|
|
我的
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.5 设置与辅助类
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
我的资料
|
|||
|
|
我的择偶条件
|
|||
|
|
婚恋状态
|
|||
|
|
隐私设置
|
|||
|
|
黑名单
|
|||
|
|
系统通知
|
|||
|
|
帮助中心
|
|||
|
|
意见反馈
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.6 业务详情类
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
活动详情
|
|||
|
|
活动报名
|
|||
|
|
活动签到
|
|||
|
|
红娘服务详情
|
|||
|
|
红娘推荐
|
|||
|
|
举报
|
|||
|
|
解除匹配
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第五章 用户端路由命名建议
|
|||
|
|
|
|||
|
|
微信小程序目录建议:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
pages/
|
|||
|
|
launch/
|
|||
|
|
login/
|
|||
|
|
phone/
|
|||
|
|
verification-intro/
|
|||
|
|
verification/
|
|||
|
|
|
|||
|
|
onboarding/
|
|||
|
|
basic-profile/
|
|||
|
|
lifestyle/
|
|||
|
|
photos/
|
|||
|
|
relationship-intent/
|
|||
|
|
partner-preference/
|
|||
|
|
review-submit/
|
|||
|
|
|
|||
|
|
review/
|
|||
|
|
pending/
|
|||
|
|
rejected/
|
|||
|
|
|
|||
|
|
home/
|
|||
|
|
discover/
|
|||
|
|
profile-detail/
|
|||
|
|
match/
|
|||
|
|
messages/
|
|||
|
|
chat/
|
|||
|
|
activities/
|
|||
|
|
matchmaker/
|
|||
|
|
mine/
|
|||
|
|
|
|||
|
|
settings/
|
|||
|
|
profile/
|
|||
|
|
partner-preference/
|
|||
|
|
relationship-status/
|
|||
|
|
privacy/
|
|||
|
|
blacklist/
|
|||
|
|
notifications/
|
|||
|
|
help/
|
|||
|
|
feedback/
|
|||
|
|
|
|||
|
|
safety/
|
|||
|
|
report/
|
|||
|
|
restricted/
|
|||
|
|
|
|||
|
|
activity/
|
|||
|
|
detail/
|
|||
|
|
apply/
|
|||
|
|
checkin/
|
|||
|
|
|
|||
|
|
matchmaker/
|
|||
|
|
apply/
|
|||
|
|
progress/
|
|||
|
|
recommendation/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第六章 用户端核心状态模型
|
|||
|
|
|
|||
|
|
前端必须维护一份统一用户状态。
|
|||
|
|
|
|||
|
|
建议:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
UserState
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
至少包含:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
isLoggedIn
|
|||
|
|
hasPhone
|
|||
|
|
isRealNameVerified
|
|||
|
|
profileCompletionStatus
|
|||
|
|
profileReviewStatus
|
|||
|
|
accountStatus
|
|||
|
|
relationshipStatus
|
|||
|
|
recommendationEnabled
|
|||
|
|
searchVisibility
|
|||
|
|
matchmakerEnabled
|
|||
|
|
activityRecommendationEnabled
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第七章 profileCompletionStatus
|
|||
|
|
|
|||
|
|
建议枚举:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
not_started
|
|||
|
|
in_progress
|
|||
|
|
completed
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
含义:
|
|||
|
|
|
|||
|
|
## not_started
|
|||
|
|
|
|||
|
|
未开始填写资料。
|
|||
|
|
|
|||
|
|
## in_progress
|
|||
|
|
|
|||
|
|
已开始但未完成。
|
|||
|
|
|
|||
|
|
## completed
|
|||
|
|
|
|||
|
|
资料已经完成,可以提交审核。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第八章 profileReviewStatus
|
|||
|
|
|
|||
|
|
统一枚举:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
not_submitted
|
|||
|
|
pending
|
|||
|
|
approved
|
|||
|
|
need_edit
|
|||
|
|
rejected
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
含义:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
not_submitted = 尚未提交
|
|||
|
|
pending = 审核中
|
|||
|
|
approved = 已通过
|
|||
|
|
need_edit = 需修改
|
|||
|
|
rejected = 拒绝
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第九章 accountStatus
|
|||
|
|
|
|||
|
|
建议:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
normal
|
|||
|
|
reviewing_risk
|
|||
|
|
limited
|
|||
|
|
suspended
|
|||
|
|
banned
|
|||
|
|
closed
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
含义:
|
|||
|
|
|
|||
|
|
- normal:正常
|
|||
|
|
- reviewing_risk:风险审核中
|
|||
|
|
- limited:部分功能限制
|
|||
|
|
- suspended:暂停
|
|||
|
|
- banned:封禁
|
|||
|
|
- closed:账户关闭/注销
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第十章 relationshipStatus
|
|||
|
|
|
|||
|
|
婚恋状态统一定义:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
searching
|
|||
|
|
getting_to_know
|
|||
|
|
paused
|
|||
|
|
matched_successfully
|
|||
|
|
service_exited
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
分别对应:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
正在寻找
|
|||
|
|
正在了解
|
|||
|
|
暂停寻找
|
|||
|
|
成功牵手
|
|||
|
|
退出婚恋服务
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第十一章 启动路由守卫
|
|||
|
|
|
|||
|
|
用户每次打开小程序,都先经过统一启动判断。
|
|||
|
|
|
|||
|
|
流程:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
启动
|
|||
|
|
↓
|
|||
|
|
检查本地Token
|
|||
|
|
↓
|
|||
|
|
Token存在?
|
|||
|
|
├─ 否 → 登录页
|
|||
|
|
└─ 是
|
|||
|
|
↓
|
|||
|
|
拉取当前用户状态
|
|||
|
|
↓
|
|||
|
|
根据状态决定首页
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第十二章 全局路由判断顺序
|
|||
|
|
|
|||
|
|
建议严格按照以下优先级。
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
1. 是否登录
|
|||
|
|
2. 是否绑定手机号
|
|||
|
|
3. 是否实名认证
|
|||
|
|
4. 是否完成资料
|
|||
|
|
5. 是否提交审核
|
|||
|
|
6. 审核结果
|
|||
|
|
7. 账号风险状态
|
|||
|
|
8. 婚恋服务状态
|
|||
|
|
9. 正常进入业务页
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
不要颠倒。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第十三章 启动页状态跳转表
|
|||
|
|
|
|||
|
|
| 状态 | 默认进入 |
|
|||
|
|
|---|---|
|
|||
|
|
| 未登录 | 登录页 |
|
|||
|
|
| 已登录未绑定手机号 | 手机号绑定 |
|
|||
|
|
| 已绑定未实名 | 实名认证说明 |
|
|||
|
|
| 已实名资料未完成 | 上次未完成步骤 |
|
|||
|
|
| 资料完成未提交 | 资料确认 |
|
|||
|
|
| 审核中 | 审核中 |
|
|||
|
|
| 需修改 | 审核退回 |
|
|||
|
|
| 审核拒绝 | 审核退回/账号说明 |
|
|||
|
|
| 风险审核中 | 账号受限 |
|
|||
|
|
| 账号封禁 | 账号受限 |
|
|||
|
|
| 审核通过正常用户 | 首页 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第十四章 新手资料流程路由
|
|||
|
|
|
|||
|
|
资料填写步骤建议固定:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
step1 基础资料
|
|||
|
|
↓
|
|||
|
|
step2 生活资料
|
|||
|
|
↓
|
|||
|
|
step3 照片
|
|||
|
|
↓
|
|||
|
|
step4 婚恋态度
|
|||
|
|
↓
|
|||
|
|
step5 择偶条件
|
|||
|
|
↓
|
|||
|
|
资料确认
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
系统记录:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
onboardingCurrentStep
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第十五章 新手流程断点续填
|
|||
|
|
|
|||
|
|
用户在任一步骤退出:
|
|||
|
|
|
|||
|
|
前端必须保存:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
当前步骤
|
|||
|
|
已填写字段
|
|||
|
|
本地草稿时间
|
|||
|
|
服务端草稿状态
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
重新进入:
|
|||
|
|
|
|||
|
|
> 自动回到上次未完成步骤。
|
|||
|
|
|
|||
|
|
不要求用户重新开始。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第十六章 草稿保存策略
|
|||
|
|
|
|||
|
|
建议采用:
|
|||
|
|
|
|||
|
|
> 本地即时保存 + 服务端阶段性保存
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 16.1 本地保存
|
|||
|
|
|
|||
|
|
每次字段修改:
|
|||
|
|
|
|||
|
|
可采用轻量防抖后保存。
|
|||
|
|
|
|||
|
|
用于:
|
|||
|
|
|
|||
|
|
- 断网
|
|||
|
|
- 临时退出
|
|||
|
|
- 页面切换
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 16.2 服务端保存
|
|||
|
|
|
|||
|
|
用户点击:
|
|||
|
|
|
|||
|
|
> 下一步
|
|||
|
|
|
|||
|
|
时保存当前步骤。
|
|||
|
|
|
|||
|
|
这样即使换设备也可以继续。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第十七章 草稿冲突处理
|
|||
|
|
|
|||
|
|
如果:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
本地草稿更新时间 > 服务端草稿更新时间
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
优先本地。
|
|||
|
|
|
|||
|
|
如果:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
服务端更新时间 > 本地
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
优先服务端。
|
|||
|
|
|
|||
|
|
如差异较大:
|
|||
|
|
|
|||
|
|
可提示:
|
|||
|
|
|
|||
|
|
> 检测到较新的资料版本,已为你恢复。
|
|||
|
|
|
|||
|
|
V1不需要做复杂版本合并。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第十八章 Tab路由规则
|
|||
|
|
|
|||
|
|
底部五个Tab:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
/home
|
|||
|
|
/discover
|
|||
|
|
/messages
|
|||
|
|
/activities
|
|||
|
|
/mine
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
只能使用:
|
|||
|
|
|
|||
|
|
> switchTab
|
|||
|
|
|
|||
|
|
不能通过普通push形成多层Tab堆栈。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第十九章 Tab访问守卫
|
|||
|
|
|
|||
|
|
只有以下条件同时成立:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
isLoggedIn = true
|
|||
|
|
isRealNameVerified = true
|
|||
|
|
profileReviewStatus = approved
|
|||
|
|
accountStatus = normal
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
才允许进入主Tab。
|
|||
|
|
|
|||
|
|
否则统一重定向。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第二十章 首页状态
|
|||
|
|
|
|||
|
|
首页主要依赖:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
recommendationList
|
|||
|
|
recommendationCursor
|
|||
|
|
todayViewedCount
|
|||
|
|
dailyRecommendationLimit
|
|||
|
|
relationshipStatus
|
|||
|
|
recommendationEnabled
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第二十一章 首页推荐状态机
|
|||
|
|
|
|||
|
|
建议:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
idle
|
|||
|
|
loading
|
|||
|
|
loaded
|
|||
|
|
empty
|
|||
|
|
finished
|
|||
|
|
error
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## idle
|
|||
|
|
|
|||
|
|
尚未请求。
|
|||
|
|
|
|||
|
|
## loading
|
|||
|
|
|
|||
|
|
正在加载。
|
|||
|
|
|
|||
|
|
## loaded
|
|||
|
|
|
|||
|
|
有候选人。
|
|||
|
|
|
|||
|
|
## empty
|
|||
|
|
|
|||
|
|
暂时无候选人。
|
|||
|
|
|
|||
|
|
## finished
|
|||
|
|
|
|||
|
|
今日推荐已浏览完。
|
|||
|
|
|
|||
|
|
## error
|
|||
|
|
|
|||
|
|
请求失败。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第二十二章 推荐卡片操作状态
|
|||
|
|
|
|||
|
|
单个推荐用户关系状态:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
neutral
|
|||
|
|
liked
|
|||
|
|
passed
|
|||
|
|
mutual_match
|
|||
|
|
blocked
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
页面只根据关系状态展示按钮。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第二十三章 喜欢操作逻辑
|
|||
|
|
|
|||
|
|
点击喜欢:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
检查登录
|
|||
|
|
↓
|
|||
|
|
检查审核状态
|
|||
|
|
↓
|
|||
|
|
检查自身婚恋状态
|
|||
|
|
↓
|
|||
|
|
检查对方状态
|
|||
|
|
↓
|
|||
|
|
调用喜欢接口
|
|||
|
|
↓
|
|||
|
|
返回关系状态
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
如果:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
mutual_match = false
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Toast:
|
|||
|
|
|
|||
|
|
> 已表达喜欢。
|
|||
|
|
|
|||
|
|
如果:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
mutual_match = true
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
进入双向匹配成功页。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第二十四章 喜欢防重复
|
|||
|
|
|
|||
|
|
前端状态:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
likeSubmitting = true
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
提交过程中按钮不可重复点击。
|
|||
|
|
|
|||
|
|
后端仍需幂等。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第二十五章 不合适状态
|
|||
|
|
|
|||
|
|
点击:
|
|||
|
|
|
|||
|
|
> 不合适
|
|||
|
|
|
|||
|
|
状态立即:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
passed
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
然后切下一人。
|
|||
|
|
|
|||
|
|
失败时:
|
|||
|
|
|
|||
|
|
恢复原卡片状态并提示:
|
|||
|
|
|
|||
|
|
> 操作失败,请重试。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第二十六章 找对象状态
|
|||
|
|
|
|||
|
|
需要保存:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
discoverFilters
|
|||
|
|
discoverSort
|
|||
|
|
discoverPage
|
|||
|
|
discoverScrollPosition
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
用户进入某个详情后返回:
|
|||
|
|
|
|||
|
|
> 尽可能恢复原列表位置。
|
|||
|
|
|
|||
|
|
避免重新回到顶部。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第二十七章 筛选条件状态
|
|||
|
|
|
|||
|
|
分两层:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
savedPreference
|
|||
|
|
temporaryFilter
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## savedPreference
|
|||
|
|
|
|||
|
|
用户“我的择偶条件”。
|
|||
|
|
|
|||
|
|
用于:
|
|||
|
|
|
|||
|
|
> 系统匹配。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## temporaryFilter
|
|||
|
|
|
|||
|
|
用户“找对象”当前临时筛选。
|
|||
|
|
|
|||
|
|
只影响当前浏览。
|
|||
|
|
|
|||
|
|
不能自动覆盖择偶条件。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第二十八章 筛选条件退出处理
|
|||
|
|
|
|||
|
|
用户修改临时筛选但未点击:
|
|||
|
|
|
|||
|
|
> 查看结果
|
|||
|
|
|
|||
|
|
直接返回:
|
|||
|
|
|
|||
|
|
> 不保存本次修改。
|
|||
|
|
|
|||
|
|
用户点击:
|
|||
|
|
|
|||
|
|
> 查看结果
|
|||
|
|
|
|||
|
|
才写入当前页面状态。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第二十九章 用户详情状态
|
|||
|
|
|
|||
|
|
页面需要:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
profileData
|
|||
|
|
relationStatus
|
|||
|
|
isBlocked
|
|||
|
|
isReported
|
|||
|
|
canChat
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
底部操作根据 relationStatus 自动改变。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第三十章 用户详情访问异常
|
|||
|
|
|
|||
|
|
如果对方:
|
|||
|
|
|
|||
|
|
- 被封禁
|
|||
|
|
- 删除账号
|
|||
|
|
- 暂停对外展示
|
|||
|
|
- 已拉黑当前用户
|
|||
|
|
|
|||
|
|
显示:
|
|||
|
|
|
|||
|
|
> 该用户当前不可查看。
|
|||
|
|
|
|||
|
|
不要显示旧资料。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第三十一章 我的缘分状态
|
|||
|
|
|
|||
|
|
三个列表独立缓存:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
mutualList
|
|||
|
|
likedByMeList
|
|||
|
|
likedMeList
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
分别维护:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
loading
|
|||
|
|
hasMore
|
|||
|
|
cursor
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第三十二章 消息模块状态
|
|||
|
|
|
|||
|
|
建议全局维护:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
chatUnreadCount
|
|||
|
|
systemUnreadCount
|
|||
|
|
totalUnreadCount
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Bottom Tab的消息Badge取:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
totalUnreadCount
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第三十三章 未读数单一来源
|
|||
|
|
|
|||
|
|
不能:
|
|||
|
|
|
|||
|
|
> 聊天页自己算一个
|
|||
|
|
|
|||
|
|
> Tab自己算一个
|
|||
|
|
|
|||
|
|
> 系统通知自己算一个
|
|||
|
|
|
|||
|
|
统一由全局消息状态维护。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第三十四章 消息未读同步
|
|||
|
|
|
|||
|
|
以下场景刷新:
|
|||
|
|
|
|||
|
|
- App启动
|
|||
|
|
- 消息页进入
|
|||
|
|
- 聊天消息收到
|
|||
|
|
- 用户阅读聊天
|
|||
|
|
- 系统通知已读
|
|||
|
|
- 小程序重新回到前台
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第三十五章 聊天会话状态
|
|||
|
|
|
|||
|
|
每个会话至少:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
conversationId
|
|||
|
|
targetUserId
|
|||
|
|
relationStatus
|
|||
|
|
lastMessage
|
|||
|
|
lastMessageAt
|
|||
|
|
unreadCount
|
|||
|
|
canSendMessage
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第三十六章 canSendMessage逻辑
|
|||
|
|
|
|||
|
|
只有:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
relationStatus = mutual_match
|
|||
|
|
AND
|
|||
|
|
双方账号正常
|
|||
|
|
AND
|
|||
|
|
双方未拉黑
|
|||
|
|
AND
|
|||
|
|
匹配未解除
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
才能发送。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第三十七章 聊天输入草稿
|
|||
|
|
|
|||
|
|
每个conversation保存:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
chatDraft[conversationId]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
用户切换页面后再回来:
|
|||
|
|
|
|||
|
|
> 恢复未发送文字。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第三十八章 聊天历史缓存
|
|||
|
|
|
|||
|
|
V1建议:
|
|||
|
|
|
|||
|
|
> 当前会话最近一部分消息内存缓存。
|
|||
|
|
|
|||
|
|
长期历史:
|
|||
|
|
|
|||
|
|
> 从服务端分页加载。
|
|||
|
|
|
|||
|
|
不要长期把大量聊天记录放本地Storage。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第三十九章 解除匹配后的状态更新
|
|||
|
|
|
|||
|
|
成功解除:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
relationStatus = unmatched
|
|||
|
|
canSendMessage = false
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
同时:
|
|||
|
|
|
|||
|
|
- 聊天输入框禁用
|
|||
|
|
- 聊天列表可转历史或隐藏
|
|||
|
|
- 用户详情按钮恢复为不可聊天状态
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第四十章 拉黑后的全局影响
|
|||
|
|
|
|||
|
|
拉黑成功后立即更新:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
blockedUsers
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
并从以下列表移除:
|
|||
|
|
|
|||
|
|
- 首页推荐
|
|||
|
|
- 找对象
|
|||
|
|
- 喜欢列表
|
|||
|
|
- 聊天列表可见关系
|
|||
|
|
- 红娘普通候选
|
|||
|
|
|
|||
|
|
不要等下次刷新。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第四十一章 举报状态
|
|||
|
|
|
|||
|
|
举报后不强制拉黑。
|
|||
|
|
|
|||
|
|
前端保存:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
reportedUserIds
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
主要用于:
|
|||
|
|
|
|||
|
|
> 防止重复误报提示。
|
|||
|
|
|
|||
|
|
但允许用户再次提交新的举报事项时由后端判断。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第四十二章 活动模块状态
|
|||
|
|
|
|||
|
|
全局/页面状态:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
activityList
|
|||
|
|
myActivities
|
|||
|
|
activityFilters
|
|||
|
|
currentActivity
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第四十三章 活动详情状态
|
|||
|
|
|
|||
|
|
包含:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
activityStatus
|
|||
|
|
registrationStatus
|
|||
|
|
checkinStatus
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第四十四章 activityStatus
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
draft
|
|||
|
|
registration_open
|
|||
|
|
registration_closed
|
|||
|
|
ongoing
|
|||
|
|
ended
|
|||
|
|
cancelled
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
用户端只会看到已发布活动。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第四十五章 registrationStatus
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
not_applied
|
|||
|
|
pending
|
|||
|
|
approved
|
|||
|
|
rejected
|
|||
|
|
cancelled
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
按钮根据状态自动变化。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第四十六章 活动报名按钮状态
|
|||
|
|
|
|||
|
|
| 状态 | 按钮 |
|
|||
|
|
|---|---|
|
|||
|
|
| 未报名 | 立即报名 |
|
|||
|
|
| 审核中 | 报名审核中 |
|
|||
|
|
| 已通过 | 报名成功 |
|
|||
|
|
| 已拒绝 | 查看原因 |
|
|||
|
|
| 已满 | 报名已满 |
|
|||
|
|
| 已截止 | 报名已结束 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第四十七章 活动签到状态
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
not_checked_in
|
|||
|
|
checked_in
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
只有:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
registrationStatus = approved
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
才显示签到码。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第四十八章 公益红娘状态
|
|||
|
|
|
|||
|
|
建议:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
matchmakerServiceList
|
|||
|
|
currentService
|
|||
|
|
matchmakerRecommendations
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第四十九章 红娘服务状态枚举
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
submitted
|
|||
|
|
assigned
|
|||
|
|
in_service
|
|||
|
|
waiting_user
|
|||
|
|
completed
|
|||
|
|
cancelled
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第五十章 红娘推荐状态
|
|||
|
|
|
|||
|
|
每条推荐:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
pending_view
|
|||
|
|
viewed
|
|||
|
|
liked
|
|||
|
|
passed
|
|||
|
|
mutual_match
|
|||
|
|
expired
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第五十一章 我的模块状态
|
|||
|
|
|
|||
|
|
建议用户主状态集中在:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
UserStore
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
包括:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
profile
|
|||
|
|
verification
|
|||
|
|
review
|
|||
|
|
relationship
|
|||
|
|
privacy
|
|||
|
|
account
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
不让“我的”页面自行维护一份独立用户数据。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第五十二章 用户资料缓存
|
|||
|
|
|
|||
|
|
建议:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
currentUserProfile
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
缓存时间可较短。
|
|||
|
|
|
|||
|
|
以下操作成功后立即更新:
|
|||
|
|
|
|||
|
|
- 修改资料
|
|||
|
|
- 修改择偶条件
|
|||
|
|
- 修改婚恋状态
|
|||
|
|
- 修改隐私
|
|||
|
|
- 资料审核结果改变
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第五十三章 婚恋状态全局影响
|
|||
|
|
|
|||
|
|
relationshipStatus变化必须立即影响:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
首页
|
|||
|
|
推荐池
|
|||
|
|
找对象曝光
|
|||
|
|
系统推荐
|
|||
|
|
消息提示
|
|||
|
|
我的状态
|
|||
|
|
红娘候选
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第五十四章 searching状态
|
|||
|
|
|
|||
|
|
允许:
|
|||
|
|
|
|||
|
|
- 推荐
|
|||
|
|
- 找对象
|
|||
|
|
- 被别人看到
|
|||
|
|
- 喜欢
|
|||
|
|
- 红娘推荐
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第五十五章 getting_to_know状态
|
|||
|
|
|
|||
|
|
根据:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
recommendationEnabled
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
决定是否继续推荐。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第五十六章 paused状态
|
|||
|
|
|
|||
|
|
默认:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
recommendationEnabled = false
|
|||
|
|
searchVisibility = false
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
不能继续被系统推荐。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第五十七章 matched_successfully状态
|
|||
|
|
|
|||
|
|
默认:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
recommendationEnabled = false
|
|||
|
|
searchVisibility = false
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
但:
|
|||
|
|
|
|||
|
|
> 已有聊天可保留。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第五十八章 service_exited状态
|
|||
|
|
|
|||
|
|
关闭婚恋核心入口。
|
|||
|
|
|
|||
|
|
用户仍可以:
|
|||
|
|
|
|||
|
|
- 查看账号
|
|||
|
|
- 查看历史活动
|
|||
|
|
- 修改隐私
|
|||
|
|
- 帮助反馈
|
|||
|
|
|
|||
|
|
不能:
|
|||
|
|
|
|||
|
|
- 找对象
|
|||
|
|
- 喜欢
|
|||
|
|
- 被推荐
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第五十九章 隐私状态
|
|||
|
|
|
|||
|
|
建议独立:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
PrivacySettings
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
包含:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
visibleInRecommendations
|
|||
|
|
visibleInSearch
|
|||
|
|
showOccupation
|
|||
|
|
showLifestylePhotos
|
|||
|
|
receiveActivityRecommendations
|
|||
|
|
acceptMatchmakerRecommendations
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第六十章 隐私修改策略
|
|||
|
|
|
|||
|
|
用户切换Switch:
|
|||
|
|
|
|||
|
|
V1建议:
|
|||
|
|
|
|||
|
|
> 立即保存。
|
|||
|
|
|
|||
|
|
失败:
|
|||
|
|
|
|||
|
|
恢复原状态。
|
|||
|
|
|
|||
|
|
不要让用户改很多项后还需要找到页面底部“保存”。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第六十一章 全局Store建议
|
|||
|
|
|
|||
|
|
小程序建议至少拆:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
AuthStore
|
|||
|
|
UserStore
|
|||
|
|
MatchStore
|
|||
|
|
MessageStore
|
|||
|
|
ActivityStore
|
|||
|
|
MatchmakerStore
|
|||
|
|
AppStore
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第六十二章 AuthStore
|
|||
|
|
|
|||
|
|
负责:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
token
|
|||
|
|
loginStatus
|
|||
|
|
phoneBinding
|
|||
|
|
sessionExpired
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第六十三章 UserStore
|
|||
|
|
|
|||
|
|
负责:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
profile
|
|||
|
|
verificationStatus
|
|||
|
|
reviewStatus
|
|||
|
|
accountStatus
|
|||
|
|
relationshipStatus
|
|||
|
|
privacySettings
|
|||
|
|
profileCompletion
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第六十四章 MatchStore
|
|||
|
|
|
|||
|
|
负责:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
todayRecommendations
|
|||
|
|
discoverFilters
|
|||
|
|
mutualMatches
|
|||
|
|
likedByMe
|
|||
|
|
likedMe
|
|||
|
|
blockedUsers
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第六十五章 MessageStore
|
|||
|
|
|
|||
|
|
负责:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
conversations
|
|||
|
|
chatUnreadCount
|
|||
|
|
systemUnreadCount
|
|||
|
|
totalUnreadCount
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第六十六章 ActivityStore
|
|||
|
|
|
|||
|
|
负责:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
activityList
|
|||
|
|
myActivities
|
|||
|
|
currentActivity
|
|||
|
|
registrationStatus
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第六十七章 MatchmakerStore
|
|||
|
|
|
|||
|
|
负责:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
services
|
|||
|
|
currentService
|
|||
|
|
recommendations
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第六十八章 AppStore
|
|||
|
|
|
|||
|
|
负责:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
appConfig
|
|||
|
|
networkStatus
|
|||
|
|
appVersion
|
|||
|
|
maintenanceStatus
|
|||
|
|
featureFlags
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第六十九章 状态管理原则
|
|||
|
|
|
|||
|
|
## 页面临时状态
|
|||
|
|
|
|||
|
|
放页面内部。
|
|||
|
|
|
|||
|
|
例如:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
当前弹窗是否打开
|
|||
|
|
输入框当前值
|
|||
|
|
当前Tab
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 跨页面业务状态
|
|||
|
|
|
|||
|
|
放Store。
|
|||
|
|
|
|||
|
|
例如:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
用户审核状态
|
|||
|
|
未读消息
|
|||
|
|
婚恋状态
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 服务端真实业务状态
|
|||
|
|
|
|||
|
|
最终以服务器为准。
|
|||
|
|
|
|||
|
|
Store只是前端缓存。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第七十章 本地Storage使用边界
|
|||
|
|
|
|||
|
|
适合保存:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
token
|
|||
|
|
轻量用户状态
|
|||
|
|
新手流程草稿
|
|||
|
|
临时筛选
|
|||
|
|
聊天输入草稿
|
|||
|
|
已关闭的新手提示
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
不适合长期保存:
|
|||
|
|
|
|||
|
|
- 身份证完整信息
|
|||
|
|
- 完整聊天历史
|
|||
|
|
- 敏感审核资料
|
|||
|
|
- 举报证据
|
|||
|
|
- 后台敏感权限数据
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第七十一章 Token存储
|
|||
|
|
|
|||
|
|
根据微信小程序实际认证方案执行。
|
|||
|
|
|
|||
|
|
原则:
|
|||
|
|
|
|||
|
|
- 不在页面参数传Token
|
|||
|
|
- 不写入日志
|
|||
|
|
- 不暴露在错误信息
|
|||
|
|
- 过期统一处理
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第七十二章 Session过期处理
|
|||
|
|
|
|||
|
|
接口返回统一未授权状态:
|
|||
|
|
|
|||
|
|
前端:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
清除失效会话
|
|||
|
|
↓
|
|||
|
|
保留安全的本地草稿
|
|||
|
|
↓
|
|||
|
|
跳登录
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
提示:
|
|||
|
|
|
|||
|
|
> 登录状态已过期,请重新登录。
|
|||
|
|
|
|||
|
|
重新登录后:
|
|||
|
|
|
|||
|
|
> 尽可能恢复之前业务入口。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第七十三章 路由回跳
|
|||
|
|
|
|||
|
|
登录前保存:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
redirectAfterLogin
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
但只允许白名单内部页面。
|
|||
|
|
|
|||
|
|
不能接受外部任意URL。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第七十四章 审核状态变化实时处理
|
|||
|
|
|
|||
|
|
例如用户正在“审核中”页面。
|
|||
|
|
|
|||
|
|
后台审核通过后:
|
|||
|
|
|
|||
|
|
用户重新进入前台或主动刷新:
|
|||
|
|
|
|||
|
|
> 自动更新状态。
|
|||
|
|
|
|||
|
|
然后显示:
|
|||
|
|
|
|||
|
|
> 资料已通过审核。
|
|||
|
|
|
|||
|
|
按钮:
|
|||
|
|
|
|||
|
|
> 开始寻找。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第七十五章 风控状态变化
|
|||
|
|
|
|||
|
|
如果用户使用过程中账号被限制:
|
|||
|
|
|
|||
|
|
下一次关键接口请求返回:
|
|||
|
|
|
|||
|
|
> ACCOUNT_LIMITED
|
|||
|
|
|
|||
|
|
前端立即:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
刷新UserStore
|
|||
|
|
↓
|
|||
|
|
关闭关键业务弹层
|
|||
|
|
↓
|
|||
|
|
跳账号受限页
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
不要继续允许交互。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第七十六章 Feature Flag
|
|||
|
|
|
|||
|
|
V1建议预留轻量功能开关。
|
|||
|
|
|
|||
|
|
例如:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
enableMatchmaker
|
|||
|
|
enableActivities
|
|||
|
|
enableImageChat
|
|||
|
|
enableRiskKeywordWarning
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
但不要建设复杂远程配置平台。
|
|||
|
|
|
|||
|
|
用于以后灰度/临时关闭即可。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第七十七章 系统维护状态
|
|||
|
|
|
|||
|
|
AppStore:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
maintenanceStatus
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
如果维护:
|
|||
|
|
|
|||
|
|
显示统一页面:
|
|||
|
|
|
|||
|
|
> 平台正在维护,请稍后再试。
|
|||
|
|
|
|||
|
|
不进入业务页。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第七十八章 网络状态
|
|||
|
|
|
|||
|
|
前端监听:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
online
|
|||
|
|
offline
|
|||
|
|
weak_network
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
断网时:
|
|||
|
|
|
|||
|
|
- 已填写表单继续本地保存
|
|||
|
|
- 提交操作提示网络异常
|
|||
|
|
- 不直接清空当前页面
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第七十九章 请求失败统一规范
|
|||
|
|
|
|||
|
|
业务请求错误分:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
network_error
|
|||
|
|
unauthorized
|
|||
|
|
forbidden
|
|||
|
|
business_error
|
|||
|
|
server_error
|
|||
|
|
maintenance
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
页面不直接展示后端原始message。
|
|||
|
|
|
|||
|
|
通过统一错误映射输出用户可理解文案。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第八十章 API错误码建议前端映射
|
|||
|
|
|
|||
|
|
示例:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
AUTH_EXPIRED
|
|||
|
|
PROFILE_NOT_APPROVED
|
|||
|
|
ACCOUNT_LIMITED
|
|||
|
|
TARGET_UNAVAILABLE
|
|||
|
|
MATCH_REQUIRED
|
|||
|
|
ACTIVITY_FULL
|
|||
|
|
ACTIVITY_CLOSED
|
|||
|
|
ALREADY_APPLIED
|
|||
|
|
DUPLICATE_ACTION
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第八十一章 PROFILE_NOT_APPROVED
|
|||
|
|
|
|||
|
|
统一处理:
|
|||
|
|
|
|||
|
|
> 当前资料尚未通过审核。
|
|||
|
|
|
|||
|
|
并跳:
|
|||
|
|
|
|||
|
|
> 审核状态页。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第八十二章 MATCH_REQUIRED
|
|||
|
|
|
|||
|
|
用户尝试访问聊天:
|
|||
|
|
|
|||
|
|
提示:
|
|||
|
|
|
|||
|
|
> 双方互相喜欢后才能开始聊天。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第八十三章 TARGET_UNAVAILABLE
|
|||
|
|
|
|||
|
|
对方已不可用:
|
|||
|
|
|
|||
|
|
> 该用户当前不可查看或联系。
|
|||
|
|
|
|||
|
|
返回上一页。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第八十四章 ACTIVITY_FULL
|
|||
|
|
|
|||
|
|
> 本次活动报名人数已满。
|
|||
|
|
|
|||
|
|
刷新活动状态。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第八十五章 数据刷新策略
|
|||
|
|
|
|||
|
|
建议:
|
|||
|
|
|
|||
|
|
## 启动时
|
|||
|
|
|
|||
|
|
刷新:
|
|||
|
|
|
|||
|
|
- 当前用户
|
|||
|
|
- 未读数
|
|||
|
|
- App配置
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 首页进入
|
|||
|
|
|
|||
|
|
刷新:
|
|||
|
|
|
|||
|
|
- 今日推荐摘要
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 消息进入
|
|||
|
|
|
|||
|
|
刷新:
|
|||
|
|
|
|||
|
|
- 会话列表
|
|||
|
|
- 未读数
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 我的进入
|
|||
|
|
|
|||
|
|
刷新:
|
|||
|
|
|
|||
|
|
- 用户核心状态
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第八十六章 页面缓存策略
|
|||
|
|
|
|||
|
|
适合保留:
|
|||
|
|
|
|||
|
|
- 找对象滚动位置
|
|||
|
|
- 筛选条件
|
|||
|
|
- 首页当前推荐位置
|
|||
|
|
- 活动列表当前位置
|
|||
|
|
|
|||
|
|
不建议强缓存:
|
|||
|
|
|
|||
|
|
- 用户详情
|
|||
|
|
- 风险状态
|
|||
|
|
- 审核状态
|
|||
|
|
|
|||
|
|
这些应较新。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第八十七章 页面返回行为
|
|||
|
|
|
|||
|
|
例如:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
找对象
|
|||
|
|
→ 用户详情
|
|||
|
|
→ 返回
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
恢复:
|
|||
|
|
|
|||
|
|
- 原筛选条件
|
|||
|
|
- 原列表
|
|||
|
|
- 原滚动位置
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第八十八章 Tab再次点击行为
|
|||
|
|
|
|||
|
|
再次点击当前Tab:
|
|||
|
|
|
|||
|
|
V1可以保持当前位置。
|
|||
|
|
|
|||
|
|
不强制:
|
|||
|
|
|
|||
|
|
> 自动滚到顶部。
|
|||
|
|
|
|||
|
|
以后如有需要再增加。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第八十九章 用户退出登录
|
|||
|
|
|
|||
|
|
点击退出:
|
|||
|
|
|
|||
|
|
二次确认。
|
|||
|
|
|
|||
|
|
成功:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
清除Token
|
|||
|
|
清除用户敏感缓存
|
|||
|
|
清除消息缓存
|
|||
|
|
保留非敏感App设置
|
|||
|
|
跳登录
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第九十章 注销账户
|
|||
|
|
|
|||
|
|
与退出登录不同。
|
|||
|
|
|
|||
|
|
注销属于后端业务。
|
|||
|
|
|
|||
|
|
前端不可只清缓存。
|
|||
|
|
|
|||
|
|
必须走:
|
|||
|
|
|
|||
|
|
> 账号注销流程。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第九十一章 红娘端路由架构
|
|||
|
|
|
|||
|
|
建议:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
/login
|
|||
|
|
/workbench
|
|||
|
|
/service-requests
|
|||
|
|
/service/:id
|
|||
|
|
/candidates/:userId
|
|||
|
|
/my-users
|
|||
|
|
/follow-ups
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第九十二章 红娘端权限守卫
|
|||
|
|
|
|||
|
|
进入任何业务路由前检查:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
isLoggedIn
|
|||
|
|
role
|
|||
|
|
organization
|
|||
|
|
accountStatus
|
|||
|
|
permission
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第九十三章 红娘端状态容器
|
|||
|
|
|
|||
|
|
建议:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
AuthStore
|
|||
|
|
OperatorStore
|
|||
|
|
ServiceStore
|
|||
|
|
UserSearchStore
|
|||
|
|
AppStore
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第九十四章 红娘工作台上下文
|
|||
|
|
|
|||
|
|
进入服务详情:
|
|||
|
|
|
|||
|
|
必须保存:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
serviceId
|
|||
|
|
userId
|
|||
|
|
assignedMatchmakerId
|
|||
|
|
serviceStatus
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
刷新页面后重新从URL参数恢复。
|
|||
|
|
|
|||
|
|
不要只放内存。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第九十五章 红娘候选人筛选状态
|
|||
|
|
|
|||
|
|
保存:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
candidateFilters
|
|||
|
|
candidateSort
|
|||
|
|
candidatePage
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
从候选详情返回:
|
|||
|
|
|
|||
|
|
> 恢复原位置。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第九十六章 后台路由架构
|
|||
|
|
|
|||
|
|
建议:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
/login
|
|||
|
|
/dashboard
|
|||
|
|
|
|||
|
|
/users
|
|||
|
|
/users/:id
|
|||
|
|
|
|||
|
|
/reviews
|
|||
|
|
/reviews/:id
|
|||
|
|
|
|||
|
|
/matches
|
|||
|
|
/match-rules
|
|||
|
|
|
|||
|
|
/matchmaker-services
|
|||
|
|
/matchmakers
|
|||
|
|
|
|||
|
|
/activities
|
|||
|
|
/activities/new
|
|||
|
|
/activities/:id
|
|||
|
|
/activities/:id/registrations
|
|||
|
|
/activities/:id/checkin
|
|||
|
|
|
|||
|
|
/reports
|
|||
|
|
/reports/:id
|
|||
|
|
|
|||
|
|
/organizations
|
|||
|
|
/operators
|
|||
|
|
/roles
|
|||
|
|
|
|||
|
|
/analytics
|
|||
|
|
/settings
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第九十七章 后台路由权限
|
|||
|
|
|
|||
|
|
每个Route绑定:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
permissionCode
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
例如:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
/users/:id
|
|||
|
|
→ user.view
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
/reviews/:id
|
|||
|
|
→ review.process
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
/reports/:id
|
|||
|
|
→ risk.report.view
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第九十八章 前端权限不能代替后端权限
|
|||
|
|
|
|||
|
|
前端隐藏按钮只是:
|
|||
|
|
|
|||
|
|
> 用户体验。
|
|||
|
|
|
|||
|
|
真正权限必须由后端校验。
|
|||
|
|
|
|||
|
|
即使用户手动访问URL:
|
|||
|
|
|
|||
|
|
> 无权限仍拒绝。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第九十九章 后台菜单生成
|
|||
|
|
|
|||
|
|
建议根据:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
currentOperator.permissions
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
动态生成菜单。
|
|||
|
|
|
|||
|
|
用户无权限:
|
|||
|
|
|
|||
|
|
> 不显示对应一级菜单。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百章 后台刷新页恢复
|
|||
|
|
|
|||
|
|
由于PC后台用户会刷新浏览器:
|
|||
|
|
|
|||
|
|
所有核心详情页必须通过:
|
|||
|
|
|
|||
|
|
> URL参数重新获取数据。
|
|||
|
|
|
|||
|
|
不能依赖:
|
|||
|
|
|
|||
|
|
> 上一个页面传递的临时对象。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百零一章 后台筛选状态
|
|||
|
|
|
|||
|
|
列表筛选建议同步到URL Query。
|
|||
|
|
|
|||
|
|
例如:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
/reviews?status=pending&page=2
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
这样:
|
|||
|
|
|
|||
|
|
- 刷新不丢
|
|||
|
|
- 返回不丢
|
|||
|
|
- 可以复制内部链接
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百零二章 小程序页面参数原则
|
|||
|
|
|
|||
|
|
只传:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
userId
|
|||
|
|
activityId
|
|||
|
|
serviceId
|
|||
|
|
conversationId
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
不要在URL携带:
|
|||
|
|
|
|||
|
|
- 姓名
|
|||
|
|
- 身份证
|
|||
|
|
- 完整资料JSON
|
|||
|
|
- 敏感业务状态
|
|||
|
|
|
|||
|
|
进入页面后再请求数据。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百零三章 全局事件机制
|
|||
|
|
|
|||
|
|
V1应避免大量EventBus。
|
|||
|
|
|
|||
|
|
跨模块变化优先:
|
|||
|
|
|
|||
|
|
> 更新Store。
|
|||
|
|
|
|||
|
|
例如:
|
|||
|
|
|
|||
|
|
用户拉黑:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
MatchStore更新
|
|||
|
|
MessageStore更新
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
而不是发送十几个自定义事件。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百零四章 WebSocket/实时消息建议
|
|||
|
|
|
|||
|
|
如果聊天采用实时通信:
|
|||
|
|
|
|||
|
|
连接状态放:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
MessageStore.connectionStatus
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
状态:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
disconnected
|
|||
|
|
connecting
|
|||
|
|
connected
|
|||
|
|
reconnecting
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百零五章 实时消息断线
|
|||
|
|
|
|||
|
|
断线后:
|
|||
|
|
|
|||
|
|
自动重连。
|
|||
|
|
|
|||
|
|
重连成功:
|
|||
|
|
|
|||
|
|
根据:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
lastSyncCursor
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
补拉遗漏消息。
|
|||
|
|
|
|||
|
|
避免重复消息。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百零六章 消息去重
|
|||
|
|
|
|||
|
|
每条消息必须有:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
messageId
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
前端收到实时消息和补拉消息时:
|
|||
|
|
|
|||
|
|
以messageId去重。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百零七章 消息发送状态
|
|||
|
|
|
|||
|
|
本地消息:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
sending
|
|||
|
|
sent
|
|||
|
|
failed
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
发送失败:
|
|||
|
|
|
|||
|
|
显示:
|
|||
|
|
|
|||
|
|
> 发送失败,点击重试。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百零八章 时间状态
|
|||
|
|
|
|||
|
|
聊天、通知、跟进等时间:
|
|||
|
|
|
|||
|
|
统一由前端格式化。
|
|||
|
|
|
|||
|
|
例如:
|
|||
|
|
|
|||
|
|
今天:
|
|||
|
|
|
|||
|
|
> 10:32
|
|||
|
|
|
|||
|
|
昨天:
|
|||
|
|
|
|||
|
|
> 昨天
|
|||
|
|
|
|||
|
|
更早:
|
|||
|
|
|
|||
|
|
> 8月28日
|
|||
|
|
|
|||
|
|
后台:
|
|||
|
|
|
|||
|
|
> 2026-08-28 10:32
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百零九章 本地时区
|
|||
|
|
|
|||
|
|
所有服务端时间建议统一标准存储。
|
|||
|
|
|
|||
|
|
前端展示:
|
|||
|
|
|
|||
|
|
> 用户当前本地时区。
|
|||
|
|
|
|||
|
|
V1主要服务丹阳,本地业务仍需避免服务端、数据库和前端各自混乱处理时间。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百一十章 页面Loading原则
|
|||
|
|
|
|||
|
|
首次加载:
|
|||
|
|
|
|||
|
|
> Skeleton。
|
|||
|
|
|
|||
|
|
局部更新:
|
|||
|
|
|
|||
|
|
> 局部Loading。
|
|||
|
|
|
|||
|
|
提交:
|
|||
|
|
|
|||
|
|
> Button Loading。
|
|||
|
|
|
|||
|
|
不要:
|
|||
|
|
|
|||
|
|
> 页面每次操作全部白屏重载。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百一十一章 乐观更新使用范围
|
|||
|
|
|
|||
|
|
适合:
|
|||
|
|
|
|||
|
|
- 喜欢
|
|||
|
|
- 不合适
|
|||
|
|
- 隐私Switch
|
|||
|
|
|
|||
|
|
但失败必须回滚。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百一十二章 不适合乐观更新
|
|||
|
|
|
|||
|
|
以下必须等待服务端确认:
|
|||
|
|
|
|||
|
|
- 实名认证
|
|||
|
|
- 资料审核提交
|
|||
|
|
- 活动报名
|
|||
|
|
- 成功牵手确认
|
|||
|
|
- 封禁
|
|||
|
|
- 举报处理
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百一十三章 表单状态结构
|
|||
|
|
|
|||
|
|
统一:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
values
|
|||
|
|
errors
|
|||
|
|
touched
|
|||
|
|
dirty
|
|||
|
|
submitting
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
避免每个表单页面自定义一套混乱逻辑。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百一十四章 表单离开提醒
|
|||
|
|
|
|||
|
|
首次资料填写:
|
|||
|
|
|
|||
|
|
> 自动保存,无需每次提醒。
|
|||
|
|
|
|||
|
|
后台复杂编辑:
|
|||
|
|
|
|||
|
|
如果有未保存修改,离开时:
|
|||
|
|
|
|||
|
|
> 你有未保存的修改,确定离开吗?
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百一十五章 图片上传状态
|
|||
|
|
|
|||
|
|
每张图片:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
local
|
|||
|
|
uploading
|
|||
|
|
uploaded
|
|||
|
|
failed
|
|||
|
|
review_pending
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百一十六章 图片草稿
|
|||
|
|
|
|||
|
|
用户选了图片但上传失败:
|
|||
|
|
|
|||
|
|
本地显示失败状态。
|
|||
|
|
|
|||
|
|
允许:
|
|||
|
|
|
|||
|
|
> 点击重试。
|
|||
|
|
|
|||
|
|
不要让用户重新选择所有图片。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百一十七章 审核后图片状态
|
|||
|
|
|
|||
|
|
一旦头像需要修改:
|
|||
|
|
|
|||
|
|
前端在我的资料中:
|
|||
|
|
|
|||
|
|
> 清晰标识该图片需修改。
|
|||
|
|
|
|||
|
|
不要整个资料页只显示“审核不通过”。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百一十八章 App配置
|
|||
|
|
|
|||
|
|
服务端可返回轻量配置:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
dailyRecommendationLimit
|
|||
|
|
maxProfilePhotos
|
|||
|
|
maxInterestTags
|
|||
|
|
chatImageEnabled
|
|||
|
|
activityEnabled
|
|||
|
|
matchmakerEnabled
|
|||
|
|
supportContact
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
避免关键运营参数硬编码。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百一十九章 配置读取失败
|
|||
|
|
|
|||
|
|
使用安全默认值。
|
|||
|
|
|
|||
|
|
不要因为配置接口失败导致:
|
|||
|
|
|
|||
|
|
> 整个小程序打不开。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百二十章 埋点状态
|
|||
|
|
|
|||
|
|
V1建议预留基础Analytics接口。
|
|||
|
|
|
|||
|
|
关键事件:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
login_success
|
|||
|
|
verification_success
|
|||
|
|
profile_submit
|
|||
|
|
review_approved
|
|||
|
|
recommendation_view
|
|||
|
|
like_click
|
|||
|
|
mutual_match
|
|||
|
|
chat_started
|
|||
|
|
matchmaker_apply
|
|||
|
|
activity_apply
|
|||
|
|
activity_checkin
|
|||
|
|
relationship_success
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百二十一章 埋点原则
|
|||
|
|
|
|||
|
|
不得上报:
|
|||
|
|
|
|||
|
|
- 身份证
|
|||
|
|
- 聊天正文
|
|||
|
|
- 完整手机号
|
|||
|
|
- 私密照片
|
|||
|
|
- 举报证据
|
|||
|
|
|
|||
|
|
只记录必要事件与匿名业务ID。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百二十二章 推荐核心漏斗
|
|||
|
|
|
|||
|
|
前端埋点对应:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
推荐曝光
|
|||
|
|
↓
|
|||
|
|
查看详情
|
|||
|
|
↓
|
|||
|
|
喜欢
|
|||
|
|
↓
|
|||
|
|
双向匹配
|
|||
|
|
↓
|
|||
|
|
开始聊天
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
用于后续判断:
|
|||
|
|
|
|||
|
|
> 哪一步用户流失。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百二十三章 用户主流程状态图
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
未登录
|
|||
|
|
↓
|
|||
|
|
已登录
|
|||
|
|
↓
|
|||
|
|
已绑定手机号
|
|||
|
|
↓
|
|||
|
|
已实名
|
|||
|
|
↓
|
|||
|
|
资料填写中
|
|||
|
|
↓
|
|||
|
|
资料完成
|
|||
|
|
↓
|
|||
|
|
审核中
|
|||
|
|
↓
|
|||
|
|
审核通过
|
|||
|
|
↓
|
|||
|
|
正在寻找
|
|||
|
|
↓
|
|||
|
|
互相喜欢
|
|||
|
|
↓
|
|||
|
|
沟通
|
|||
|
|
↓
|
|||
|
|
正在了解
|
|||
|
|
↓
|
|||
|
|
成功牵手
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百二十四章 状态不可逆与可逆
|
|||
|
|
|
|||
|
|
## 不可随意回退
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
未实名 → 已实名
|
|||
|
|
审核通过 → 未提交
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
不能前端自行改变。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 可逆状态
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
正在寻找 ↔ 暂停寻找
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
由业务规则控制。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百二十五章 状态变更单一入口
|
|||
|
|
|
|||
|
|
前端不能:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
UserStore.relationshipStatus = success
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
直接赋值。
|
|||
|
|
|
|||
|
|
必须通过:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
updateRelationshipStatus()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
请求服务端后再更新Store。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百二十六章 推荐的前端状态更新模式
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Action
|
|||
|
|
↓
|
|||
|
|
API
|
|||
|
|
↓
|
|||
|
|
Server Result
|
|||
|
|
↓
|
|||
|
|
Store
|
|||
|
|
↓
|
|||
|
|
UI
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
简单、清晰。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百二十七章 不建议V1引入的复杂方案
|
|||
|
|
|
|||
|
|
V1不要为了“技术先进”引入:
|
|||
|
|
|
|||
|
|
- 复杂前端微服务
|
|||
|
|
- 微前端
|
|||
|
|
- Event Sourcing前端实现
|
|||
|
|
- 大量全局事件总线
|
|||
|
|
- GraphQL缓存系统
|
|||
|
|
- 离线优先复杂同步
|
|||
|
|
- 多套状态库共存
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百二十八章 技术实现要求
|
|||
|
|
|
|||
|
|
无论最终采用:
|
|||
|
|
|
|||
|
|
- 原生微信小程序
|
|||
|
|
- Taro
|
|||
|
|
- uni-app
|
|||
|
|
|
|||
|
|
都必须保持:
|
|||
|
|
|
|||
|
|
> 一套清晰Store + 一套路由守卫 + 一套API层 + 一套错误处理。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百二十九章 推荐前端分层
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
pages
|
|||
|
|
↓
|
|||
|
|
features
|
|||
|
|
↓
|
|||
|
|
stores
|
|||
|
|
↓
|
|||
|
|
services
|
|||
|
|
↓
|
|||
|
|
components
|
|||
|
|
↓
|
|||
|
|
theme
|
|||
|
|
↓
|
|||
|
|
utils
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百三十章 services层
|
|||
|
|
|
|||
|
|
建议:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
services/
|
|||
|
|
auth
|
|||
|
|
user
|
|||
|
|
profile
|
|||
|
|
match
|
|||
|
|
message
|
|||
|
|
activity
|
|||
|
|
matchmaker
|
|||
|
|
safety
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
页面不直接调用底层request。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百三十一章 API统一请求层
|
|||
|
|
|
|||
|
|
统一处理:
|
|||
|
|
|
|||
|
|
- Token
|
|||
|
|
- 超时
|
|||
|
|
- 错误码
|
|||
|
|
- 重试
|
|||
|
|
- 日志脱敏
|
|||
|
|
- Session失效
|
|||
|
|
- 维护状态
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百三十二章 推荐目录结构
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
src/
|
|||
|
|
pages/
|
|||
|
|
components/
|
|||
|
|
features/
|
|||
|
|
stores/
|
|||
|
|
services/
|
|||
|
|
theme/
|
|||
|
|
utils/
|
|||
|
|
constants/
|
|||
|
|
types/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
后台和红娘端可采用类似分层。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百三十三章 constants目录
|
|||
|
|
|
|||
|
|
统一存放:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
routeNames
|
|||
|
|
statusEnums
|
|||
|
|
permissionCodes
|
|||
|
|
storageKeys
|
|||
|
|
businessLimits
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
不要把状态字符串散落页面。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百三十四章 types目录
|
|||
|
|
|
|||
|
|
统一:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
User
|
|||
|
|
Profile
|
|||
|
|
PartnerPreference
|
|||
|
|
MatchRelation
|
|||
|
|
Conversation
|
|||
|
|
Activity
|
|||
|
|
MatchmakerService
|
|||
|
|
Report
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百三十五章 路由验收标准
|
|||
|
|
|
|||
|
|
必须测试:
|
|||
|
|
|
|||
|
|
1. 未登录直接访问用户详情
|
|||
|
|
2. 未实名直接访问首页
|
|||
|
|
3. 审核中打开找对象
|
|||
|
|
4. 封禁用户打开聊天
|
|||
|
|
5. 已成功牵手进入首页
|
|||
|
|
6. Token过期期间填写资料
|
|||
|
|
7. 从聊天返回消息列表
|
|||
|
|
8. 从用户详情返回找对象列表
|
|||
|
|
|
|||
|
|
每种都必须有明确结果。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百三十六章 状态验收标准
|
|||
|
|
|
|||
|
|
必须保证:
|
|||
|
|
|
|||
|
|
> 用户状态只有一个真实来源。
|
|||
|
|
|
|||
|
|
例如:
|
|||
|
|
|
|||
|
|
不能出现:
|
|||
|
|
|
|||
|
|
首页显示:
|
|||
|
|
|
|||
|
|
> 正在寻找
|
|||
|
|
|
|||
|
|
我的显示:
|
|||
|
|
|
|||
|
|
> 暂停寻找。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百三十七章 未读数验收
|
|||
|
|
|
|||
|
|
必须确保:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Tab Badge
|
|||
|
|
消息列表
|
|||
|
|
系统通知
|
|||
|
|
聊天详情
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
四处数据一致。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百三十八章 草稿验收
|
|||
|
|
|
|||
|
|
测试:
|
|||
|
|
|
|||
|
|
用户填写到:
|
|||
|
|
|
|||
|
|
> 资料3/5
|
|||
|
|
|
|||
|
|
直接关闭微信。
|
|||
|
|
|
|||
|
|
重新打开:
|
|||
|
|
|
|||
|
|
> 自动进入3/5,并保留已填内容。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百三十九章 弱网验收
|
|||
|
|
|
|||
|
|
弱网下:
|
|||
|
|
|
|||
|
|
- 按钮不能重复提交
|
|||
|
|
- 图片上传失败可重试
|
|||
|
|
- 已填写表单不丢
|
|||
|
|
- 推荐加载失败有重试
|
|||
|
|
- 聊天发送失败有明确状态
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百四十章 权限验收
|
|||
|
|
|
|||
|
|
红娘和后台必须测试:
|
|||
|
|
|
|||
|
|
- 无权限菜单不显示
|
|||
|
|
- 手动输入URL仍被拒绝
|
|||
|
|
- 敏感信息默认脱敏
|
|||
|
|
- 查看敏感字段留下日志
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百四十一章 V1.0前端架构核心结论
|
|||
|
|
|
|||
|
|
用户端核心状态:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
登录状态
|
|||
|
|
实名认证状态
|
|||
|
|
资料完成状态
|
|||
|
|
审核状态
|
|||
|
|
账号状态
|
|||
|
|
婚恋状态
|
|||
|
|
隐私状态
|
|||
|
|
匹配关系
|
|||
|
|
消息未读
|
|||
|
|
活动报名
|
|||
|
|
红娘服务
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
这些状态必须统一管理。
|
|||
|
|
|
|||
|
|
页面只负责:
|
|||
|
|
|
|||
|
|
> 展示和用户交互。
|
|||
|
|
|
|||
|
|
页面不能自己创造业务真相。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 第一百四十二章 最终设计原则
|
|||
|
|
|
|||
|
|
整个前端信息架构必须做到:
|
|||
|
|
|
|||
|
|
> 用户进入任何页面,都不会因为账号状态错误而走进不该走的流程。
|
|||
|
|
|
|||
|
|
> 用户退出再回来,不需要重复填写已经完成的内容。
|
|||
|
|
|
|||
|
|
> 后台改变用户审核或风险状态后,前端能够及时同步。
|
|||
|
|
|
|||
|
|
> 所有关键业务状态只有一份可信来源。
|
|||
|
|
|
|||
|
|
> 页面跳转始终可预测,不形成路由迷宫。
|
|||
|
|
|
|||
|
|
最终标准可以概括为一句:
|
|||
|
|
|
|||
|
|
> **状态决定权限,权限决定路由,路由承载任务,页面只负责把当前任务做好。**
|