Files
sale/商品售卖网站技术文档.md
T

752 lines
34 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.
# 商品售卖网站技术文档
## 1. 项目概述
本项目是一个多功能商品售卖平台,支持管理员后台、供货商后台和用户前端,具备完整的商品管理、订单处理、库存管理、多语言支持等功能。
## 2. 技术栈选择
### 2.1 前端技术
- **框架**Vue 3 + Vite
- **状态管理**Pinia
- **路由**Vue Router
- **UI 库**Element Plus
- **样式**SCSS
- **国际化**i18n
- **HTTP 客户端**Axios
### 2.2 后端技术
- **语言**Go 1.20+
- **Web 框架**Gin
- **数据库**SQLite(默认)/ MySQL / PostgreSQL
- **缓存**Redis
- **认证**JWT
- **ORM**GORM
- **邮件服务**SMTP
## 3. 系统架构
### 3.1 架构图
```
┌─────────────────────────────────────────────────────────────────────┐
│ 前端层 │
├─────────────────────┬─────────────────────┬───────────────────────┤
│ 用户前端 │ 管理员后台 │ 供货商后台 │
└─────────┬──────────┴─────────┬──────────┴──────────┬──────────────┘
│ │ │
┌─────────▼────────────────────▼────────────────────▼──────────────┐
│ API 层 │
└───────────────────────────────┬──────────────────────────────────┘
┌───────────────────────────────▼──────────────────────────────────┐
│ 服务层 │
└───────────────────────────────┬──────────────────────────────────┘
┌───────────────────────────────▼──────────────────────────────────┐
│ 数据层 │
└───────────────────────────────────────────────────────────────────┘
```
## 4. 功能模块设计
### 4.1 核心模块
#### 4.1.1 用户管理
- **用户注册**:支持邮箱注册,需验证邮箱,可通过邀请码注册获得额外购买资格
- **用户登录**:支持邮箱密码登录,可记住密码,登录失败次数限制
- **忘记密码**:通过邮箱验证码重置密码
- **邮箱验证**:注册和修改邮箱时需验证,确保邮箱有效性
- **个人中心**:展示用户基本信息、购买资格、订单历史、收藏夹等
- **收货地址管理**:支持添加、编辑、删除收货地址,设置默认地址
- **密码修改**:定期提醒用户修改密码,支持密码强度检测
- **邀请系统**:生成个人邀请码,邀请新用户注册可获得购买资格奖励
#### 4.1.2 商品管理
- **商品分类管理**:支持多级分类,可设置分类图标、排序,支持分类购买限制
- **品牌管理**:支持品牌创建、编辑、删除,可设置品牌Logo、描述、排序
- **商品信息管理**:支持商品名称、描述、价格、库存、图片等基本信息管理
- **自定义字段**:支持为商品添加自定义字段,如颜色、尺寸、材质等属性
- **商品价格设置**:支持设置基础价格、促销价格、会员价格等
- **购买资格设置**:设置商品是否需要购买资格才能购买
- **购买限制设置**
- 商品级限制:最低/最高购买数量、重量、金额
- 分类级限制:最低/最高购买数量、重量、金额
- **商品多分类归属**:支持一个商品属于多个分类
- **商品品牌关联**:支持为商品关联品牌
- **库存管理**:实时库存监控,库存预警,支持供货商独立管理库存
#### 4.1.3 订单管理
- **购物车功能**:支持添加/删除商品,调整数量,查看总价,保存购物车状态
- **订单创建与支付**:支持多种支付方式,订单创建后自动扣除购买资格
- **订单状态跟踪**:订单状态实时更新,包括待支付、待确认、待发货、已发货、已完成、已退款等
- **订单导出**:支持导出订单为Excel、CSV等格式
- **订单确认与发货**:供货商可确认订单,上传发货照片、快递单照片和报关清单
- **物流信息管理**:支持添加快递单号,实时跟踪物流状态
- **订单退款**
- 未发货订单可申请退款
- 已发货订单不允许退款
- 退款时扣除管理员设置的通道费率
- 退款状态跟踪与管理
#### 4.1.4 供货商管理
- **供货商注册与授权**:管理员添加和授权供货商,设置供货商权限
- **商品授权管理**:管理员授权特定分类或商品给供货商管理
- **库存管理**:供货商可独立管理授权商品的库存数量,实时更新
- **订单处理**:供货商可查看分配给自己的订单,确认订单状态
- **发货管理**:供货商可上传发货照片、快递单照片和报关清单,添加快递单号
- **销售统计**:供货商可查看自己的销售数据和库存状态
#### 4.1.5 管理员功能
- **仪表盘统计**:显示用户数、商品数、订单数、营收等统计数据
- **系统设置**
- 网站基本信息设置
- 验证码开关设置
- 通道费率设置
- **SMTP 配置**:配置邮件发送服务器,用于验证码、订单通知等
- **支付通道配置**:配置多种支付方式,如支付宝、微信支付等
- **运费设置**:设置首重、续重费用,支持不同地区运费设置
- **服务费设置**:设置服务费费率,支持按订单金额比例计算
- **邀请奖励设置**:设置邀请X人赠送X个购买资格
- **抽奖系统**:创建和管理抽奖活动,设置奖品和规则
- **工单管理**:查看、分配、处理用户提交的工单
#### 4.1.6 资讯模块
- **资讯发布**:管理员可创建、编辑、删除资讯文章
- **资讯置顶**:支持设置资讯为置顶状态,置顶资讯优先显示
- **资讯排序**:支持自定义排序,置顶资讯按排序字段显示
- **资讯封面**:支持设置资讯封面图片
- **资讯摘要**:支持设置资讯摘要信息
- **发布控制**:支持设置资讯为草稿或已发布状态
- **用户端浏览**:用户可浏览已发布的资讯列表和详情
#### 4.1.7 多语言支持
- **语言切换**:支持中文、日语、英语三种语言切换
- **语言配置**:管理员可配置各语言的翻译内容
- **语言偏好**:保存用户语言偏好,下次访问自动使用
### 4.2 特色功能
#### 4.2.1 购买资格系统
- **商品购买资格设置**:设置商品是否需要购买资格,需要多少资格
- **邀请赠送资格**:邀请新用户注册可获得购买资格奖励
- **抽奖获得资格**:通过参与抽奖活动获得购买资格
- **资格管理**:用户可查看自己的购买资格数量和使用记录
#### 4.2.2 抽奖系统
- **自定义抽奖物品**:支持设置实物奖品、虚拟奖品和购买资格
- **购买权重抽奖**:根据用户购买金额计算权重,权重越高中奖概率越大
- **随机抽奖**:完全随机抽取中奖用户
- **周期抽奖**:支持设置每日、每周、每月等周期抽奖
- **报名有效期设置**:设置用户报名一次,可参与多期抽奖的有效期
- **抽奖结果公示**:自动公示抽奖结果,保证公平透明
#### 4.2.3 工单系统
- **用户提交工单**:用户可提交问题、建议、投诉等工单
- **工单分类**:支持多种工单类型,如订单问题、账户问题、商品问题等
- **管理员处理工单**:管理员可分配、处理、回复工单
- **工单状态跟踪**:实时更新工单状态,如待处理、处理中、已解决、已关闭等
- **工单历史**:用户可查看自己的工单历史和处理记录
## 5. 数据库设计
### 5.0 数据库配置
系统支持三种数据库,通过环境变量 `DB_DRIVER` 配置:
| DB_DRIVER 值 | 数据库 | 说明 |
| :--- | :--- | :--- |
| `sqlite` | SQLite | 默认,无需额外安装,文件存储在 `DB_FILEPATH` 指定路径 |
| `mysql` | MySQL | 需配置 `DB_HOST``DB_PORT``DB_USER``DB_PASSWORD``DB_NAME` |
| `postgres` | PostgreSQL | 需配置 `DB_HOST``DB_PORT``DB_USER``DB_PASSWORD``DB_NAME``DB_SSLMODE` |
**环境变量配置示例**
```
# SQLite(默认)
DB_DRIVER=sqlite
DB_FILEPATH=sale.db
# MySQL
DB_DRIVER=mysql
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=password
DB_NAME=sale
# PostgreSQL
DB_DRIVER=postgres
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=password
DB_NAME=sale
DB_SSLMODE=disable
```
### 5.1 用户表 (users)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 用户ID |
| `username` | `VARCHAR(50)` | `UNIQUE NOT NULL` | 用户名 |
| `email` | `VARCHAR(100)` | `UNIQUE NOT NULL` | 邮箱 |
| `password_hash` | `VARCHAR(255)` | `NOT NULL` | 密码哈希 |
| `role` | `VARCHAR(20)` | `NOT NULL` | 角色(user/supplier/admin) |
| `purchase_credits` | `INTEGER` | `DEFAULT 0` | 购买资格数量 |
| `invite_code` | `VARCHAR(20)` | `UNIQUE` | 邀请码 |
| `referred_by` | `INTEGER` | `REFERENCES users(id)` | 推荐人ID |
| `created_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 创建时间 |
| `updated_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 更新时间 |
### 5.2 商品分类表 (categories)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 分类ID |
| `name` | `VARCHAR(100)` | `NOT NULL` | 分类名称 |
| `description` | `TEXT` | | 分类描述 |
| `parent_id` | `INTEGER` | `REFERENCES categories(id)` | 父分类ID |
| `created_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 创建时间 |
| `updated_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 更新时间 |
### 5.3 品牌表 (brands)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 品牌ID |
| `name` | `VARCHAR(255)` | `UNIQUE NOT NULL` | 品牌名称 |
| `description` | `TEXT` | | 品牌描述 |
| `logo` | `VARCHAR(500)` | | 品牌Logo URL |
| `sort_order` | `INTEGER` | `DEFAULT 0` | 排序 |
| `created_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 创建时间 |
| `updated_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 更新时间 |
### 5.4 商品表 (products)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 商品ID |
| `name` | `VARCHAR(255)` | `NOT NULL` | 商品名称 |
| `description` | `TEXT` | | 商品描述 |
| `price` | `DECIMAL(10,2)` | `NOT NULL` | 商品价格 |
| `min_purchase` | `INTEGER` | `DEFAULT 1` | 最低购买数量 |
| `max_purchase` | `INTEGER` | | 最大购买数量 |
| `min_weight` | `DECIMAL(10,2)` | | 最低购买重量 |
| `max_weight` | `DECIMAL(10,2)` | | 最大购买重量 |
| `require_credit` | `BOOLEAN` | `DEFAULT FALSE` | 是否需要购买资格 |
| `credit_cost` | `INTEGER` | `DEFAULT 0` | 购买所需资格数量 |
| `credit_reward` | `INTEGER` | `DEFAULT 0` | 购买后赠送的资格数量 |
| `images` | `TEXT` | | 商品图片(JSON数组) |
| `is_active` | `BOOLEAN` | `DEFAULT TRUE` | 是否上架 |
| `brand_id` | `INTEGER` | `REFERENCES brands(id)` | 品牌ID |
| `created_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 创建时间 |
| `updated_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 更新时间 |
### 5.5 商品自定义字段表 (product_custom_fields)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 字段ID |
| `product_id` | `INTEGER` | `REFERENCES products(id)` | 商品ID |
| `field_name` | `VARCHAR(100)` | `NOT NULL` | 字段名称 |
| `field_value` | `TEXT` | | 字段值 |
| `created_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 创建时间 |
### 5.6 库存表 (inventory)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 库存ID |
| `product_id` | `INTEGER` | `REFERENCES products(id)` | 商品ID |
| `supplier_id` | `INTEGER` | `REFERENCES users(id)` | 供货商ID |
| `quantity` | `INTEGER` | `DEFAULT 0` | 库存数量 |
| `updated_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 更新时间 |
### 5.7 购物车表 (carts)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 购物车ID |
| `user_id` | `INTEGER` | `REFERENCES users(id)` | 用户ID |
| `product_id` | `INTEGER` | `REFERENCES products(id)` | 商品ID |
| `quantity` | `INTEGER` | `NOT NULL` | 数量 |
| `created_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 创建时间 |
| `updated_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 更新时间 |
### 5.8 订单表 (orders)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 订单ID |
| `user_id` | `INTEGER` | `REFERENCES users(id)` | 用户ID |
| `supplier_id` | `INTEGER` | `REFERENCES users(id)` | 供货商ID |
| `subtotal` | `DECIMAL(10,2)` | `NOT NULL` | 商品小计 |
| `shipping_fee` | `DECIMAL(10,2)` | `DEFAULT 0` | 运费 |
| `service_fee` | `DECIMAL(10,2)` | `DEFAULT 0` | 服务费 |
| `tax` | `DECIMAL(10,2)` | `DEFAULT 0` | 税费 |
| `total_amount` | `DECIMAL(10,2)` | `NOT NULL` | 订单总金额 |
| `refund_amount` | `DECIMAL(10,2)` | | 退款金额 |
| `refund_status` | `VARCHAR(20)` | | 退款状态 |
| `refund_reason` | `TEXT` | | 退款原因 |
| `status` | `VARCHAR(20)` | `NOT NULL` | 订单状态 |
| `shipping_address_id` | `INTEGER` | `REFERENCES addresses(id)` | 收货地址ID |
| `tracking_number` | `VARCHAR(100)` | | 快递单号 |
| `shipping_photo` | `TEXT` | | 发货照片 |
| `express_photo` | `TEXT` | | 快递单照片 |
| `customs_photo` | `TEXT` | | 报关清单照片 |
| `payment_method` | `VARCHAR(50)` | | 支付方式 |
| `created_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 创建时间 |
| `updated_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 更新时间 |
### 5.9 订单商品表 (order_items)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 订单项ID |
| `order_id` | `INTEGER` | `REFERENCES orders(id)` | 订单ID |
| `product_id` | `INTEGER` | `REFERENCES products(id)` | 商品ID |
| `quantity` | `INTEGER` | `NOT NULL` | 数量 |
| `price` | `DECIMAL(10,2)` | `NOT NULL` | 单价 |
### 5.10 收货地址表 (addresses)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 地址ID |
| `user_id` | `INTEGER` | `REFERENCES users(id)` | 用户ID |
| `name` | `VARCHAR(50)` | `NOT NULL` | 收件人姓名 |
| `phone` | `VARCHAR(20)` | `NOT NULL` | 联系电话 |
| `address` | `TEXT` | `NOT NULL` | 详细地址 |
| `is_default` | `BOOLEAN` | `DEFAULT FALSE` | 是否默认地址 |
| `created_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 创建时间 |
| `updated_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 更新时间 |
### 5.11 抽奖表 (lotteries)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 抽奖ID |
| `name` | `VARCHAR(100)` | `NOT NULL` | 抽奖名称 |
| `description` | `TEXT` | | 抽奖描述 |
| `start_time` | `TIMESTAMP` | `NOT NULL` | 开始时间 |
| `end_time` | `TIMESTAMP` | `NOT NULL` | 结束时间 |
| `cycle` | `VARCHAR(20)` | | 周期类型 |
| `daily_quota` | `INTEGER` | | 每日限额 |
| `total_quota` | `INTEGER` | | 总限额 |
| `registration_validity` | `INTEGER` | | 报名有效期(天) |
| `created_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 创建时间 |
| `updated_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 更新时间 |
### 5.12 抽奖奖品表 (lottery_prizes)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 奖品ID |
| `lottery_id` | `INTEGER` | `REFERENCES lotteries(id)` | 抽奖ID |
| `name` | `VARCHAR(100)` | `NOT NULL` | 奖品名称 |
| `type` | `VARCHAR(20)` | `NOT NULL` | 奖品类型 |
| `quantity` | `INTEGER` | `NOT NULL` | 奖品数量 |
| `weight` | `INTEGER` | `DEFAULT 1` | 权重 |
| `credit_reward` | `INTEGER` | | 赠送资格数量 |
### 5.13 抽奖参与表 (lottery_participants)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 参与ID |
| `lottery_id` | `INTEGER` | `REFERENCES lotteries(id)` | 抽奖ID |
| `user_id` | `INTEGER` | `REFERENCES users(id)` | 用户ID |
| `purchase_weight` | `INTEGER` | `DEFAULT 0` | 购买权重 |
| `registered_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 报名时间 |
### 5.14 工单表 (tickets)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 工单ID |
| `user_id` | `INTEGER` | `REFERENCES users(id)` | 用户ID |
| `title` | `VARCHAR(200)` | `NOT NULL` | 工单标题 |
| `content` | `TEXT` | `NOT NULL` | 工单内容 |
| `status` | `VARCHAR(20)` | `NOT NULL` | 工单状态 |
| `assigned_to` | `INTEGER` | `REFERENCES users(id)` | 处理人ID |
| `created_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 创建时间 |
| `updated_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 更新时间 |
### 5.15 系统设置表 (system_settings)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 设置ID |
| `key` | `VARCHAR(100)` | `UNIQUE NOT NULL` | 设置键 |
| `value` | `TEXT` | | 设置值 |
| `updated_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 更新时间 |
### 5.16 供应商授权表 (supplier_authorizations)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 授权ID |
| `supplier_id` | `INTEGER` | `NOT NULL` | 供货商ID |
| `type` | `VARCHAR(20)` | `NOT NULL` | 授权类型(category/product) |
| `ref_id` | `INTEGER` | `NOT NULL` | 关联ID |
### 5.17 资讯表 (articles)
| 字段名 | 数据类型 | 约束 | 描述 |
| :--- | :--- | :--- | :--- |
| `id` | `SERIAL` | `PRIMARY KEY` | 资讯ID |
| `title` | `VARCHAR(255)` | `NOT NULL` | 标题 |
| `content` | `TEXT` | `NOT NULL` | 内容 |
| `summary` | `VARCHAR(500)` | | 摘要 |
| `cover_image` | `VARCHAR(500)` | | 封面图URL |
| `is_pinned` | `BOOLEAN` | `DEFAULT FALSE` | 是否置顶 |
| `is_published` | `BOOLEAN` | `DEFAULT TRUE` | 是否发布 |
| `sort_order` | `INTEGER` | `DEFAULT 0` | 排序 |
| `author_id` | `INTEGER` | `REFERENCES users(id)` | 作者ID |
| `created_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 创建时间 |
| `updated_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | 更新时间 |
## 6. API 接口设计
### 6.1 用户相关接口
| API 路径 | 方法 | 模块 | 功能描述 |
| :--- | :--- | :--- | :--- |
| `/api/auth/register` | `POST` | 认证 | 用户注册 |
| `/api/auth/login` | `POST` | 认证 | 用户登录 |
| `/api/auth/forgot-password` | `POST` | 认证 | 忘记密码 |
| `/api/auth/reset-password` | `POST` | 认证 | 重置密码 |
| `/api/auth/verify-email` | `GET` | 认证 | 邮箱验证 |
| `/api/users/profile` | `GET` | 用户 | 获取个人资料 |
| `/api/users/profile` | `PUT` | 用户 | 更新个人资料 |
| `/api/users/password` | `PUT` | 用户 | 修改密码 |
| `/api/users/addresses` | `GET` | 用户 | 获取收货地址列表 |
| `/api/users/addresses` | `POST` | 用户 | 添加收货地址 |
| `/api/users/addresses/:id` | `PUT` | 用户 | 更新收货地址 |
| `/api/users/addresses/:id` | `DELETE` | 用户 | 删除收货地址 |
| `/api/users/addresses/:id/default` | `PUT` | 用户 | 设置默认地址 |
### 6.2 商品相关接口
| API 路径 | 方法 | 模块 | 功能描述 |
| :--- | :--- | :--- | :--- |
| `/api/products` | `GET` | 商品 | 获取商品列表 |
| `/api/products/:id` | `GET` | 商品 | 获取商品详情 |
| `/api/admin/products` | `GET` | 商品 | 获取商品列表(管理员) |
| `/api/admin/products` | `POST` | 商品 | 创建商品 |
| `/api/admin/products/:id` | `PUT` | 商品 | 更新商品 |
| `/api/admin/products/:id` | `DELETE` | 商品 | 删除商品 |
| `/api/admin/products/:id/custom-fields` | `POST` | 商品 | 添加自定义字段 |
| `/api/categories` | `GET` | 分类 | 获取分类列表 |
| `/api/admin/categories` | `POST` | 分类 | 创建分类 |
| `/api/admin/categories/:id` | `PUT` | 分类 | 更新分类 |
| `/api/admin/categories/:id` | `DELETE` | 分类 | 删除分类 |
| `/api/brands` | `GET` | 品牌 | 获取品牌列表 |
| `/api/admin/brands` | `GET` | 品牌 | 获取品牌列表(管理员) |
| `/api/admin/brands` | `POST` | 品牌 | 创建品牌 |
| `/api/admin/brands/:id` | `PUT` | 品牌 | 更新品牌 |
| `/api/admin/brands/:id` | `DELETE` | 品牌 | 删除品牌 |
### 6.3 购物车与订单接口
| API 路径 | 方法 | 模块 | 功能描述 |
| :--- | :--- | :--- | :--- |
| `/api/cart` | `GET` | 购物车 | 获取购物车内容 |
| `/api/cart` | `POST` | 购物车 | 添加商品到购物车 |
| `/api/cart/:id` | `PUT` | 购物车 | 更新购物车商品数量 |
| `/api/cart/:id` | `DELETE` | 购物车 | 删除购物车商品 |
| `/api/orders` | `GET` | 订单 | 获取用户订单列表 |
| `/api/orders/:id` | `GET` | 订单 | 获取订单详情 |
| `/api/orders` | `POST` | 订单 | 创建订单 |
| `/api/supplier/orders` | `GET` | 订单 | 获取供货商订单列表 |
| `/api/supplier/orders/:id/confirm` | `PUT` | 订单 | 确认订单 |
| `/api/supplier/orders/:id/ship` | `PUT` | 订单 | 确认发货 |
| `/api/admin/orders` | `GET` | 订单 | 获取所有订单 |
| `/api/admin/orders/export` | `GET` | 订单 | 导出订单表格 |
### 6.4 库存管理接口
| API 路径 | 方法 | 模块 | 功能描述 |
| :--- | :--- | :--- | :--- |
| `/api/supplier/inventory` | `GET` | 库存 | 获取供货商库存列表 |
| `/api/supplier/inventory/:id` | `PUT` | 库存 | 更新库存数量 |
| `/api/admin/inventory` | `GET` | 库存 | 获取所有库存 |
### 6.5 供货商管理接口
| API 路径 | 方法 | 模块 | 功能描述 |
| :--- | :--- | :--- | :--- |
| `/api/admin/suppliers` | `GET` | 供货商 | 获取供货商列表 |
| `/api/admin/suppliers` | `POST` | 供货商 | 添加供货商 |
| `/api/admin/suppliers/:id` | `PUT` | 供货商 | 更新供货商信息 |
| `/api/admin/suppliers/:id` | `DELETE` | 供货商 | 删除供货商 |
| `/api/admin/suppliers/:id/authorize` | `POST` | 供货商 | 授权商品/分类 |
### 6.6 抽奖系统接口
| API 路径 | 方法 | 模块 | 功能描述 |
| :--- | :--- | :--- | :--- |
| `/api/lotteries` | `GET` | 抽奖 | 获取抽奖列表 |
| `/api/lotteries/:id` | `GET` | 抽奖 | 获取抽奖详情 |
| `/api/lotteries/:id/register` | `POST` | 抽奖 | 报名抽奖 |
| `/api/admin/lotteries` | `POST` | 抽奖 | 创建抽奖 |
| `/api/admin/lotteries/:id` | `PUT` | 抽奖 | 更新抽奖 |
| `/api/admin/lotteries/:id` | `DELETE` | 抽奖 | 删除抽奖 |
| `/api/admin/lotteries/:id/prizes` | `POST` | 抽奖 | 添加奖品 |
| `/api/admin/lotteries/:id/draw` | `POST` | 抽奖 | 执行抽奖 |
### 6.7 工单系统接口
| API 路径 | 方法 | 模块 | 功能描述 |
| :--- | :--- | :--- | :--- |
| `/api/tickets` | `GET` | 工单 | 获取用户工单列表 |
| `/api/tickets` | `POST` | 工单 | 提交工单 |
| `/api/tickets/:id` | `GET` | 工单 | 获取工单详情 |
| `/api/admin/tickets` | `GET` | 工单 | 获取所有工单 |
| `/api/admin/tickets/:id` | `PUT` | 工单 | 更新工单状态 |
| `/api/admin/tickets/:id/assign` | `PUT` | 工单 | 分配工单 |
### 6.8 系统设置接口
| API 路径 | 方法 | 模块 | 功能描述 |
| :--- | :--- | :--- | :--- |
| `/api/settings/public` | `GET` | 设置 | 获取公共设置(费用费率等) |
| `/api/admin/stats` | `GET` | 统计 | 获取仪表盘统计数据 |
| `/api/admin/settings` | `GET` | 设置 | 获取系统设置 |
| `/api/admin/settings` | `PUT` | 设置 | 更新系统设置 |
| `/api/admin/settings/smtp` | `PUT` | 设置 | 更新SMTP设置 |
| `/api/admin/settings/payment` | `PUT` | 设置 | 更新支付通道设置 |
### 6.9 资讯模块接口
| API 路径 | 方法 | 模块 | 功能描述 |
| :--- | :--- | :--- | :--- |
| `/api/articles` | `GET` | 资讯 | 获取已发布资讯列表 |
| `/api/articles/:id` | `GET` | 资讯 | 获取资讯详情 |
| `/api/admin/articles` | `GET` | 资讯 | 获取所有资讯(含草稿) |
| `/api/admin/articles` | `POST` | 资讯 | 创建资讯 |
| `/api/admin/articles/:id` | `PUT` | 资讯 | 更新资讯 |
| `/api/admin/articles/:id` | `DELETE` | 资讯 | 删除资讯 |
| `/api/admin/articles/:id/pin` | `PUT` | 资讯 | 切换置顶状态 |
## 7. 前端设计
### 7.1 设计风格
#### 方案一:现代化科技感(推荐)
- **风格特点**:采用简洁、现代的设计风格,类似于科技企业网站
- **配色方案**:以蓝色为主色调,搭配白色和浅灰色,营造专业、科技的氛围
- **字体**:使用无衬线字体,如 Roboto、Inter 等
- **布局**:响应式设计,适配不同设备屏幕
- **动画效果**:适度的过渡动画,提升用户体验
- **特色**:简洁明了的界面,突出商品信息,操作流程顺畅
#### 方案二:简约商务风
- **风格特点**:简约、专业的商务风格,注重信息的清晰展示
- **配色方案**:以灰色为主色调,搭配深蓝和白色,营造稳重、专业的氛围
- **字体**:使用无衬线字体,如 Helvetica、Arial 等
- **布局**:网格布局,信息层次分明
- **动画效果**:轻微的过渡效果,保持界面稳定感
- **特色**:信息密度高,适合商务用户,操作流程清晰
#### 方案三:时尚活力风
- **风格特点**:时尚、活力的设计风格,吸引年轻用户群体
- **配色方案**:以橙色和白色为主色调,搭配浅蓝和浅灰,营造活力、时尚的氛围
- **字体**:使用现代无衬线字体,如 Poppins、Montserrat 等
- **布局**:卡片式布局,视觉层次丰富
- **动画效果**:活泼的微动画,增强用户互动
- **特色**:视觉冲击力强,适合时尚商品,用户体验愉悦
#### 方案四:豆包飞书风(暗色毛玻璃)
- **风格特点**:暗色主题、毛玻璃效果、大字排版,类似豆包/飞书演示风格
- **配色方案**:以深蓝紫渐变为主色调(#1a1a2e#16213e#0f3460),搭配半透明白色毛玻璃卡片,强调色为亮紫/亮蓝
- **字体**:使用现代无衬线字体,如 Inter、SF Pro Display 等,标题大号加粗
- **布局**:全屏渐变背景 + 毛玻璃卡片悬浮布局,Hero区域大字标题居中
- **动画效果**:渐变背景微动、卡片悬浮阴影变化、淡入淡出过渡
- **特色**
- 深色渐变背景营造沉浸感
- 毛玻璃(backdrop-filter: blur)卡片效果
- 大字标题 + 简洁描述的Hero布局
- 圆角卡片 + 微光边框
- 适合高端产品展示,科技感与品质感并存
### 7.2 页面结构
#### 7.2.1 用户前端
- **首页**:商品展示、分类导航、抽奖活动
- **商品列表页**:筛选、排序、分页
- **商品详情页**:商品信息、自定义字段、购买选项
- **购物车页**:商品列表、数量调整、结算
- **订单确认页**:收货地址选择、支付方式选择
- **个人中心**:订单管理、收货地址、账户设置、购买资格
- **抽奖页面**:抽奖活动列表、报名入口
- **工单页面**:工单提交、工单列表
- **资讯页面**:资讯列表、资讯详情
#### 7.2.2 管理员后台
- **仪表盘**:系统概览、统计数据(用户数、商品数、订单数、营收)
- **用户管理**:用户列表、权限管理
- **商品管理**:商品列表、分类管理、品牌管理、库存管理
- **订单管理**:订单列表、订单详情、导出功能、退款管理
- **供货商管理**:供货商列表、授权管理
- **抽奖管理**:抽奖活动创建、奖品管理、抽奖执行
- **工单管理**:工单列表、工单处理
- **系统设置**:SMTP设置、支付通道设置、运费设置、服务费设置、税费设置、通道费率设置
- **资讯管理**:资讯发布、编辑、删除、置顶
#### 7.2.3 供货商后台
- **仪表盘**:订单统计、库存概览
- **订单管理**:订单列表、订单确认、发货管理
- **库存管理**:库存列表、库存更新
- **商品管理**:授权商品列表
### 7.3 多语言支持
- 使用 Vue i18n 实现多语言切换
- 支持中文、日语、英语三种语言
- 语言文件采用 JSON 格式存储
- 实现语言切换功能,保存用户语言偏好
## 8. 安全考虑
### 8.1 前端安全
- 使用 HTTPS 协议
- 实现 CSRF 保护
- 输入验证和 sanitization
- 密码强度检查
- 防止 XSS 攻击
### 8.2 后端安全
- 密码哈希存储
- JWT 认证机制
- 权限控制
- 防止 SQL 注入
- 速率限制
- 日志记录
### 8.3 数据安全
- 数据库加密
- 敏感数据保护
- 定期数据备份
## 9. 部署方案
### 9.1 开发环境
- **前端**Vite 开发服务器
- **后端**Go 本地开发服务器
- **数据库**PostgreSQL 本地实例
- **缓存**Redis 本地实例
### 9.2 生产环境
- **前端**Nginx 静态文件服务
- **后端**Go 应用服务器
- **数据库**PostgreSQL 数据库集群
- **缓存**Redis 集群
- **负载均衡**:Nginx 或云服务负载均衡
- **容器化**Docker + Kubernetes
## 10. 项目结构
### 10.1 前端项目结构
```
frontend/
├── public/ # 静态资源
├── src/
│ ├── assets/ # 图片、样式等
│ ├── components/ # 通用组件
│ ├── views/ # 页面组件
│ │ ├── user/ # 用户前端页面
│ │ ├── admin/ # 管理员后台页面
│ │ └── supplier/ # 供货商后台页面
│ ├── router/ # 路由配置
│ ├── store/ # Pinia 状态管理
│ ├── i18n/ # 国际化文件
│ ├── api/ # API 调用
│ ├── utils/ # 工具函数
│ ├── App.vue # 根组件
│ └── main.ts # 入口文件
├── .env # 环境变量
├── vite.config.ts # Vite 配置
└── package.json # 依赖管理
```
### 10.2 后端项目结构
```
backend/
├── cmd/
│ └── server/ # 应用入口
├── internal/
│ ├── api/ # API 处理
│ │ ├── handlers/ # 请求处理器
│ │ ├── middlewares/ # 中间件
│ │ └── routes/ # 路由配置
│ ├── services/ # 业务逻辑
│ ├── models/ # 数据模型
│ ├── schemas/ # 数据校验
│ ├── utils/ # 工具函数
│ └── config/ # 配置管理
├── migrations/ # 数据库迁移
├── go.mod # Go 模块文件
└── .env # 环境变量
```
## 11. 开发计划
### 11.1 阶段一:基础架构搭建
- 前端项目初始化
- 后端项目初始化
- 数据库设计与迁移
- 基础 API 实现
### 11.2 阶段二:核心功能实现
- 用户认证系统
- 商品管理系统
- 购物车与订单系统
- 库存管理系统
### 11.3 阶段三:特色功能实现
- 购买资格系统
- 抽奖系统
- 工单系统
- 多语言支持
### 11.4 阶段四:后台管理
- 管理员后台
- 供货商后台
- 系统设置
### 11.5 阶段五:测试与部署
- 功能测试
- 性能测试
- 安全测试
- 生产环境部署
## 12. 技术挑战与解决方案
### 12.1 多语言支持
- **挑战**:确保所有界面元素和数据都能正确翻译
- **解决方案**:使用 Vue i18n 管理翻译文件,实现语言切换功能
### 12.2 购买资格系统
- **挑战**:实现复杂的购买资格逻辑
- **解决方案**:设计专门的资格管理模块,记录和验证用户购买资格
### 12.3 抽奖系统
- **挑战**:实现公平、透明的抽奖机制
- **解决方案**:使用随机数生成器,结合购买权重计算中奖概率
### 12.4 订单处理流程
- **挑战**:协调用户、供货商和管理员的订单处理流程
- **解决方案**:设计清晰的订单状态流转,实现自动化通知
### 12.5 性能优化
- **挑战**:确保系统在高并发情况下的性能
- **解决方案**:使用 Redis 缓存热点数据,优化数据库查询
## 13. 总结
本技术文档详细描述了商品售卖网站的设计与实现方案,包括系统架构、功能模块、数据库设计、API 接口、前端设计等方面。通过采用现代化的技术栈和合理的架构设计,系统能够满足用户的各种需求,提供良好的用户体验。
项目将按照开发计划分阶段实施,确保系统的质量和稳定性。同时,系统设计考虑了未来的扩展性,为后续功能的添加和优化预留了空间。