149 lines
5.1 KiB
Markdown
149 lines
5.1 KiB
Markdown
# 推广设置页面 - 完整性测试清单
|
||
|
||
## 前置条件
|
||
- ✅ 已创建 `app/admin/referral-settings/page.tsx`
|
||
- ✅ 已修改 `app/admin/layout.tsx` 添加菜单入口
|
||
- ✅ 已修复 `app/api/referral/bind/route.ts` 读取 `bindingDays`
|
||
|
||
## 功能验证(按顺序测试)
|
||
|
||
### 1. 页面访问测试
|
||
- [ ] 访问 `https://soul.quwanzhi.com/admin/referral-settings` 页面正常加载
|
||
- [ ] 左侧菜单显示「推广设置」入口
|
||
- [ ] 点击菜单可正常跳转,高亮状态正确
|
||
|
||
### 2. 配置加载测试
|
||
- [ ] 页面打开时自动从 `system_config` 表加载现有配置
|
||
- [ ] 若无配置,显示默认值:
|
||
- 好友优惠:5%
|
||
- 推广者分成:90%
|
||
- 绑定有效期:30天
|
||
- 最低提现金额:10元
|
||
- 自动提现:关闭
|
||
|
||
### 3. 表单输入验证
|
||
- [ ] 修改「好友优惠」为 10,输入框显示正确
|
||
- [ ] 拖动「推广者分成」滑块,数值同步更新
|
||
- [ ] 输入「绑定有效期」为 60,输入框显示正确
|
||
- [ ] 修改「最低提现金额」为 50,输入框显示正确
|
||
- [ ] 切换「自动提现」开关,状态正确
|
||
|
||
### 4. 配置保存测试
|
||
- [ ] 点击「保存配置」按钮
|
||
- [ ] 弹出成功提示:「✅ 分销配置已保存成功!」
|
||
- [ ] 刷新页面后,配置仍然是刚才保存的值
|
||
|
||
### 5. 数据库验证
|
||
在数据库执行以下查询:
|
||
```sql
|
||
SELECT config_key, config_value, description
|
||
FROM system_config
|
||
WHERE config_key = 'referral_config';
|
||
```
|
||
|
||
**预期结果**:
|
||
```json
|
||
{
|
||
"distributorShare": 90,
|
||
"minWithdrawAmount": 10,
|
||
"bindingDays": 30,
|
||
"userDiscount": 5,
|
||
"enableAutoWithdraw": false
|
||
}
|
||
```
|
||
|
||
所有字段都应该是 **数字类型**(不是字符串 "90")
|
||
|
||
### 6. 业务流程验证
|
||
|
||
#### 6.1 绑定关系测试
|
||
1. 修改「绑定有效期」为 **60 天**,保存
|
||
2. 在小程序中让一个新用户通过推广链接进入并登录
|
||
3. 查询数据库:
|
||
```sql
|
||
SELECT referee_id, referrer_id, expiry_date, status
|
||
FROM referral_bindings
|
||
WHERE referee_id = '新用户ID'
|
||
ORDER BY created_at DESC LIMIT 1;
|
||
```
|
||
4. **验证**:`expiry_date` 应该是当前时间 + **60 天**(不是硬编码的 30 天)
|
||
|
||
#### 6.2 佣金计算测试
|
||
1. 修改「推广者分成」为 **85%**,保存
|
||
2. 让已绑定的用户在小程序购买 100 元的订单
|
||
3. 等待支付成功回调
|
||
4. 查询数据库:
|
||
```sql
|
||
SELECT user_id, earnings, pending_earnings
|
||
FROM users
|
||
WHERE user_id = '推广者ID';
|
||
```
|
||
5. **验证**:`pending_earnings` 应该增加 **85 元**(不是 90 元)
|
||
|
||
#### 6.3 提现门槛测试
|
||
1. 修改「最低提现金额」为 **50 元**,保存
|
||
2. 刷新小程序「推广中心」页面
|
||
3. **验证**:推广规则卡片显示「满 **50 元** 可提现」
|
||
4. 用 pending_earnings < 50 的账号点击提现,应提示「可提现金额不足」
|
||
|
||
#### 6.4 小程序展示验证
|
||
刷新小程序「推广中心」页面,检查「推广规则」卡片:
|
||
- [ ] 「好友优惠」显示与后台设置一致(如 5%)
|
||
- [ ] 「你得收益」显示与后台设置一致(如 90%)
|
||
- [ ] 「绑定期」显示与后台设置一致(如 30 天)
|
||
|
||
## 关键代码验证点
|
||
|
||
### 读取 referral_config 的 API:
|
||
1. ✅ `app/api/referral/bind/route.ts` - 读取 `bindingDays`
|
||
2. ✅ `app/api/miniprogram/pay/notify/route.ts` - 读取 `distributorShare` 并除以 100
|
||
3. ✅ `app/api/referral/data/route.ts` - 读取 `distributorShare` 并除以 100
|
||
|
||
### 数据类型保护:
|
||
- ✅ 前端保存时强制转换为 `Number` 类型
|
||
- ✅ 后端 `setConfig` 使用 `JSON.stringify` 正确序列化
|
||
- ✅ 后端 `getConfig` 使用 `JSON.parse` 正确反序列化
|
||
|
||
## 回滚方案
|
||
如果测试发现问题,可以执行以下 SQL 恢复默认配置:
|
||
```sql
|
||
UPDATE system_config
|
||
SET config_value = '{"distributorShare":90,"minWithdrawAmount":10,"bindingDays":30,"userDiscount":5,"enableAutoWithdraw":false}'
|
||
WHERE config_key = 'referral_config';
|
||
```
|
||
|
||
## 常见问题排查
|
||
|
||
### Q1: 保存后刷新,配置变成了默认值?
|
||
**排查**:检查数据库 `system_config` 表是否正确写入
|
||
|
||
### Q2: 小程序显示的比例与后台不一致?
|
||
**排查**:
|
||
1. 小程序端是否有缓存,清除缓存重试
|
||
2. 检查 API `/api/referral/data` 是否正确读取配置
|
||
3. 检查小程序代码是否硬编码了规则文案
|
||
|
||
### Q3: 新绑定关系的过期时间还是 30 天?
|
||
**排查**:
|
||
1. 确认 `app/api/referral/bind/route.ts` 已正确修改
|
||
2. 重启 Node.js 服务(`pm2 restart soul`)
|
||
3. 检查服务器日志是否有 "读取配置失败" 的警告
|
||
|
||
### Q4: 佣金计算还是用的旧比例?
|
||
**排查**:
|
||
1. 确认订单是在 **修改配置之后** 创建的
|
||
2. 历史订单不会重算,只影响新订单
|
||
3. 检查 `app/api/miniprogram/pay/notify/route.ts` 的日志
|
||
|
||
## 上线建议
|
||
|
||
1. **先在测试环境验证**:完成上述所有测试用例
|
||
2. **备份数据库**:上线前导出 `system_config` 表
|
||
3. **灰度发布**:先让内部测试账号测试,确认无误后全量放开
|
||
4. **监控日志**:上线后密切关注 PM2 日志,搜索 "referral_config" 关键词
|
||
|
||
## 性能影响
|
||
- 每次绑定/支付回调会额外查询 1 次 `system_config` 表
|
||
- 由于 `config_key` 有索引,性能影响可忽略
|
||
- 建议后续可增加 Redis 缓存(TTL 60秒)优化性能
|