689 lines
13 KiB
Markdown
689 lines
13 KiB
Markdown
# 创高家具官网 - 后端API接口设计
|
||
|
||
## 一、接口规范
|
||
|
||
### 1.1 基础规范
|
||
|
||
| 项目 | 规范 |
|
||
|------|------|
|
||
| 接口前缀 | `/api` |
|
||
| 版本 | v1(URL中体现) |
|
||
| 认证方式 | Sa-Token(Header: `Authorization: Bearer {token}`) |
|
||
| 响应格式 | JSON统一包装 |
|
||
|
||
### 1.2 响应结构
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "success",
|
||
"data": {},
|
||
"timestamp": 1715164800000
|
||
}
|
||
```
|
||
|
||
### 1.3 分页参数
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| page | int | 页码,默认1 |
|
||
| size | int | 每页条数,默认10,最大50 |
|
||
| sort | string | 排序字段 |
|
||
| order | string | 排序方向:asc/desc |
|
||
|
||
### 1.4 多语言支持
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| lang | string | 语言:zh-CN / en-US,默认从Accept-Language或配置读取 |
|
||
|
||
---
|
||
|
||
## 二、前台接口(Portal)
|
||
|
||
### 2.1 公司信息
|
||
|
||
#### 获取公司配置
|
||
```
|
||
GET /api/portal/company/info
|
||
```
|
||
|
||
**响应**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"data": {
|
||
"brandName": "创高家具",
|
||
"brandNameEn": "ChuangGao Furniture",
|
||
"slogan": "匠心定制,品质生活",
|
||
"sloganEn": "Crafted for Quality Living",
|
||
"contactPhone": "400-xxx-xxxx",
|
||
"contactEmail": "contact@chuanggao.com",
|
||
"address": "广东省佛山市...",
|
||
"addressEn": "Foshan, Guangdong, China",
|
||
"wechatQr": "https://minio.../uploads/wechat-qr.jpg",
|
||
"socialLinks": {
|
||
"weibo": "...",
|
||
"douyin": "..."
|
||
},
|
||
"icpRecord": "粤ICP备xxxxxxxx号",
|
||
"copyright": "© 2024 创高家具 版权所有",
|
||
"seo": {
|
||
"title": "...",
|
||
"keywords": "...",
|
||
"description": "..."
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 2.2 首页数据
|
||
|
||
#### 获取首页完整数据
|
||
```
|
||
GET /api/portal/home/data
|
||
```
|
||
|
||
**响应**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"data": {
|
||
"banners": [...], // 轮播图列表
|
||
"pageBlocks": {...}, // 页面区块配置
|
||
"hotProducts": [...], // 热门产品(8个)
|
||
"recommendCases": [...], // 推荐案例(6个)
|
||
"brandStrength": {...} // 品牌实力数据
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 获取轮播图
|
||
```
|
||
GET /api/portal/carousel/list
|
||
```
|
||
|
||
**参数**
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| position | string | 是 | 位置:home_banner, about_banner等 |
|
||
|
||
---
|
||
|
||
### 2.3 产品模块
|
||
|
||
#### 获取产品分类树
|
||
```
|
||
GET /api/portal/product/category/tree
|
||
```
|
||
|
||
**响应**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"data": [
|
||
{
|
||
"id": 1,
|
||
"name": "全屋定制",
|
||
"nameEn": "Whole House Custom",
|
||
"code": "custom",
|
||
"icon": "...",
|
||
"image": "...",
|
||
"children": [...]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
#### 获取产品列表
|
||
```
|
||
GET /api/portal/product/list
|
||
```
|
||
|
||
**参数**
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| categoryId | long | 否 | 分类ID |
|
||
| isHot | boolean | 否 | 是否热门 |
|
||
| isNew | boolean | 否 | 是否新品 |
|
||
| isRecommend | boolean | 否 | 是否推荐 |
|
||
| keyword | string | 否 | 关键词搜索 |
|
||
| page | int | 否 | 默认1 |
|
||
| size | int | 否 | 默认12 |
|
||
|
||
**响应**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"data": {
|
||
"total": 100,
|
||
"pages": 10,
|
||
"current": 1,
|
||
"records": [
|
||
{
|
||
"id": 1,
|
||
"name": "意式极简真皮沙发",
|
||
"nameEn": "Italian Minimalist Leather Sofa",
|
||
"mainImage": "...",
|
||
"summary": "进口头层牛皮...",
|
||
"summaryEn": "...",
|
||
"priceMin": 15800,
|
||
"priceMax": 25800,
|
||
"isShowPrice": false,
|
||
"params": [{"name": "材质", "value": "真皮"}],
|
||
"sceneTags": ["客厅", "大户型"]
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 获取产品详情
|
||
```
|
||
GET /api/portal/product/detail/{id}
|
||
```
|
||
|
||
---
|
||
|
||
### 2.4 案例模块
|
||
|
||
#### 获取案例分类
|
||
```
|
||
GET /api/portal/case/category/list
|
||
```
|
||
|
||
#### 获取案例列表
|
||
```
|
||
GET /api/portal/case/list
|
||
```
|
||
|
||
**参数**
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| categoryId | long | 否 | 分类ID |
|
||
| isRecommend | boolean | 否 | 是否推荐 |
|
||
| page | int | 否 | 默认1 |
|
||
| size | int | 否 | 默认9 |
|
||
|
||
#### 获取案例详情
|
||
```
|
||
GET /api/portal/case/detail/{id}
|
||
```
|
||
|
||
**响应包含**
|
||
- 案例基本信息
|
||
- 图片轮播数组
|
||
- 项目信息(面积、地点、时间)
|
||
- 关联产品列表
|
||
- 上一篇/下一篇导航
|
||
|
||
---
|
||
|
||
### 2.5 新闻模块
|
||
|
||
#### 获取新闻分类
|
||
```
|
||
GET /api/portal/news/category/list
|
||
```
|
||
|
||
#### 获取新闻列表
|
||
```
|
||
GET /api/portal/news/list
|
||
```
|
||
|
||
**参数**
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| categoryId | long | 否 | 分类ID |
|
||
| isTop | boolean | 否 | 是否置顶 |
|
||
| page | int | 否 | 默认1 |
|
||
| size | int | 否 | 默认10 |
|
||
|
||
#### 获取新闻详情
|
||
```
|
||
GET /api/portal/news/detail/{id}
|
||
```
|
||
|
||
---
|
||
|
||
### 2.6 关于创高
|
||
|
||
#### 获取页面区块内容
|
||
```
|
||
GET /api/portal/page/blocks
|
||
```
|
||
|
||
**参数**
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| pageCode | string | 是 | 页面代码: about, join等 |
|
||
|
||
#### 获取荣誉资质列表
|
||
```
|
||
GET /api/portal/honor/list
|
||
```
|
||
|
||
**参数**
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| type | string | 否 | 类型:certificate/award/patent/partner |
|
||
|
||
---
|
||
|
||
### 2.7 招商加盟/联系我们
|
||
|
||
#### 获取加盟政策
|
||
```
|
||
GET /api/portal/franchise/policies
|
||
```
|
||
|
||
#### 提交留言表单
|
||
```
|
||
POST /api/portal/contact/submit
|
||
```
|
||
|
||
**请求体**
|
||
```json
|
||
{
|
||
"type": "join", // join/cooperate/feedback/other
|
||
"name": "张三",
|
||
"phone": "13800138000",
|
||
"email": "zhangsan@example.com",
|
||
"company": "某某公司",
|
||
"address": "广东省深圳市",
|
||
"subject": "加盟咨询",
|
||
"message": "想了解加盟政策..."
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 三、管理后台接口(Admin)
|
||
|
||
### 3.1 认证模块
|
||
|
||
#### 管理员登录
|
||
```
|
||
POST /api/admin/auth/login
|
||
```
|
||
|
||
**请求体**
|
||
```json
|
||
{
|
||
"username": "admin",
|
||
"password": "admin123",
|
||
"captcha": "abc123"
|
||
}
|
||
```
|
||
|
||
#### 登出
|
||
```
|
||
POST /api/admin/auth/logout
|
||
```
|
||
|
||
#### 获取当前用户信息
|
||
```
|
||
GET /api/admin/auth/info
|
||
```
|
||
|
||
---
|
||
|
||
### 3.2 公司信息管理
|
||
|
||
#### 更新公司信息
|
||
```
|
||
PUT /api/admin/company/update
|
||
```
|
||
|
||
**请求体**(对应 f_company 表字段)
|
||
|
||
#### 获取公司信息
|
||
```
|
||
GET /api/admin/company/info
|
||
```
|
||
|
||
---
|
||
|
||
### 3.3 轮播图管理
|
||
|
||
#### 轮播图列表
|
||
```
|
||
GET /api/admin/carousel/list
|
||
```
|
||
|
||
#### 创建轮播图
|
||
```
|
||
POST /api/admin/carousel/create
|
||
```
|
||
|
||
#### 更新轮播图
|
||
```
|
||
PUT /api/admin/carousel/update/{id}
|
||
```
|
||
|
||
#### 删除轮播图
|
||
```
|
||
DELETE /api/admin/carousel/delete/{id}
|
||
```
|
||
|
||
#### 批量更新排序
|
||
```
|
||
PUT /api/admin/carousel/sort
|
||
```
|
||
|
||
---
|
||
|
||
### 3.4 产品管理
|
||
|
||
#### 产品分类管理
|
||
```
|
||
GET /api/admin/product/category/list
|
||
POST /api/admin/product/category/create
|
||
PUT /api/admin/product/category/update/{id}
|
||
DELETE /api/admin/product/category/delete/{id}
|
||
```
|
||
|
||
#### 产品管理
|
||
```
|
||
GET /api/admin/product/list // 支持分页、分类筛选、关键词搜索
|
||
POST /api/admin/product/create
|
||
PUT /api/admin/product/update/{id}
|
||
DELETE /api/admin/product/delete/{id}
|
||
PUT /api/admin/product/status/{id} // 上下架
|
||
PUT /api/admin/product/sort // 批量排序
|
||
```
|
||
|
||
---
|
||
|
||
### 3.5 案例管理
|
||
|
||
```
|
||
GET /api/admin/case/category/list
|
||
POST /api/admin/case/category/create
|
||
PUT /api/admin/case/category/update/{id}
|
||
DELETE /api/admin/case/category/delete/{id}
|
||
|
||
GET /api/admin/case/list
|
||
POST /api/admin/case/create
|
||
PUT /api/admin/case/update/{id}
|
||
DELETE /api/admin/case/delete/{id}
|
||
```
|
||
|
||
---
|
||
|
||
### 3.6 新闻管理
|
||
|
||
```
|
||
GET /api/admin/news/category/list
|
||
POST /api/admin/news/category/create
|
||
PUT /api/admin/news/category/update/{id}
|
||
DELETE /api/admin/news/category/delete/{id}
|
||
|
||
GET /api/admin/news/list
|
||
POST /api/admin/news/create
|
||
PUT /api/admin/news/update/{id}
|
||
DELETE /api/admin/news/delete/{id}
|
||
PUT /api/admin/news/publish/{id} // 发布/下线
|
||
PUT /api/admin/news/top/{id} // 置顶/取消置顶
|
||
```
|
||
|
||
---
|
||
|
||
### 3.7 页面区块管理(核心功能)
|
||
|
||
#### 获取页面所有区块
|
||
```
|
||
GET /api/admin/page/blocks
|
||
```
|
||
|
||
**参数**: pageCode (home/about/products/cases/contact)
|
||
|
||
#### 更新区块内容
|
||
```
|
||
PUT /api/admin/page/block/update/{id}
|
||
```
|
||
|
||
**请求体**
|
||
```json
|
||
{
|
||
"contentZh": "中文内容",
|
||
"contentEn": "English Content",
|
||
"image": "https://minio.../image.jpg",
|
||
"imagesJson": ["url1", "url2"],
|
||
"linkUrl": "/products",
|
||
"linkTextZh": "查看产品",
|
||
"linkTextEn": "View Products",
|
||
"isShow": true
|
||
}
|
||
```
|
||
|
||
#### 批量更新区块
|
||
```
|
||
PUT /api/admin/page/blocks/batch-update
|
||
```
|
||
|
||
---
|
||
|
||
### 3.8 文件上传/媒体库(MinIO)
|
||
|
||
#### 单文件上传
|
||
```
|
||
POST /api/admin/upload/single
|
||
```
|
||
|
||
**Content-Type**: multipart/form-data
|
||
|
||
**参数**
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| file | File | 上传的文件 |
|
||
| usedIn | string | 使用位置:carousel/product/case/news/page |
|
||
|
||
**响应**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"data": {
|
||
"id": 1,
|
||
"fileName": "banner-01.jpg",
|
||
"fileSize": 1024000,
|
||
"filePath": "/uploads/carousel/banner-01.jpg",
|
||
"fullUrl": "http://minio:9000/chuanggao-images/uploads/carousel/banner-01.jpg",
|
||
"width": 1920,
|
||
"height": 600,
|
||
"thumbUrl": "..."
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 多文件上传
|
||
```
|
||
POST /api/admin/upload/multiple
|
||
```
|
||
|
||
#### 获取媒体库列表
|
||
```
|
||
GET /api/admin/media/list
|
||
```
|
||
|
||
**参数**
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| fileType | string | image/video/document |
|
||
| usedIn | string | 使用位置筛选 |
|
||
| page | int | 页码 |
|
||
| size | int | 每页条数 |
|
||
|
||
#### 删除媒体文件
|
||
```
|
||
DELETE /api/admin/media/delete/{id}
|
||
```
|
||
|
||
#### 获取图片直链
|
||
```
|
||
GET /api/admin/media/url/{id}
|
||
```
|
||
|
||
**响应**: 返回可直接访问的URL(已考虑MinIO公开读配置)
|
||
|
||
---
|
||
|
||
### 3.9 荣誉资质管理
|
||
|
||
```
|
||
GET /api/admin/honor/list
|
||
POST /api/admin/honor/create
|
||
PUT /api/admin/honor/update/{id}
|
||
DELETE /api/admin/honor/delete/{id}
|
||
```
|
||
|
||
---
|
||
|
||
### 3.10 加盟政策管理
|
||
|
||
```
|
||
GET /api/admin/franchise/policy/list
|
||
POST /api/admin/franchise/policy/create
|
||
PUT /api/admin/franchise/policy/update/{id}
|
||
DELETE /api/admin/franchise/policy/delete/{id}
|
||
```
|
||
|
||
---
|
||
|
||
### 3.11 留言管理
|
||
|
||
#### 留言列表
|
||
```
|
||
GET /api/admin/message/list
|
||
```
|
||
|
||
**参数**
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| type | string | 留言类型筛选 |
|
||
| status | int | 处理状态筛选 |
|
||
| startDate | date | 开始日期 |
|
||
| endDate | date | 结束日期 |
|
||
|
||
#### 留言详情
|
||
```
|
||
GET /api/admin/message/detail/{id}
|
||
```
|
||
|
||
#### 回复留言
|
||
```
|
||
PUT /api/admin/message/reply/{id}
|
||
```
|
||
|
||
**请求体**
|
||
```json
|
||
{
|
||
"replyContent": "感谢您的咨询,我们会尽快联系您...",
|
||
"status": 2 // 已回复
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 3.12 管理员账号管理
|
||
|
||
```
|
||
GET /api/admin/user/list
|
||
POST /api/admin/user/create
|
||
PUT /api/admin/user/update/{id}
|
||
DELETE /api/admin/user/delete/{id}
|
||
PUT /api/admin/user/status/{id} // 启用/禁用
|
||
PUT /api/admin/user/reset-password/{id}
|
||
```
|
||
|
||
---
|
||
|
||
## 四、接口安全
|
||
|
||
### 4.1 前台接口
|
||
- 无需登录,公开访问
|
||
- 限流:单个IP 100次/分钟
|
||
|
||
### 4.2 管理后台接口
|
||
- 需登录,Sa-Token 验证
|
||
- 权限检查:根据 role 字段判断
|
||
- 限流:单个用户 30次/分钟
|
||
|
||
### 4.3 文件上传
|
||
- 文件类型白名单:jpg, jpeg, png, gif, webp, mp4, pdf
|
||
- 单文件大小限制:图片10MB,视频100MB
|
||
- 图片自动压缩:超过1920px自动压缩,生成缩略图
|
||
|
||
---
|
||
|
||
## 五、MinIO 存储结构
|
||
|
||
```
|
||
chuanggao-images (bucket)
|
||
├── uploads/
|
||
│ ├── carousel/ # 轮播图
|
||
│ │ ├── home-01.jpg
|
||
│ │ └── about-01.jpg
|
||
│ ├── products/ # 产品图片
|
||
│ │ ├── 2024/
|
||
│ │ └── thumbs/ # 缩略图
|
||
│ ├── cases/ # 案例图片
|
||
│ ├── news/ # 新闻封面
|
||
│ ├── pages/ # 页面区块图片
|
||
│ ├── company/ # 公司相关(logo、二维码)
|
||
│ └── honor/ # 荣誉证书
|
||
└── temp/ # 临时文件(定期清理)
|
||
```
|
||
|
||
---
|
||
|
||
## 六、Controller 层设计示例
|
||
|
||
```java
|
||
// PortalCompanyController.java - 前台公司信息
|
||
@RestController
|
||
@RequestMapping("/api/portal/company")
|
||
public class PortalCompanyController {
|
||
|
||
@GetMapping("/info")
|
||
public Result<CompanyVO> getCompanyInfo(@RequestParam(defaultValue = "zh-CN") String lang) {
|
||
// 根据lang返回对应语言内容
|
||
}
|
||
}
|
||
|
||
// AdminCompanyController.java - 后台公司管理
|
||
@RestController
|
||
@RequestMapping("/api/admin/company")
|
||
@SaCheckLogin
|
||
public class AdminCompanyController {
|
||
|
||
@GetMapping("/info")
|
||
public Result<CompanyVO> getInfo() {
|
||
return Result.success(companyService.getInfo());
|
||
}
|
||
|
||
@PutMapping("/update")
|
||
@SaCheckRole("admin")
|
||
public Result<Void> update(@RequestBody @Valid CompanyDTO dto) {
|
||
companyService.update(dto);
|
||
return Result.success();
|
||
}
|
||
}
|
||
|
||
// AdminUploadController.java - 文件上传
|
||
@RestController
|
||
@RequestMapping("/api/admin/upload")
|
||
@SaCheckLogin
|
||
public class AdminUploadController {
|
||
|
||
@PostMapping("/single")
|
||
public Result<MediaVO> uploadSingle(
|
||
@RequestParam("file") MultipartFile file,
|
||
@RequestParam(defaultValue = "other") String usedIn) {
|
||
return Result.success(uploadService.upload(file, usedIn));
|
||
}
|
||
}
|
||
```
|