增加推销模式
This commit is contained in:
373
pages/mall/consumer/doc/推销模式功能需求文档.md
Normal file
373
pages/mall/consumer/doc/推销模式功能需求文档.md
Normal file
@@ -0,0 +1,373 @@
|
||||
# 商城推销模式功能需求文档
|
||||
|
||||
## 一、功能概述
|
||||
|
||||
本文档描述商城消费者端的推销模式功能,包含以下三大模块:
|
||||
1. **分享免单系统** - 用户分享商品,达成条件后免单
|
||||
2. **会员等级系统** - 用户等级享受不同优惠价格
|
||||
3. **经销点返利系统** - 经销点销售返利
|
||||
|
||||
---
|
||||
|
||||
## 二、分享免单系统
|
||||
|
||||
### 2.1 功能描述
|
||||
|
||||
用户购买商品后,可分享商品链接给其他用户(二级用户)。当二级用户通过分享链接购买该商品累计达到指定数量(默认4件)时,原用户可获得免单奖励,免单金额存入账户余额。
|
||||
|
||||
### 2.2 业务流程
|
||||
|
||||
```
|
||||
用户A购买商品 → 生成分享链接 → 分享给用户B/C/D
|
||||
↓
|
||||
二级用户通过链接购买
|
||||
↓
|
||||
累计购买数量达标(4件)
|
||||
↓
|
||||
用户A获得免单奖励
|
||||
↓
|
||||
奖励金额存入余额
|
||||
↓
|
||||
商家微信返现后清零余额
|
||||
```
|
||||
|
||||
### 2.3 数据库设计
|
||||
|
||||
#### 2.3.1 分享记录表 ml_share_records
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| id | UUID | 主键 |
|
||||
| user_id | UUID | 分享用户ID |
|
||||
| product_id | UUID | 商品ID |
|
||||
| order_id | UUID | 关联订单ID |
|
||||
| share_code | VARCHAR(20) | 分享码(唯一) |
|
||||
| required_count | INT | 需要的购买数量(默认4) |
|
||||
| current_count | INT | 当前已购买数量 |
|
||||
| status | INT | 状态:0-进行中,1-已完成,2-已失效 |
|
||||
| reward_amount | DECIMAL(10,2) | 奖励金额 |
|
||||
| created_at | TIMESTAMPTZ | 创建时间 |
|
||||
| completed_at | TIMESTAMPTZ | 完成时间 |
|
||||
|
||||
#### 2.3.2 二级购买记录表 ml_secondary_purchases
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| id | UUID | 主键 |
|
||||
| share_record_id | UUID | 关联分享记录ID |
|
||||
| buyer_id | UUID | 购买用户ID |
|
||||
| order_id | UUID | 订单ID |
|
||||
| quantity | INT | 购买数量 |
|
||||
| created_at | TIMESTAMPTZ | 创建时间 |
|
||||
|
||||
#### 2.3.3 免单奖励记录表 ml_free_order_rewards
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| id | UUID | 主键 |
|
||||
| user_id | UUID | 获得奖励的用户ID |
|
||||
| share_record_id | UUID | 关联分享记录ID |
|
||||
| amount | DECIMAL(10,2) | 奖励金额 |
|
||||
| status | INT | 状态:0-待处理,1-已发放,2-已清零 |
|
||||
| balance_before | DECIMAL(10,2) | 发放前余额 |
|
||||
| balance_after | DECIMAL(10,2) | 发放后余额 |
|
||||
| cleared_at | TIMESTAMPTZ | 清零时间 |
|
||||
| cleared_by | UUID | 清零操作人 |
|
||||
| created_at | TIMESTAMPTZ | 创建时间 |
|
||||
|
||||
### 2.4 API 接口
|
||||
|
||||
| 接口 | 方法 | 说明 |
|
||||
|------|------|------|
|
||||
| /api/share/create | POST | 创建分享记录,生成分享码 |
|
||||
| /api/share/info | GET | 获取分享详情和进度 |
|
||||
| /api/share/validate | GET | 验证分享码有效性 |
|
||||
| /api/share/my-records | GET | 获取我的分享记录列表 |
|
||||
| /api/share/rewards | GET | 获取我的免单奖励记录 |
|
||||
| /api/admin/clear-balance | POST | 商家清零用户余额(后台) |
|
||||
|
||||
### 2.5 前端页面
|
||||
|
||||
#### 2.5.1 分享弹窗(订单详情页)
|
||||
- 显示分享链接/二维码
|
||||
- 显示当前进度(X/4)
|
||||
- 分享按钮(微信好友、朋友圈)
|
||||
|
||||
#### 2.5.2 我的分享页
|
||||
- 分享记录列表
|
||||
- 每条记录显示:商品信息、进度、状态
|
||||
- 邀请好友按钮
|
||||
|
||||
#### 2.5.3 我的余额页
|
||||
- 余额显示
|
||||
- 免单奖励记录
|
||||
- 提现说明(联系商家微信)
|
||||
|
||||
---
|
||||
|
||||
## 三、会员等级系统
|
||||
|
||||
### 3.1 功能描述
|
||||
|
||||
商家可设置多个会员等级,每个等级对应不同的优惠折扣。用户可通过以下方式升级:
|
||||
1. 商家手动设置等级
|
||||
2. 累计消费金额自动升级
|
||||
|
||||
### 3.2 等级设置
|
||||
|
||||
| 等级 | 名称 | 升级条件 | 折扣 |
|
||||
|------|------|---------|------|
|
||||
| 0 | 普通会员 | 注册即可 | 无折扣 |
|
||||
| 1 | 铜牌会员 | 累计消费500元 | 98折 |
|
||||
| 2 | 银牌会员 | 累计消费2000元 | 95折 |
|
||||
| 3 | 金牌会员 | 累计消费5000元 | 92折 |
|
||||
| 4 | 钻石会员 | 累计消费10000元 | 88折 |
|
||||
| 5 | VIP会员 | 商家手动设置 | 85折 |
|
||||
|
||||
### 3.3 数据库设计
|
||||
|
||||
#### 3.3.1 会员等级配置表 ml_member_levels
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| id | INT | 等级ID |
|
||||
| name | VARCHAR(50) | 等级名称 |
|
||||
| min_amount | DECIMAL(10,2) | 升级最低消费金额 |
|
||||
| discount | DECIMAL(5,4) | 折扣率(0.85表示85折) |
|
||||
| icon | VARCHAR(200) | 等级图标 |
|
||||
| description | TEXT | 等级说明 |
|
||||
| sort_order | INT | 排序 |
|
||||
| status | INT | 状态:0-禁用,1-启用 |
|
||||
|
||||
#### 3.3.2 用户会员信息扩展(ml_user_profiles 扩展字段)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| member_level | INT | 当前会员等级 |
|
||||
| total_spent | DECIMAL(10,2) | 累计消费金额 |
|
||||
| level_updated_at | TIMESTAMPTZ | 等级更新时间 |
|
||||
| manual_level | BOOLEAN | 是否手动设置等级 |
|
||||
| manual_level_by | UUID | 手动设置操作人 |
|
||||
|
||||
#### 3.3.3 会员等级变更记录表 ml_member_level_logs
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| id | UUID | 主键 |
|
||||
| user_id | UUID | 用户ID |
|
||||
| old_level | INT | 原等级 |
|
||||
| new_level | INT | 新等级 |
|
||||
| reason | VARCHAR(200) | 变更原因 |
|
||||
| operator_id | UUID | 操作人(自动则为空) |
|
||||
| created_at | TIMESTAMPTZ | 创建时间 |
|
||||
|
||||
### 3.4 API 接口
|
||||
|
||||
| 接口 | 方法 | 说明 |
|
||||
|------|------|------|
|
||||
| /api/member/levels | GET | 获取会员等级列表 |
|
||||
| /api/member/my-info | GET | 获取我的会员信息 |
|
||||
| /api/member/upgrade-check | POST | 检查并升级会员等级 |
|
||||
| /api/admin/set-member-level | POST | 商家手动设置用户等级 |
|
||||
|
||||
### 3.5 前端页面
|
||||
|
||||
#### 3.5.1 会员中心页
|
||||
- 当前等级显示
|
||||
- 等级进度条
|
||||
- 等级权益说明
|
||||
- 升级攻略
|
||||
|
||||
#### 3.5.2 商品详情页
|
||||
- 显示会员价
|
||||
- 显示折扣信息
|
||||
|
||||
---
|
||||
|
||||
## 四、经销点返利系统
|
||||
|
||||
### 4.1 功能描述
|
||||
|
||||
商家可创建多个经销点,每个经销点有独立的推广码。经销点通过推广码产生的订单可获得返利,返利按单数计算。
|
||||
|
||||
### 4.2 返利规则
|
||||
|
||||
| 单数范围 | 返利金额/单 |
|
||||
|---------|------------|
|
||||
| 1-10单 | 2元/单 |
|
||||
| 11-50单 | 3元/单 |
|
||||
| 51-100单 | 4元/单 |
|
||||
| 100单以上 | 5元/单 |
|
||||
|
||||
### 4.3 数据库设计
|
||||
|
||||
#### 4.3.1 经销点表 ml_distribution_points
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| id | UUID | 主键 |
|
||||
| name | VARCHAR(100) | 经销点名称 |
|
||||
| contact_name | VARCHAR(50) | 联系人 |
|
||||
| contact_phone | VARCHAR(20) | 联系电话 |
|
||||
| address | VARCHAR(200) | 地址 |
|
||||
| invite_code | VARCHAR(20) | 邀请码(唯一) |
|
||||
| owner_id | UUID | 负责人用户ID |
|
||||
| status | INT | 状态:0-禁用,1-启用 |
|
||||
| total_orders | INT | 累计订单数 |
|
||||
| total_rebate | DECIMAL(10,2) | 累计返利 |
|
||||
| balance | DECIMAL(10,2) | 可提现余额 |
|
||||
| created_at | TIMESTAMPTZ | 创建时间 |
|
||||
|
||||
#### 4.3.2 经销点订单关联表 ml_distribution_orders
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| id | UUID | 主键 |
|
||||
| distribution_id | UUID | 经销点ID |
|
||||
| order_id | UUID | 订单ID |
|
||||
| user_id | UUID | 下单用户ID |
|
||||
| order_amount | DECIMAL(10,2) | 订单金额 |
|
||||
| rebate_amount | DECIMAL(10,2) | 返利金额 |
|
||||
| status | INT | 状态:0-待结算,1-已结算 |
|
||||
| settled_at | TIMESTAMPTZ | 结算时间 |
|
||||
| created_at | TIMESTAMPTZ | 创建时间 |
|
||||
|
||||
#### 4.3.3 返利配置表 ml_rebate_config
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| id | UUID | 主键 |
|
||||
| min_orders | INT | 最小单数 |
|
||||
| max_orders | INT | 最大单数 |
|
||||
| rebate_per_order | DECIMAL(10,2) | 每单返利金额 |
|
||||
| status | INT | 状态 |
|
||||
|
||||
#### 4.3.4 返利提现记录表 ml_rebate_withdrawals
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| id | UUID | 主键 |
|
||||
| distribution_id | UUID | 经销点ID |
|
||||
| amount | DECIMAL(10,2) | 提现金额 |
|
||||
| status | INT | 状态:0-待处理,1-已完成,2-已拒绝 |
|
||||
| handled_by | UUID | 处理人 |
|
||||
| handled_at | TIMESTAMPTZ | 处理时间 |
|
||||
| created_at | TIMESTAMPTZ | 创建时间 |
|
||||
|
||||
### 4.4 API 接口
|
||||
|
||||
| 接口 | 方法 | 说明 |
|
||||
|------|------|------|
|
||||
| /api/distribution/info | GET | 获取经销点信息 |
|
||||
| /api/distribution/orders | GET | 获取经销点订单列表 |
|
||||
| /api/distribution/rebate-summary | GET | 获取返利统计 |
|
||||
| /api/distribution/withdraw | POST | 申请提现 |
|
||||
| /api/admin/distributions | GET | 获取经销点列表(后台) |
|
||||
| /api/admin/create-distribution | POST | 创建经销点(后台) |
|
||||
| /api/admin/settle-rebate | POST | 结算返利(后台) |
|
||||
|
||||
### 4.5 前端页面
|
||||
|
||||
#### 4.5.1 经销点中心页(经销点负责人)
|
||||
- 经销点信息
|
||||
- 今日/本月订单数
|
||||
- 累计返利
|
||||
- 可提现余额
|
||||
- 申请提现按钮
|
||||
|
||||
#### 4.5.2 经销点订单页
|
||||
- 订单列表
|
||||
- 筛选(日期、状态)
|
||||
- 每单返利金额显示
|
||||
|
||||
---
|
||||
|
||||
## 五、用户余额系统
|
||||
|
||||
### 5.1 数据库设计
|
||||
|
||||
#### 5.1.1 用户余额表 ml_user_balance
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| id | UUID | 主键 |
|
||||
| user_id | UUID | 用户ID |
|
||||
| balance | DECIMAL(10,2) | 当前余额 |
|
||||
| frozen_balance | DECIMAL(10,2) | 冻结余额 |
|
||||
| total_earned | DECIMAL(10,2) | 累计获得 |
|
||||
| total_withdrawn | DECIMAL(10,2) | 累计提现 |
|
||||
| updated_at | TIMESTAMPTZ | 更新时间 |
|
||||
|
||||
#### 5.1.2 余额变动记录表 ml_balance_records
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| id | UUID | 主键 |
|
||||
| user_id | UUID | 用户ID |
|
||||
| type | VARCHAR(50) | 类型:free_order-免单,rebate-返利,withdraw-提现,clear-清零 |
|
||||
| amount | DECIMAL(10,2) | 变动金额(正数增加,负数减少) |
|
||||
| balance_before | DECIMAL(10,2) | 变动前余额 |
|
||||
| balance_after | DECIMAL(10,2) | 变动后余额 |
|
||||
| related_id | UUID | 关联ID |
|
||||
| description | VARCHAR(200) | 描述 |
|
||||
| operator_id | UUID | 操作人(系统操作为空) |
|
||||
| created_at | TIMESTAMPTZ | 创建时间 |
|
||||
|
||||
---
|
||||
|
||||
## 六、前端页面汇总
|
||||
|
||||
### 6.1 消费者端新增页面
|
||||
|
||||
| 页面 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| 我的分享 | /pages/mall/consumer/share/my-shares | 分享记录列表 |
|
||||
| 分享详情 | /pages/mall/consumer/share/detail | 分享进度详情 |
|
||||
| 我的余额 | /pages/mall/consumer/balance/index | 余额和奖励记录 |
|
||||
| 会员中心 | /pages/mall/consumer/member/index | 会员等级信息 |
|
||||
| 会员权益 | /pages/mall/consumer/member/benefits | 等级权益说明 |
|
||||
|
||||
### 6.2 经销点端页面(可选独立入口)
|
||||
|
||||
| 页面 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| 经销点中心 | /pages/distribution/index | 经销点首页 |
|
||||
| 经销点订单 | /pages/distribution/orders | 订单列表 |
|
||||
| 返利记录 | /pages/distribution/rebates | 返利记录 |
|
||||
| 提现申请 | /pages/distribution/withdraw | 提现页面 |
|
||||
|
||||
---
|
||||
|
||||
## 七、开发优先级
|
||||
|
||||
### 第一阶段(核心功能)
|
||||
1. 用户余额系统
|
||||
2. 分享免单系统
|
||||
3. 会员等级系统
|
||||
|
||||
### 第二阶段(扩展功能)
|
||||
1. 经销点返利系统
|
||||
2. 后台管理功能
|
||||
3. 数据统计报表
|
||||
|
||||
---
|
||||
|
||||
## 八、注意事项
|
||||
|
||||
1. **安全性**
|
||||
- 分享码唯一且不可预测
|
||||
- 防止刷单作弊(同一用户多次购买不计入)
|
||||
- 余额变动需有完整记录
|
||||
|
||||
2. **性能**
|
||||
- 高频查询使用缓存
|
||||
- 大数据量分页处理
|
||||
|
||||
3. **合规性**
|
||||
- 返利模式需符合当地法规
|
||||
- 用户协议需明确说明规则
|
||||
|
||||
4. **扩展性**
|
||||
- 返利规则可配置
|
||||
- 会员等级可扩展
|
||||
- 支持多种分享渠道
|
||||
629
pages/mall/consumer/doc/积分与评价功能完善需求文档.md
Normal file
629
pages/mall/consumer/doc/积分与评价功能完善需求文档.md
Normal file
@@ -0,0 +1,629 @@
|
||||
# 商城消费者端 - 积分与评价功能完善需求文档
|
||||
|
||||
## 一、项目概述
|
||||
|
||||
### 1.1 项目背景
|
||||
本项目为商城消费者端应用,当前积分和评价功能已有基础实现,但存在部分功能缺失和体验优化空间。本文档旨在明确积分和评价功能的完善需求。
|
||||
|
||||
### 1.2 当前实现状态
|
||||
|
||||
| 功能模块 | 当前状态 | 说明 |
|
||||
|---------|---------|------|
|
||||
| 消费者端积分页面 | ✅ 已完成 | 显示积分余额、积分明细列表 |
|
||||
| 积分兑换商城 | ❌ 未实现 | 点击"积分兑换"提示"开发中" |
|
||||
| 消费者端商品评价 | ✅ 已完成 | 支持评分、文字、图片、匿名评价 |
|
||||
| 消费者端店铺评价 | ✅ 已完成 | 支持描述/物流/服务三维评分 |
|
||||
| 商家端评价管理 | ✅ 已完成 | 支持查看、筛选、回复评价 |
|
||||
|
||||
---
|
||||
|
||||
## 二、积分功能完善需求
|
||||
|
||||
### 2.1 功能架构图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 积分系统架构 │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||
│ │ 积分获取 │ │ 积分使用 │ │ 积分管理 │ │
|
||||
│ ├─────────────┤ ├─────────────┤ ├─────────────┤ │
|
||||
│ │ • 注册赠送 │ │ • 积分兑换 │ │ • 积分查询 │ │
|
||||
│ │ • 每日签到 │ │ • 订单抵扣 │ │ • 明细记录 │ │
|
||||
│ │ • 购物奖励 │ │ • 积分抽奖 │ │ • 过期处理 │ │
|
||||
│ │ • 评价奖励 │ │ │ │ • 积分规则 │ │
|
||||
│ │ • 邀请好友 │ │ │ │ │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 2.2 前端功能需求
|
||||
|
||||
#### 2.2.1 积分首页优化
|
||||
|
||||
**页面路径**: `pages/mall/consumer/points/index.uvue`
|
||||
|
||||
**需求描述**:
|
||||
1. **积分概览卡片**
|
||||
- 显示当前可用积分
|
||||
- 显示即将过期积分(30天内)
|
||||
- 显示历史累计积分
|
||||
- 积分趋势图表(近7天/30天)
|
||||
|
||||
2. **快捷入口**
|
||||
- 签到入口(带签到状态提示)
|
||||
- 积分兑换入口
|
||||
- 积分规则说明
|
||||
|
||||
3. **积分明细列表**
|
||||
- 支持按类型筛选(获取/消费/过期)
|
||||
- 支持按时间范围筛选
|
||||
- 下拉刷新、上拉加载更多
|
||||
|
||||
#### 2.2.2 每日签到功能(新增)
|
||||
|
||||
**页面路径**: `pages/mall/consumer/points/signin.uvue`
|
||||
|
||||
**需求描述**:
|
||||
1. **签到日历**
|
||||
- 显示当月签到记录
|
||||
- 连续签到天数统计
|
||||
- 签到奖励预览
|
||||
|
||||
2. **签到奖励规则**
|
||||
- 每日签到:+5积分
|
||||
- 连续签到7天:额外+20积分
|
||||
- 连续签到30天:额外+100积分
|
||||
|
||||
3. **签到弹窗**
|
||||
- 签到成功动画
|
||||
- 显示获得积分
|
||||
- 连续签到进度提示
|
||||
|
||||
#### 2.2.3 积分兑换商城(新增)
|
||||
|
||||
**页面路径**: `pages/mall/consumer/points/exchange.uvue`
|
||||
|
||||
**需求描述**:
|
||||
1. **兑换商品列表**
|
||||
- 优惠券兑换
|
||||
- 实物商品兑换
|
||||
- 虚拟商品兑换(会员权益等)
|
||||
|
||||
2. **商品详情**
|
||||
- 商品图片、名称、描述
|
||||
- 兑换所需积分
|
||||
- 库存状态
|
||||
- 兑换记录
|
||||
|
||||
3. **兑换流程**
|
||||
- 积分不足提示
|
||||
- 确认兑换弹窗
|
||||
- 兑换成功/失败反馈
|
||||
- 物流跟踪(实物商品)
|
||||
|
||||
#### 2.2.4 积分规则页面(新增)
|
||||
|
||||
**页面路径**: `pages/mall/consumer/points/rules.uvue`
|
||||
|
||||
**需求描述**:
|
||||
- 积分获取规则说明
|
||||
- 积分使用规则说明
|
||||
- 积分有效期说明
|
||||
- 常见问题FAQ
|
||||
|
||||
### 2.3 后端API需求
|
||||
|
||||
#### 2.3.1 新增API接口
|
||||
|
||||
| 接口名称 | 请求方法 | 接口路径 | 说明 |
|
||||
|---------|---------|---------|------|
|
||||
| 签到 | POST | `/api/points/signin` | 用户每日签到 |
|
||||
| 获取签到记录 | GET | `/api/points/signin-records` | 获取月度签到记录 |
|
||||
| 获取兑换商品列表 | GET | `/api/points/exchange-products` | 获取可兑换商品 |
|
||||
| 积分兑换 | POST | `/api/points/exchange` | 兑换商品 |
|
||||
| 获取兑换记录 | GET | `/api/points/exchange-records` | 获取兑换历史 |
|
||||
| 积分过期提醒 | GET | `/api/points/expiring` | 获取即将过期积分 |
|
||||
|
||||
#### 2.3.2 接口详细设计
|
||||
|
||||
**签到接口**
|
||||
```typescript
|
||||
// 请求
|
||||
POST /api/points/signin
|
||||
Response: {
|
||||
success: boolean
|
||||
points: number // 本次获得积分
|
||||
continuous_days: number // 连续签到天数
|
||||
bonus_points: number // 额外奖励积分
|
||||
total_points: number // 当前总积分
|
||||
}
|
||||
```
|
||||
|
||||
**积分兑换接口**
|
||||
```typescript
|
||||
// 请求
|
||||
POST /api/points/exchange
|
||||
Body: {
|
||||
product_id: string // 兑换商品ID
|
||||
quantity: number // 兑换数量
|
||||
address_id?: string // 收货地址(实物商品)
|
||||
}
|
||||
Response: {
|
||||
success: boolean
|
||||
exchange_id: string // 兑换记录ID
|
||||
points_used: number // 消耗积分
|
||||
remaining_points: number // 剩余积分
|
||||
}
|
||||
```
|
||||
|
||||
### 2.4 数据库设计
|
||||
|
||||
#### 2.4.1 现有表结构
|
||||
|
||||
**用户积分表 (ml_user_points)**
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS ml_user_points (
|
||||
user_id UUID NOT NULL PRIMARY KEY REFERENCES auth.users(id),
|
||||
points INT DEFAULT 0 NOT NULL, -- 当前可用积分
|
||||
total_earned INT DEFAULT 0, -- 历史累计获得积分
|
||||
total_used INT DEFAULT 0, -- 历史累计使用积分
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 添加索引
|
||||
CREATE INDEX idx_user_points_user_id ON ml_user_points(user_id);
|
||||
```
|
||||
|
||||
**积分记录表 (ml_point_records)**
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS ml_point_records (
|
||||
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
||||
user_id UUID NOT NULL REFERENCES auth.users(id),
|
||||
points INT NOT NULL, -- 变动积分 (正/负)
|
||||
balance INT NOT NULL, -- 变动后余额
|
||||
type VARCHAR(50) NOT NULL, -- 类型
|
||||
reference_id UUID, -- 关联ID(订单ID/兑换ID等)
|
||||
description TEXT,
|
||||
expires_at TIMESTAMPTZ, -- 过期时间
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 添加索引
|
||||
CREATE INDEX idx_point_records_user_id ON ml_point_records(user_id);
|
||||
CREATE INDEX idx_point_records_type ON ml_point_records(type);
|
||||
CREATE INDEX idx_point_records_created_at ON ml_point_records(created_at);
|
||||
```
|
||||
|
||||
#### 2.4.2 新增表结构
|
||||
|
||||
**签到记录表 (ml_signin_records)**
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS ml_signin_records (
|
||||
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
||||
user_id UUID NOT NULL REFERENCES auth.users(id),
|
||||
signin_date DATE NOT NULL, -- 签到日期
|
||||
points_earned INT DEFAULT 0, -- 获得积分
|
||||
bonus_points INT DEFAULT 0, -- 奖励积分
|
||||
continuous_days INT DEFAULT 1, -- 当次连续签到天数
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
|
||||
UNIQUE(user_id, signin_date) -- 每用户每天只能签到一次
|
||||
);
|
||||
|
||||
-- 添加索引
|
||||
CREATE INDEX idx_signin_records_user_id ON ml_signin_records(user_id);
|
||||
CREATE INDEX idx_signin_records_date ON ml_signin_records(signin_date);
|
||||
```
|
||||
|
||||
**积分兑换商品表 (ml_point_products)**
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS ml_point_products (
|
||||
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
||||
name VARCHAR(200) NOT NULL, -- 商品名称
|
||||
description TEXT, -- 商品描述
|
||||
image_url VARCHAR(500), -- 商品图片
|
||||
product_type VARCHAR(50) NOT NULL, -- 类型: coupon/physical/virtual
|
||||
points_required INT NOT NULL, -- 所需积分
|
||||
original_price DECIMAL(10,2), -- 原价(展示用)
|
||||
stock INT DEFAULT 0, -- 库存
|
||||
status INT DEFAULT 1, -- 状态: 0=下架, 1=上架
|
||||
sort_order INT DEFAULT 0, -- 排序
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
**积分兑换记录表 (ml_point_exchanges)**
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS ml_point_exchanges (
|
||||
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
||||
user_id UUID NOT NULL REFERENCES auth.users(id),
|
||||
product_id UUID NOT NULL REFERENCES ml_point_products(id),
|
||||
quantity INT DEFAULT 1, -- 兑换数量
|
||||
points_used INT NOT NULL, -- 消耗积分
|
||||
status INT DEFAULT 0, -- 状态: 0=待处理, 1=已发货, 2=已完成, 3=已取消
|
||||
tracking_no VARCHAR(100), -- 物流单号
|
||||
address_id UUID, -- 收货地址
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
**积分规则配置表 (ml_point_rules)**
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS ml_point_rules (
|
||||
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
||||
rule_type VARCHAR(50) NOT NULL, -- 规则类型
|
||||
rule_name VARCHAR(100) NOT NULL, -- 规则名称
|
||||
points INT NOT NULL, -- 积分值
|
||||
description TEXT, -- 规则说明
|
||||
config JSONB, -- 扩展配置
|
||||
status INT DEFAULT 1, -- 状态
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 初始化规则数据
|
||||
INSERT INTO ml_point_rules (rule_type, rule_name, points, description) VALUES
|
||||
('register', '注册赠送', 100, '新用户注册赠送积分'),
|
||||
('signin_daily', '每日签到', 5, '每日签到获得积分'),
|
||||
('signin_continuous_7', '连续签到7天奖励', 20, '连续签到7天额外奖励'),
|
||||
('signin_continuous_30', '连续签到30天奖励', 100, '连续签到30天额外奖励'),
|
||||
('shopping', '购物奖励', 1, '每消费1元获得1积分'),
|
||||
('review', '评价奖励', 10, '完成商品评价获得积分'),
|
||||
('review_with_image', '带图评价奖励', 20, '带图评价额外奖励');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、评价功能完善需求
|
||||
|
||||
### 3.1 功能架构图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 评价系统架构 │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||
│ │ 评价提交 │ │ 评价展示 │ │ 评价管理 │ │
|
||||
│ ├─────────────┤ ├─────────────┤ ├─────────────┤ │
|
||||
│ │ • 商品评价 │ │ • 商品详情 │ │ • 商家回复 │ │
|
||||
│ │ • 店铺评价 │ │ • 评价列表 │ │ • 评价统计 │ │
|
||||
│ │ • 配送评价 │ │ • 评分统计 │ │ • 违规处理 │ │
|
||||
│ │ • 追加评价 │ │ • 筛选排序 │ │ • 评价审核 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 3.2 前端功能需求
|
||||
|
||||
#### 3.2.1 评价页面优化
|
||||
|
||||
**页面路径**: `pages/mall/consumer/review.uvue`
|
||||
|
||||
**需求描述**:
|
||||
1. **评价表单优化**
|
||||
- 支持视频上传(限1个,30秒内)
|
||||
- 支持图片拖拽排序
|
||||
- 添加评价标签选择(质量好/物流快/服务好等)
|
||||
- 添加商品满意度维度(质量/包装/性价比)
|
||||
|
||||
2. **追加评价功能**
|
||||
- 订单完成后7天内可追加评价
|
||||
- 追加评价入口(订单详情页)
|
||||
- 追加评价表单
|
||||
|
||||
3. **评价预览**
|
||||
- 提交前预览评价效果
|
||||
- 匿名评价预览效果
|
||||
|
||||
#### 3.2.2 商品评价列表(新增)
|
||||
|
||||
**页面路径**: `pages/mall/consumer/product-reviews.uvue`
|
||||
|
||||
**需求描述**:
|
||||
1. **评价统计概览**
|
||||
- 好评率百分比
|
||||
- 评分分布图(1-5星)
|
||||
- 标签云(高频评价关键词)
|
||||
|
||||
2. **评价列表**
|
||||
- 支持按评分筛选
|
||||
- 支持按时间/点赞数排序
|
||||
- 支持只看有图/有视频评价
|
||||
- 评价点赞功能
|
||||
- 评价举报功能
|
||||
|
||||
3. **评价详情**
|
||||
- 点击评价查看详情
|
||||
- 查看商家回复
|
||||
- 查看追加评价
|
||||
|
||||
#### 3.2.3 我的评价页面(新增)
|
||||
|
||||
**页面路径**: `pages/mall/consumer/my-reviews.uvue`
|
||||
|
||||
**需求描述**:
|
||||
1. **评价列表**
|
||||
- 显示已评价商品
|
||||
- 显示待评价商品
|
||||
- 显示可追加评价商品
|
||||
|
||||
2. **评价操作**
|
||||
- 编辑评价(24小时内)
|
||||
- 删除评价
|
||||
- 追加评价
|
||||
|
||||
#### 3.2.4 配送员评价(完善)
|
||||
|
||||
**页面路径**: `pages/mall/delivery/ratings.uvue`
|
||||
|
||||
**需求描述**:
|
||||
- 对接真实API(当前使用Mock数据)
|
||||
- 配送员评分统计
|
||||
- 配送评价列表
|
||||
|
||||
### 3.3 后端API需求
|
||||
|
||||
#### 3.3.1 新增API接口
|
||||
|
||||
| 接口名称 | 请求方法 | 接口路径 | 说明 |
|
||||
|---------|---------|---------|------|
|
||||
| 获取商品评价列表 | GET | `/api/reviews/product/:productId` | 分页获取商品评价 |
|
||||
| 获取评价统计 | GET | `/api/reviews/stats/:productId` | 获取商品评分统计 |
|
||||
| 追加评价 | POST | `/api/reviews/append` | 追加评价内容 |
|
||||
| 评价点赞 | POST | `/api/reviews/like/:id` | 点赞评价 |
|
||||
| 获取我的评价 | GET | `/api/reviews/my` | 获取用户评价列表 |
|
||||
| 编辑评价 | PUT | `/api/reviews/:id` | 编辑评价(24小时内) |
|
||||
| 删除评价 | DELETE | `/api/reviews/:id` | 删除评价 |
|
||||
| 评价举报 | POST | `/api/reviews/report/:id` | 举报违规评价 |
|
||||
|
||||
#### 3.3.2 接口详细设计
|
||||
|
||||
**获取商品评价列表**
|
||||
```typescript
|
||||
GET /api/reviews/product/:productId?page=1&limit=10&rating=5&has_image=true
|
||||
Response: {
|
||||
total: number
|
||||
page: number
|
||||
limit: number
|
||||
data: [{
|
||||
id: string
|
||||
user_name: string
|
||||
user_avatar: string
|
||||
rating: number
|
||||
content: string
|
||||
images: string[]
|
||||
videos: string[]
|
||||
tags: string[]
|
||||
like_count: number
|
||||
is_liked: boolean
|
||||
reply: {
|
||||
content: string
|
||||
created_at: string
|
||||
}
|
||||
append_content?: {
|
||||
content: string
|
||||
created_at: string
|
||||
}
|
||||
created_at: string
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
**获取评价统计**
|
||||
```typescript
|
||||
GET /api/reviews/stats/:productId
|
||||
Response: {
|
||||
total_count: number
|
||||
avg_rating: number
|
||||
good_rate: number // 好评率
|
||||
rating_distribution: { // 评分分布
|
||||
1: number
|
||||
2: number
|
||||
3: number
|
||||
4: number
|
||||
5: number
|
||||
}
|
||||
tags: [{ // 高频标签
|
||||
name: string
|
||||
count: number
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
### 3.4 数据库设计
|
||||
|
||||
#### 3.4.1 现有表结构优化
|
||||
|
||||
**商品评价表 (ml_product_reviews)**
|
||||
```sql
|
||||
-- 添加新字段
|
||||
ALTER TABLE ml_product_reviews ADD COLUMN IF NOT EXISTS videos JSONB DEFAULT '[]';
|
||||
ALTER TABLE ml_product_reviews ADD COLUMN IF NOT EXISTS tags JSONB DEFAULT '[]';
|
||||
ALTER TABLE ml_product_reviews ADD COLUMN IF NOT EXISTS like_count INT DEFAULT 0;
|
||||
ALTER TABLE ml_product_reviews ADD COLUMN IF NOT EXISTS is_edited BOOLEAN DEFAULT false;
|
||||
ALTER TABLE ml_product_reviews ADD COLUMN IF NOT EXISTS append_content TEXT;
|
||||
ALTER TABLE ml_product_reviews ADD COLUMN IF NOT EXISTS append_at TIMESTAMPTZ;
|
||||
ALTER TABLE ml_product_reviews ADD COLUMN IF NOT EXISTS append_images JSONB DEFAULT '[]';
|
||||
```
|
||||
|
||||
#### 3.4.2 新增表结构
|
||||
|
||||
**评价点赞表 (ml_review_likes)**
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS ml_review_likes (
|
||||
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
||||
review_id UUID NOT NULL REFERENCES ml_product_reviews(id),
|
||||
user_id UUID NOT NULL REFERENCES auth.users(id),
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
|
||||
UNIQUE(review_id, user_id) -- 每用户对每条评价只能点赞一次
|
||||
);
|
||||
|
||||
CREATE INDEX idx_review_likes_review_id ON ml_review_likes(review_id);
|
||||
```
|
||||
|
||||
**评价举报表 (ml_review_reports)**
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS ml_review_reports (
|
||||
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
||||
review_id UUID NOT NULL REFERENCES ml_product_reviews(id),
|
||||
user_id UUID NOT NULL REFERENCES auth.users(id),
|
||||
reason VARCHAR(200) NOT NULL, -- 举报原因
|
||||
description TEXT, -- 详细说明
|
||||
status INT DEFAULT 0, -- 状态: 0=待处理, 1=已处理, 2=已驳回
|
||||
handle_result TEXT, -- 处理结果
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
**配送员评价表 (ml_delivery_ratings)**
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS ml_delivery_ratings (
|
||||
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
||||
order_id UUID NOT NULL REFERENCES ml_orders(id),
|
||||
delivery_user_id UUID NOT NULL, -- 配送员ID
|
||||
user_id UUID NOT NULL REFERENCES auth.users(id),
|
||||
rating INT CHECK (rating >= 1 AND rating <= 5),
|
||||
content TEXT,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
|
||||
UNIQUE(order_id) -- 每订单只能评价一次
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、开发优先级
|
||||
|
||||
### 4.1 第一阶段(高优先级)
|
||||
|
||||
| 序号 | 功能 | 模块 | 预估工时 |
|
||||
|-----|------|------|---------|
|
||||
| 1 | 每日签到功能 | 积分 | 2天 |
|
||||
| 2 | 积分兑换商城 | 积分 | 3天 |
|
||||
| 3 | 商品评价列表展示 | 评价 | 2天 |
|
||||
| 4 | 我的评价页面 | 评价 | 1天 |
|
||||
|
||||
### 4.2 第二阶段(中优先级)
|
||||
|
||||
| 序号 | 功能 | 模块 | 预估工时 |
|
||||
|-----|------|------|---------|
|
||||
| 1 | 积分规则配置 | 积分 | 1天 |
|
||||
| 2 | 追加评价功能 | 评价 | 1天 |
|
||||
| 3 | 评价点赞功能 | 评价 | 0.5天 |
|
||||
| 4 | 配送员评价对接 | 评价 | 1天 |
|
||||
|
||||
### 4.3 第三阶段(低优先级)
|
||||
|
||||
| 序号 | 功能 | 模块 | 预估工时 |
|
||||
|-----|------|------|---------|
|
||||
| 1 | 积分过期提醒 | 积分 | 0.5天 |
|
||||
| 2 | 评价视频上传 | 评价 | 1天 |
|
||||
| 3 | 评价举报功能 | 评价 | 0.5天 |
|
||||
| 4 | 管理端完善 | 综合 | 2天 |
|
||||
|
||||
---
|
||||
|
||||
## 五、技术要点
|
||||
|
||||
### 5.1 积分系统技术要点
|
||||
|
||||
1. **积分并发安全**
|
||||
- 使用数据库事务保证积分变动原子性
|
||||
- 添加乐观锁防止超扣
|
||||
|
||||
2. **积分过期处理**
|
||||
- 定时任务每日检查过期积分
|
||||
- 过期前7天推送提醒通知
|
||||
|
||||
3. **签到防刷**
|
||||
- 限制每日只能签到一次
|
||||
- 记录签到IP,检测异常行为
|
||||
|
||||
### 5.2 评价系统技术要点
|
||||
|
||||
1. **评价数据统计**
|
||||
- 使用触发器自动更新商品评分统计
|
||||
- 缓存热门商品评价数据
|
||||
|
||||
2. **图片/视频处理**
|
||||
- 图片压缩后上传
|
||||
- 视频转码处理
|
||||
- CDN加速访问
|
||||
|
||||
3. **敏感词过滤**
|
||||
- 评价内容敏感词检测
|
||||
- 自动替换或人工审核
|
||||
|
||||
---
|
||||
|
||||
## 六、测试要点
|
||||
|
||||
### 6.1 积分功能测试
|
||||
|
||||
- [ ] 签到功能:每日签到、连续签到奖励
|
||||
- [ ] 积分兑换:积分不足、库存不足、兑换成功
|
||||
- [ ] 积分过期:自动过期、过期提醒
|
||||
- [ ] 并发测试:同时兑换、同时签到
|
||||
|
||||
### 6.2 评价功能测试
|
||||
|
||||
- [ ] 评价提交:文字、图片、视频、匿名
|
||||
- [ ] 评价展示:列表、筛选、排序
|
||||
- [ ] 评价操作:编辑、删除、追加、点赞
|
||||
- [ ] 边界测试:空内容、超长内容、敏感词
|
||||
|
||||
---
|
||||
|
||||
## 七、附录
|
||||
|
||||
### 7.1 相关文件路径
|
||||
|
||||
```
|
||||
pages/
|
||||
├── mall/
|
||||
│ └── consumer/
|
||||
│ ├── points/
|
||||
│ │ ├── index.uvue # 积分首页(已有)
|
||||
│ │ ├── signin.uvue # 签到页面(新增)
|
||||
│ │ ├── exchange.uvue # 兑换商城(新增)
|
||||
│ │ └── rules.uvue # 积分规则(新增)
|
||||
│ ├── review.uvue # 评价页面(已有)
|
||||
│ ├── product-reviews.uvue # 商品评价列表(新增)
|
||||
│ └── my-reviews.uvue # 我的评价(新增)
|
||||
│
|
||||
└── user/
|
||||
└── login.uvue # 登录页面
|
||||
|
||||
utils/
|
||||
└── supabaseService.uts # API服务
|
||||
|
||||
types/
|
||||
└── mall-types.uts # 类型定义
|
||||
|
||||
doc_mall/
|
||||
└── consumer/
|
||||
└── sql/
|
||||
├── 01_wallet_and_points.sql
|
||||
└── add_reviews_tables.sql
|
||||
```
|
||||
|
||||
### 7.2 参考文档
|
||||
|
||||
- [Supabase 官方文档](https://supabase.com/docs)
|
||||
- [uni-app x 开发文档](https://doc.dcloud.net.cn/uni-app-x/)
|
||||
- [UTS 语法指南](https://doc.dcloud.net.cn/uni-app-x/uts/)
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: v1.0
|
||||
**创建日期**: 2026-03-05
|
||||
**最后更新**: 2026-03-05
|
||||
Reference in New Issue
Block a user