Files
medical-mall/doc_mall/consumer/backup_doc_full/积分与评价功能完善需求文档.md

630 lines
21 KiB
Markdown
Raw Permalink 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.
# 商城消费者端 - 积分与评价功能完善需求文档
## 一、项目概述
### 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