79 lines
2.7 KiB
Markdown
79 lines
2.7 KiB
Markdown
# 需求分析 - 超级个体解锁眼睛交互改造
|
||
|
||
## 基本信息
|
||
- **时间**:2026-03-05
|
||
- **需求来源**:用户反馈
|
||
- **涉及页面**:`miniprogram/pages/member-detail/member-detail`
|
||
|
||
---
|
||
|
||
## 一、需求描述
|
||
|
||
超级个体详情页点击「解锁眼睛」图标时,需调整交互逻辑:
|
||
|
||
| 原逻辑 | 新逻辑 |
|
||
|--------|--------|
|
||
| 弹窗「成为VIP会员并完成匹配后,即可查看完整联系方式」→ 确认跳转**找伙伴/匹配页** | **不跳转匹配页**;未登录先登录;已登录按权益处理 |
|
||
|
||
### 新逻辑细则
|
||
|
||
1. **未登录**:弹窗「请先登录」→ 确认跳转「我的」页,用户登录后再返回操作
|
||
2. **已登录**:
|
||
- **VIP 会员**(`hasFullBook`):直接解锁,可无限次解锁任意超级个体
|
||
- **非 VIP**:每人 **1 次免费解锁**,第 2 次起弹窗「免费次数已用完,开通 VIP(¥1980/年)可无限解锁」→ 确认跳转 **VIP 会员页**(1980 付款页)
|
||
|
||
---
|
||
|
||
## 二、已实现修改(小程序端)
|
||
|
||
### 修改文件
|
||
- `miniprogram/pages/member-detail/member-detail.js`
|
||
|
||
### 实现要点
|
||
|
||
1. **解锁状态存储**(本地 `wx.setStorageSync`)
|
||
- Key:`member_unlocks_{userId}`
|
||
- 值:已解锁的 `memberId` 数组
|
||
- 用于判断是否已解锁、是否已用掉免费次数
|
||
|
||
2. **`unlockContact()` 流程**
|
||
```
|
||
点击眼睛
|
||
→ 未登录:Modal「需要登录」→ 去登录 → switchTab 我的
|
||
→ 已登录 + VIP:直接解锁并写入存储
|
||
→ 已登录 + 非VIP + 首次:免费解锁并写入存储
|
||
→ 已登录 + 非VIP + 非首次:Modal「去开通」→ navigateTo VIP 页
|
||
```
|
||
|
||
3. **`enrichAndFormat` 中 `contactUnlocked` / `wechatUnlocked`**
|
||
- 原:仅 `isMatched`(匹配过的人)
|
||
- 现:`isMatched || localUnlocked`(本地解锁列表也视为已解锁)
|
||
|
||
---
|
||
|
||
## 三、后续可选优化(后端/管理端)
|
||
|
||
### 1. 后端持久化(可选)
|
||
|
||
当前免费次数与解锁记录存于**本地**,换设备或清缓存会丢失。若需跨设备、防作弊,可:
|
||
|
||
- 新增接口:`POST /api/miniprogram/member/unlock`
|
||
- 入参:`memberId`、`userId`
|
||
- 逻辑:校验免费次数 / VIP 权益,记录解锁关系
|
||
- 小程序改为调用该接口,成功后更新本地展示
|
||
|
||
### 2. 管理端统计(可选)
|
||
|
||
- 统计「超级个体联系方式解锁」次数
|
||
- 按用户、按超级个体维度统计
|
||
|
||
---
|
||
|
||
## 四、验收要点
|
||
|
||
- [ ] 未登录点击眼睛 → 弹窗「需要登录」→ 确认跳转「我的」
|
||
- [ ] 已登录 + 非 VIP + 首次 → 免费解锁,展示完整联系方式
|
||
- [ ] 已登录 + 非 VIP + 第 2 次起 → 弹窗「去开通」→ 确认跳转 VIP 页(¥1980)
|
||
- [ ] 已登录 + VIP → 直接解锁,不限次数
|
||
- [ ] 不跳转匹配页
|