Files
soul-yongping/开发文档/8、部署/后台订单显示优化说明.md

361 lines
7.8 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.

# 后台订单显示优化说明
## 📋 优化内容
### 新增显示字段
- ✅ 购买者昵称
- ✅ 购买的书名《一场Soul的创业实验》
- ✅ 购买的章节第X章 第X节
- ✅ 商品类型标签
---
## 🔧 修改的文件
### 1. `/app/api/orders/route.ts` - 订单API
**修改内容**
- JOIN `users` 表获取购买者信息
- 返回 `userNickname``userAvatar` 字段
**新增字段**
```typescript
{
userNickname: string | null, // 购买者昵称
userAvatar: string | null // 购买者头像
}
```
**SQL 查询**
```sql
SELECT o.*, u.nickname as user_nickname, u.avatar as user_avatar
FROM orders o
LEFT JOIN users u ON o.user_id = u.id
ORDER BY o.created_at DESC
```
---
### 2. `/app/admin/page.tsx` - 管理后台首页
**优化内容**
- 最近订单卡片显示购买者昵称
- 显示完整的书名和章节信息
- 优化UI布局增加头像展示
- 改进时间显示格式
**显示效果**
```
┌─────────────────────────────────────────────┐
│ [头像] 张三 · 《一场Soul的创业实验》 │
│ 章节购买 | 02-04 14:30 +¥0.95 │
│ 推荐: ABC123 │
└─────────────────────────────────────────────┘
```
**核心函数**
```typescript
// 格式化商品信息
const formatOrderProduct = (p: any) => {
// 解析 description 字段,返回:
// { title: "第1章 第2节", subtitle: "《一场Soul的创业实验》" }
}
```
---
### 3. `/app/admin/orders/page.tsx` - 订单管理页面
**优化内容**
- 从API读取订单包含购买者昵称
- 显示完整的书名和章节
- 改进搜索功能(支持昵称、手机号、商品名搜索)
- 支持订单号搜索
- 优化状态筛选(兼容 'paid' 和 'completed' 状态)
**表格列**
| 订单号 | 用户 | 商品 | 金额 | 支付方式 | 状态 | 分销佣金 | 下单时间 |
|--------|------|------|------|----------|------|----------|----------|
| MP20260204... | 张三<br>138xxxx | 第1章 第2节<br>《一场Soul...》 | ¥0.95 | 微信支付 | 已完成 | ¥0.86 | 2026-02-04 14:30 |
**核心函数**
```typescript
// 格式化商品信息
const formatProduct = (order: any) => {
return {
name: "第1章 第2节",
type: "《一场Soul的创业实验》"
}
}
```
---
## 📊 商品信息解析逻辑
### 输入数据orders 表)
```javascript
{
productType: "section", // 商品类型
productId: "1-2", // 章节ID
description: "章节购买-1-2", // 商品描述
amount: 0.95 // 金额
}
```
### 解析规则
#### 1. 章节购买
**输入**
```javascript
{
productType: "section",
productId: "1-2",
description: "章节购买-1-2"
}
```
**输出**
```javascript
{
title: "第1章 第2节",
subtitle: "《一场Soul的创业实验》"
}
```
#### 2. 整本购买
**输入**
```javascript
{
productType: "fullbook",
description: "《一场Soul的创业实验》全书"
}
```
**输出**
```javascript
{
title: "《一场Soul的创业实验》",
subtitle: "全书购买"
}
```
#### 3. 找伙伴
**输入**
```javascript
{
productType: "match",
description: "找伙伴匹配"
}
```
**输出**
```javascript
{
title: "找伙伴匹配",
subtitle: "功能服务"
}
```
---
## 🎨 UI 改进
### 主仪表盘 - 最近订单
**旧版**
```
单章 1-2
2026-02-04 14:30:15
邀请码: ABC123
+¥0.95
微信支付
```
**新版**
```
[头像] 张三 · 《一场Soul的创业实验》
章节购买 | 02-04 14:30 +¥0.95
推荐: ABC123 微信
```
**优势**
- ✅ 一目了然看到购买者
- ✅ 清晰显示书名和章节
- ✅ 更紧凑的布局
- ✅ 支持hover高亮
---
### 订单管理页面
**改进点**
1. **用户列** - 显示昵称和手机号
2. **商品列** - 显示书名和章节,带类型标签
3. **搜索** - 支持昵称、手机号、商品名、订单号搜索
4. **筛选** - 支持多种订单状态筛选
5. **兼容性** - 兼容 'paid' 和 'completed' 两种状态
---
## 🔍 搜索功能增强
### 支持的搜索维度
1. **用户维度**
- 购买者昵称
- 购买者手机号
2. **订单维度**
- 订单号orderSn
- 订单ID
3. **商品维度**
- 商品名称(书名、章节)
- 商品描述
### 示例
```javascript
// 搜索 "张三" → 匹配用户昵称
// 搜索 "138" → 匹配手机号
// 搜索 "第1章" → 匹配商品名称
// 搜索 "MP20260204" → 匹配订单号
```
---
## ✅ 测试验证
### 测试场景
#### 1. 主仪表盘 - 最近订单
- [ ] 显示购买者昵称
- [ ] 显示完整书名
- [ ] 显示章节信息
- [ ] 显示推荐人
- [ ] 头像正常显示
#### 2. 订单管理页面
- [ ] 用户列显示昵称和手机号
- [ ] 商品列显示书名和章节
- [ ] 搜索功能正常
- [ ] 筛选功能正常
- [ ] 订单状态正确
#### 3. API 测试
```bash
# 测试订单API
curl http://localhost:3000/api/orders | jq '.orders[0] | {userNickname, description, productType}'
# 预期输出:
{
"userNickname": "张三",
"description": "章节购买-1-2",
"productType": "section"
}
```
---
## 📝 数据库查询说明
### 原查询(无购买者信息)
```sql
SELECT * FROM orders ORDER BY created_at DESC
```
### 新查询JOIN 用户信息)
```sql
SELECT
o.*,
u.nickname as user_nickname,
u.avatar as user_avatar
FROM orders o
LEFT JOIN users u ON o.user_id = u.id
ORDER BY o.created_at DESC
```
**优势**
- 一次查询获取所有必要信息
- 避免前端多次查询
- 提升页面加载速度
---
## 🚀 部署说明
### 无需数据库迁移
- ✅ 只是修改查询逻辑,不改表结构
- ✅ 使用 LEFT JOIN兼容旧数据
### 部署步骤
```bash
# 1. 构建
pnpm build
# 2. 部署
python devlop.py
# 3. 重启服务
# 在宝塔面板重启 PM2
```
---
## 📌 注意事项
### 1. 数据兼容性
- 如果 `user_id` 对应的用户不存在,显示"匿名用户"
- 如果 `description` 为空,使用 fallback 显示
### 2. 性能考虑
- LEFT JOIN 不会影响性能users 表很小)
- 前端只展示最近 5 条订单,查询很快
### 3. 未来扩展
- 可以添加更多商品类型
- 可以添加订单详情弹窗
- 可以支持导出带购买者信息的Excel
---
## ✅ 完成清单
- ✅ 修改 `/api/orders` APIJOIN users
- ✅ 优化主仪表盘"最近订单"卡片
- ✅ 优化订单管理页面表格
- ✅ 增强搜索功能
- ✅ 改进UI布局
- ✅ 创建文档
---
## 📸 效果预览
### 主仪表盘
```
┌─ 最近订单 ──────────────────────────────┐
│ │
│ [Z] 张三 · 《一场Soul的创业实验》 │
│ 章节购买 | 02-04 14:30 +¥0.95 │
│ 推荐: ABC123 │
│ │
│ [L] 李四 · 找伙伴匹配 +¥1.00 │
│ 功能服务 | 02-04 13:15 │
│ │
└──────────────────────────────────────────┘
```
### 订单管理页面
```
订单号 | 用户 | 商品 | 金额 | 状态
----------------|---------------|---------------------|--------|------
MP20260204... | 张三 | 第1章 第2节 | ¥0.95 | 已完成
| 138xxxx | 《一场Soul...》 | |
```
---
**优化完成!后台管理端现在可以清晰显示购买者、书名和章节信息了。**