Files
soul-yongping/开发文档/8、部署/分销中心用户列表数据对接说明.md

442 lines
9.6 KiB
Markdown
Raw Normal View History

# 分销中心用户列表数据对接说明
## 📋 功能说明
小程序分销中心的"绑定用户"列表包含三个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"
}
]
}
}
```
---
**✅ 分销中心用户列表数据已完全对接!支持显示购买次数和过期时间。**