Files
soul-yongping/开发文档/8、部署/分销中心用户列表数据对接说明.md
2026-02-09 15:09:29 +08:00

442 lines
9.6 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.

# 分销中心用户列表数据对接说明
## 📋 功能说明
小程序分销中心的"绑定用户"列表包含三个Tab
1. **绑定中** - 当前活跃的绑定关系
2. **已付款** - 购买过商品的用户
3. **已过期** - 过期或取消的绑定
---
## 🔧 本次修改
### 1. 后端API优化/api/referral/data
**文件**: `app/api/referral/data/route.ts`
**修改内容**:
-`convertedUsers` 中添加 `purchaseCount`(购买次数)字段
```typescript
convertedUsers: convertedBindings.map((b: any) => ({
id: b.referee_id,
nickname: b.nickname,
avatar: b.avatar,
commission: parseFloat(b.commission_amount) || 0,
orderAmount: parseFloat(b.order_amount) || 0,
purchaseCount: parseInt(b.purchase_count) || 0, // 新增
conversionDate: b.conversion_date,
status: 'converted'
}))
```
---
### 2. 小程序前端优化
#### 2.1 数据格式化referral.js
**文件**: `miniprogram/pages/referral/referral.js`
**修改内容**:
```javascript
// formatUser 函数增强
const formatUser = (user, type) => {
return {
id: user.id,
nickname: user.nickname,
avatar: user.avatar,
status: type,
daysRemaining: user.daysRemaining || 0,
bindingDate: this.formatDate(user.bindingDate),
expiryDate: this.formatDate(user.expiryDate), // 新增:过期时间
commission: (user.commission || 0).toFixed(2),
orderAmount: (user.orderAmount || 0).toFixed(2),
purchaseCount: user.purchaseCount || 0, // 新增:购买次数
conversionDate: this.formatDate(user.conversionDate) // 新增:转化时间
}
}
```
---
#### 2.2 UI显示优化referral.wxml
**文件**: `miniprogram/pages/referral/referral.wxml`
**旧代码**:
```xml
<view class="user-status">
<block wx:if="{{item.status === 'converted'}}">
<text class="status-amount">+¥{{item.commission}}</text>
<text class="status-order">订单 ¥{{item.orderAmount}}</text>
</block>
<block wx:else>
<text class="status-tag">
{{item.status === 'expired' ? '已过期' : item.daysRemaining + '天'}}
</text>
</block>
</view>
```
**新代码**:
```xml
<view class="user-status">
<!-- 已付款:显示佣金 + 购买次数 -->
<block wx:if="{{item.status === 'converted'}}">
<text class="status-amount">+¥{{item.commission}}</text>
<text class="status-order">已购{{item.purchaseCount || 1}}次</text>
</block>
<!-- 已过期:显示过期标签 + 过期时间 -->
<block wx:elif="{{item.status === 'expired'}}">
<text class="status-tag tag-gray">已过期</text>
<text class="status-time">{{item.expiryDate}}</text>
</block>
<!-- 绑定中:显示剩余天数 -->
<block wx:else>
<text class="status-tag {{item.daysRemaining <= 3 ? 'tag-red' : item.daysRemaining <= 7 ? 'tag-orange' : 'tag-green'}}">
{{item.daysRemaining}}天
</text>
</block>
</view>
```
---
## 📊 数据流向
```
后端 /api/referral/data
返回三类用户数据
├─ activeUsers绑定中
│ - daysRemaining剩余天数
│ - bindingDate绑定时间
├─ convertedUsers已付款
│ - commission佣金
│ - purchaseCount购买次数✨ 新增
│ - conversionDate转化时间
└─ expiredUsers已过期
- expiryDate过期时间
- bindingDate绑定时间
小程序接收并格式化
分Tab显示
```
---
## 🎨 显示效果
### Tab 1: 绑定中
```
┌─────────────────────────────┐
│ [头像] 张三 │
│ 绑定于 02-01 │
│ [15天]│
└─────────────────────────────┘
```
**显示内容**:
- 用户昵称
- 绑定时间
- 剩余天数(颜色标识:绿色>7天橙色3-7天红色≤3天
---
### Tab 2: 已付款
```
┌─────────────────────────────┐
│ [✓] 李四 │
│ 绑定于 01-20 │
│ +¥0.90 已购1次│
└─────────────────────────────┘
┌─────────────────────────────┐
│ [✓] 王五 │
│ 绑定于 01-15 │
│ +¥2.70 已购3次│
└─────────────────────────────┘
```
**显示内容**:
- 用户昵称(头像显示✓)
- 绑定时间
- 累计佣金
- **购买次数**(✨ 新增)
**数据来源**:
```javascript
{
commission: 0.90, // 累计佣金
purchaseCount: 1, // 购买次数 ✨
conversionDate: "2026-01-20"
}
```
---
### Tab 3: 已过期
```
┌─────────────────────────────┐
│ [⏰] 赵六 │
│ 绑定于 01-05 │
│ [已过期] 02-04│
└─────────────────────────────┘
```
**显示内容**:
- 用户昵称(头像显示⏰)
- 绑定时间
- 已过期标签
- **过期时间**(✨ 优化显示)
**数据来源**:
```javascript
{
bindingDate: "2026-01-05",
expiryDate: "2026-02-04" // 显示具体过期日期
}
```
---
## 🔍 数据验证
### 测试场景1: 已付款用户(单次购买)
```json
{
"nickname": "张三",
"commission": 0.90,
"purchaseCount": 1,
"conversionDate": "2026-02-01"
}
```
**显示**: `+¥0.90 已购1次`
---
### 测试场景2: 已付款用户(多次购买)
```json
{
"nickname": "李四",
"commission": 2.70,
"purchaseCount": 3,
"conversionDate": "2026-01-20"
}
```
**显示**: `+¥2.70 已购3次`
---
### 测试场景3: 已过期用户
```json
{
"nickname": "王五",
"bindingDate": "2026-01-05",
"expiryDate": "2026-02-04"
}
```
**显示**:
- 标签:`已过期`
- 时间:`02-04`
---
## 🎯 优化亮点
### 1. 已付款用户
**旧显示**:
```
+¥0.90
订单 ¥1.00
```
- ❌ 显示订单金额(用户可能多次购买,只显示一个金额不准确)
**新显示**:
```
+¥0.90
已购1次
```
- ✅ 显示购买次数(更直观)
- ✅ 支持多次购买已购3次
---
### 2. 已过期用户
**旧显示**:
```
[已过期]
```
- ❌ 只有标签,不知道什么时候过期
**新显示**:
```
[已过期] 02-04
```
- ✅ 显示具体过期时间
- ✅ 用户可以看到过期日期
---
## 📊 后端数据说明
### convertedBindings 查询
```sql
SELECT
rb.referee_id,
rb.purchase_count, -- 购买次数
rb.total_commission, -- 累计佣金
rb.last_purchase_date, -- 最后购买时间
u.nickname, u.avatar
FROM referral_bindings rb
JOIN users u ON rb.referee_id = u.id
WHERE rb.referrer_id = ?
AND rb.status = 'active'
AND rb.purchase_count > 0
ORDER BY rb.last_purchase_date DESC
```
**关键字段**:
- `purchase_count` - 购买次数(每次购买 +1
- `total_commission` - 累计佣金(每次购买累加)
- `last_purchase_date` - 最后购买时间(用于排序)
---
### expiredBindings 查询
```sql
SELECT
rb.referee_id,
rb.binding_date, -- 绑定时间
rb.expiry_date, -- 过期时间
u.nickname, u.avatar
FROM referral_bindings rb
JOIN users u ON rb.referee_id = u.id
WHERE rb.referrer_id = ?
AND (rb.status = 'expired' OR rb.status = 'cancelled')
ORDER BY rb.expiry_date DESC
```
**关键字段**:
- `binding_date` - 绑定时间
- `expiry_date` - 过期时间(显示在前端)
- `status` - expired自然过期或 cancelled被切换
---
## 🚀 部署步骤
### 1. 后端部署
```bash
pnpm build
python devlop.py
pm2 restart soul
```
### 2. 小程序上传
- 在微信开发者工具上传代码
- 提交审核
- 发布新版本
---
## ✅ 测试清单
### 已付款用户
- [ ] 显示累计佣金
- [ ] 显示购买次数
- [ ] 单次购买显示"已购1次"
- [ ] 多次购买显示"已购N次"
- [ ] 头像显示✓标记
### 已过期用户
- [ ] 显示"已过期"标签
- [ ] 显示过期时间
- [ ] 头像显示⏰标记
- [ ] 时间格式正确MM-DD
### 绑定中用户
- [ ] 显示剩余天数
- [ ] 颜色标识正确(绿/橙/红)
- [ ] 头像显示首字母
---
## 🎨 样式优化(可选)
如果需要调整样式,在 `referral.wxss` 中添加:
```css
/* 已过期时间显示 */
.status-time {
font-size: 22rpx;
color: #999;
margin-top: 4rpx;
}
/* 灰色标签(已过期) */
.tag-gray {
background: #f5f5f5;
color: #999;
}
```
---
## 📝 API 返回数据示例
### 完整响应
```json
{
"success": true,
"data": {
"activeUsers": [
{
"id": "user_123",
"nickname": "张三",
"avatar": "https://...",
"daysRemaining": 15,
"bindingDate": "2026-01-20T10:00:00.000Z",
"status": "active"
}
],
"convertedUsers": [
{
"id": "user_456",
"nickname": "李四",
"avatar": "https://...",
"commission": 0.90,
"orderAmount": 1.00,
"purchaseCount": 1,
"conversionDate": "2026-02-01T14:30:00.000Z",
"status": "converted"
}
],
"expiredUsers": [
{
"id": "user_789",
"nickname": "王五",
"avatar": "https://...",
"bindingDate": "2026-01-05T08:00:00.000Z",
"expiryDate": "2026-02-04T08:00:00.000Z",
"status": "expired"
}
]
}
}
```
---
**✅ 分销中心用户列表数据已完全对接!支持显示购买次数和过期时间。**