752 lines
34 KiB
Markdown
752 lines
34 KiB
Markdown
# 商品售卖网站技术文档
|
||
|
||
## 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 接口、前端设计等方面。通过采用现代化的技术栈和合理的架构设计,系统能够满足用户的各种需求,提供良好的用户体验。
|
||
|
||
项目将按照开发计划分阶段实施,确保系统的质量和稳定性。同时,系统设计考虑了未来的扩展性,为后续功能的添加和优化预留了空间。 |