12 KiB
12 KiB
API 接口文档
1. 接口规范
1.1 基础信息
| 项 | 值 |
|---|---|
| 基础 URL | ''(相对路径,通过 Vite 代理转发) |
| 后端地址 | http://localhost:10003 |
| 协议 | HTTP/HTTPS |
| 数据格式 | JSON |
| 字符编码 | UTF-8 |
注意: 前端开发环境使用相对路径调用 API,Vite 代理将 /api、/uploads、/storage 转发到后端服务。生产环境通过 Nginx 统一代理。
1.2 响应格式
{
"code": 200,
"message": "success",
"data": {}
}
1.3 错误码
| 码 | 说明 |
|---|---|
| 200 | 成功 |
| 400 | 请求参数错误 |
| 401 | 未认证/Token过期 |
| 403 | 无权限 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
1.4 认证方式
管理员接口需要在请求头携带 Token:
Authorization: Bearer <jwt_token>
2. 认证接口
2.1 管理员登录
POST /api/auth/login
请求体:
{
"username": "admin",
"password": "admin123"
}
响应:
{
"code": 200,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"admin": {
"id": 1,
"username": "admin"
}
}
}
2.2 获取当前管理员信息
GET /api/auth/me
Authorization: Bearer <token>
响应:
{
"code": 200,
"data": {
"id": 1,
"username": "admin"
}
}
2.3 修改密码
POST /api/auth/change-password
Authorization: Bearer <token>
请求体:
{
"old_password": "oldpass",
"new_password": "newpass"
}
3. 前台接口(无需认证)
3.1 获取首页模块
GET /api/home/modules
响应:
{
"code": 200,
"data": [
{
"id": 1,
"name": "轮播图",
"code": "banner",
"type": "banner",
"title": "",
"subtitle": "",
"content": {
"slides": [
{
"image": "/uploads/banner1.jpg",
"link": "/product",
"title": "手机就能做尿检"
}
]
},
"style_config": {
"backgroundColor": "#ffffff",
"paddingTop": "0",
"paddingBottom": "0"
}
}
]
}
3.2 获取导航菜单
GET /api/nav
响应:
{
"code": 200,
"data": [
{
"id": 1,
"name": "首页",
"link": "/",
"is_external": false,
"children": []
}
]
}
3.3 获取系统设置
GET /api/settings
响应:
{
"code": 200,
"data": {
"site_name": "飞点健康",
"site_logo": "/logo.png",
"company_phone": "400-xxx-xxxx",
"icp": "粤ICP备xxxxxxxx号"
}
}
4. 后台管理接口(需要认证)
4.1 首页模块管理
获取所有模块(后台)
GET /api/admin/home/modules
Authorization: Bearer <token>
响应: 包含未启用的模块
获取单个模块详情
GET /api/admin/home/modules/:id
Authorization: Bearer <token>
更新模块
PUT /api/admin/home/modules/:id
Authorization: Bearer <token>
Content-Type: application/json
请求体:
{
"title": "新的标题",
"subtitle": "副标题",
"content": {
"slides": [
{"image": "/uploads/banner.jpg", "link": "/", "title": "标题"}
]
},
"style_config": {
"backgroundColor": "#FEF9E7",
"paddingTop": "60px"
},
"is_enabled": true
}
更新模块排序
PUT /api/admin/home/modules/sort
Authorization: Bearer <token>
Content-Type: application/json
请求体:
{
"orders": [
{"id": 1, "sort_order": 1},
{"id": 2, "sort_order": 2},
{"id": 3, "sort_order": 3}
]
}
切换模块启用状态
PUT /api/admin/home/modules/:id/toggle
Authorization: Bearer <token>
响应:
{
"code": 200,
"data": {
"id": 1,
"is_enabled": false
}
}
4.2 导航菜单管理
获取菜单列表
GET /api/admin/nav
Authorization: Bearer <token>
创建菜单
POST /api/admin/nav
Authorization: Bearer <token>
Content-Type: application/json
请求体:
{
"name": "新菜单",
"link": "/new-page",
"sort_order": 6,
"is_enabled": true,
"is_external": false
}
更新菜单
PUT /api/admin/nav/:id
Authorization: Bearer <token>
Content-Type: application/json
删除菜单
DELETE /api/admin/nav/:id
Authorization: Bearer <token>
4.3 系统设置管理
获取所有设置
GET /api/admin/settings
Authorization: Bearer <token>
更新设置
PUT /api/admin/settings
Authorization: Bearer <token>
Content-Type: application/json
请求体:
{
"site_name": "新名称",
"company_phone": "新电话"
}
4.4 图片资源管理
获取图片列表
GET /api/images?page=1&size=20&module=news
Authorization: Bearer <token>
查询参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| page | int | 页码,默认 1 |
| size | int | 每页数量,默认 20,最大 100 |
| module | string | 按模块筛选(可选:news/product/page) |
响应:
{
"items": [
{
"id": 1,
"filename": "20260421_182026_df70a127.jpg",
"original_name": "photo.jpg",
"file_path": "/storage/admin/images/20260421_182026_df70a127.jpg",
"thumb_path": "/storage/admin/images/thumbnails/20260421_182026_df70a127.jpg",
"description": null,
"file_size": 547343,
"width": 1920,
"height": 1080,
"module": "news",
"created_at": "2026-04-21T18:20:26"
}
],
"total": 100,
"page": 1,
"size": 20
}
上传图片
POST /api/images/upload
Authorization: Bearer <token>
Content-Type: multipart/form-data
表单字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| file | File | 图片文件(jpg, jpeg, png, gif, webp, bmp,最大 10MB) |
| description | string | 图片描述(可选) |
| module | string | 所属模块,默认 news |
响应:
{
"success": true,
"data": {
"id": 1,
"filename": "20260421_182026_df70a127.jpg",
"original_name": "photo.jpg",
"file_path": "/storage/admin/images/20260421_182026_df70a127.jpg",
"thumb_path": "/storage/admin/images/thumbnails/20260421_182026_df70a127.jpg",
"file_size": 547343,
"width": 1920,
"height": 1080,
"module": "news",
"created_at": "2026-04-21T18:20:26"
}
}
缩略图规则:
- 上传成功后自动创建缩略图
- 缩略图尺寸:最大 300x300 像素,等比缩放
- 缩略图格式:统一为 JPEG,质量 85%
- 缩略图命名:与原图同名,扩展名统一为
.jpg - 缩略图路径:
/storage/admin/images/thumbnails/
更新图片描述
PUT /api/images/{image_id}
Authorization: Bearer <token>
Content-Type: multipart/form-data
表单字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| description | string | 新的图片描述 |
删除图片
DELETE /api/images/{image_id}
Authorization: Bearer <token>
删除规则:
- 删除数据库记录
- 同步删除物理文件(原图 + 缩略图)
- 外部 URL 跳过删除(仅删除数据库记录)
批量删除图片
POST /api/images/batch-delete
Authorization: Bearer <token>
Content-Type: application/json
请求体:
[1, 2, 3]
获取图片插入信息
GET /api/images/{image_id}/insert?size=original
Authorization: Bearer <token>
查询参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| size | string | original 或 thumb,默认 original |
响应:
{
"id": 1,
"url": "/storage/admin/images/xxx.jpg",
"width": 1920,
"height": 1080,
"original_name": "photo.jpg"
}
4.5 新闻资讯管理
栏目管理
GET /api/news/categories # 获取栏目列表
POST /api/news/categories # 创建栏目
GET /api/news/categories/{id} # 获取栏目详情
PUT /api/news/categories/{id} # 更新栏目
DELETE /api/news/categories/{id} # 删除栏目
创建栏目请求体:
{
"name": "公司新闻",
"slug": "company-news",
"description": "公司动态和新闻",
"sort_order": 1,
"is_enabled": true
}
资讯管理
GET /api/news/posts?page=1&size=10&category_id=1&keyword=xxx&status=all # 获取资讯列表
POST /api/news/posts # 创建资讯
GET /api/news/posts/{post_id} # 获取资讯详情
PUT /api/news/posts/{post_id} # 更新资讯
DELETE /api/news/posts/{post_id} # 删除资讯
POST /api/news/posts/{post_id}/publish # 发布/取消发布
创建资讯请求体:
{
"title": "文章标题",
"slug": "article-slug",
"content": "# Markdown 内容\n\n正文...",
"content_type": "markdown",
"summary": "文章摘要(可选,未提供时自动提取前100字)",
"cover_image": "/storage/admin/images/xxx.jpg",
"category_id": 1,
"is_draft": true
}
删除资讯规则:
- 删除数据库记录
- 同步删除封面图及其缩略图(如果存在)
访客端接口(无需认证)
GET /api/news/public/posts?category_slug=xxx&page=1&size=10 # 获取已发布资讯列表
GET /api/news/public/posts/{slug} # 通过 slug 获取文章详情
GET /api/news/public/categories # 获取启用的栏目列表
4.6 通用文件上传
上传图片(兼容旧接口)
POST /api/upload/image
Authorization: Bearer <token>
Content-Type: multipart/form-data
表单字段:
file: 图片文件 (jpg, png, gif, webp, max 5MB)
响应:
{
"code": 200,
"message": "上传成功",
"data": {
"url": "/storage/admin/images/20260421_xxx.jpg",
"filename": "20260421_xxx.jpg",
"size": 12345,
"thumb_url": "/storage/admin/images/thumbnails/20260421_xxx.jpg"
}
}
5. 图片存储规范
5.1 存储目录结构
storage/
├── admin/
│ └── images/ # 管理员上传的图片
│ ├── thumbnails/ # 缩略图目录
│ ├── banners/ # 轮播图(手动维护)
│ ├── features/ # 特色展示图(手动维护)
│ └── 202604/ # 按月分组的旧文件
└── public/ # 公开访问的文件(预留)
5.2 静态文件挂载
| URL 路径 | 物理路径 | 说明 |
|---|---|---|
/uploads |
storage/admin/images |
兼容旧路径,与 /storage/admin/images 指向同一目录 |
/storage/admin |
storage/admin |
管理员文件根目录 |
/storage/public |
storage/public |
公开文件目录 |
5.3 图片 URL 格式
| 类型 | URL 格式 | 示例 |
|---|---|---|
| 原图 | /storage/admin/images/{filename} |
/storage/admin/images/20260421_xxx.jpg |
| 缩略图 | /storage/admin/images/thumbnails/{filename}.jpg |
/storage/admin/images/thumbnails/20260421_xxx.jpg |
6. Swagger 文档
启动后端后,访问以下地址查看自动生成的 API 文档:
- Swagger UI:
http://localhost:10003/docs - ReDoc:
http://localhost:10003/redoc