# 商城消费者端 - 积分与评价功能完善需求文档

## 一、项目概述

### 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
