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