This commit is contained in:
Joe
2026-01-16 15:49:34 +08:00
commit 550d3e1f42
380 changed files with 62024 additions and 0 deletions
+995
View File
@@ -0,0 +1,995 @@
# API 接口文档
本文档详细描述了 Goravel Admin 后台管理系统的所有 API 接口。
## 基础信息
- **Base URL**: `http://localhost:3000/api/admin`
- **认证方式**: JWT Bearer Token
- **请求格式**: JSON
- **响应格式**: JSON
## 通用响应格式
### 成功响应
```json
{
"code": 200,
"message": "操作成功",
"data": {}
}
```
### 分页响应
```json
{
"code": 200,
"message": "操作成功",
"data": {
"list": [],
"page": 1,
"page_size": 10,
"total": 100
}
}
```
### 错误响应
```json
{
"code": 400,
"message": "错误信息",
"data": null
}
```
### 状态码说明
| 状态码 | 说明 |
|--------|------|
| 200 | 成功 |
| 400 | 请求参数错误 |
| 401 | 未认证或 Token 过期 |
| 403 | 无权限访问 |
| 404 | 资源不存在 |
| 422 | 验证失败 |
| 500 | 服务器内部错误 |
---
## 认证接口
### 登录
```http
POST /login
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| username | string | 是 | 用户名 |
| password | string | 是 | 密码 |
| captcha_id | string | 否 | 验证码ID |
| captcha_code | string | 否 | 验证码 |
**请求示例:**
```json
{
"username": "admin",
"password": "admin123"
}
```
**响应示例:**
```json
{
"code": 200,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"expires_at": "2024-01-01T12:00:00Z"
}
}
```
### 退出登录
```http
POST /logout
Authorization: Bearer {token}
```
**响应示例:**
```json
{
"code": 200,
"message": "退出成功",
"data": null
}
```
### 刷新 Token
```http
POST /refresh-token
Authorization: Bearer {token}
```
### 获取验证码
```http
GET /captcha
```
**响应示例:**
```json
{
"code": 200,
"data": {
"captcha_id": "abc123",
"captcha_image": "data:image/png;base64,..."
}
}
```
---
## 管理员信息
### 获取当前用户信息
```http
GET /info
Authorization: Bearer {token}
```
**响应示例:**
```json
{
"code": 200,
"data": {
"id": 1,
"username": "admin",
"nickname": "超级管理员",
"email": "admin@example.com",
"avatar": "",
"department_id": 1,
"department": {
"id": 1,
"name": "总部"
},
"roles": [
{
"id": 1,
"name": "超级管理员",
"slug": "super-admin"
}
],
"permissions": ["admin.index", "admin.store", "..."],
"menus": []
}
}
```
### 修改密码
```http
PUT /password
Authorization: Bearer {token}
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| old_password | string | 是 | 原密码 |
| password | string | 是 | 新密码 |
| password_confirmation | string | 是 | 确认新密码 |
---
## 管理员管理
### 获取管理员列表
```http
GET /admins
Authorization: Bearer {token}
```
**查询参数:**
| 参数 | 类型 | 说明 |
|------|------|------|
| page | int | 页码,默认 1 |
| page_size | int | 每页条数,默认 10 |
| username | string | 用户名(模糊搜索) |
| nickname | string | 昵称(模糊搜索) |
| status | int | 状态:0-禁用,1-启用 |
| department_id | int | 部门ID |
| order_by | string | 排序,如 `id:desc` |
**响应示例:**
```json
{
"code": 200,
"data": {
"list": [
{
"id": 1,
"username": "admin",
"nickname": "超级管理员",
"email": "admin@example.com",
"phone": "",
"avatar": "",
"status": 1,
"department_id": 1,
"department": {"id": 1, "name": "总部"},
"roles": [{"id": 1, "name": "超级管理员"}],
"created_at": "2024-01-01T00:00:00Z",
"last_login_at": "2024-01-01T12:00:00Z"
}
],
"page": 1,
"page_size": 10,
"total": 1
}
}
```
### 创建管理员
```http
POST /admins
Authorization: Bearer {token}
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| username | string | 是 | 用户名(唯一) |
| password | string | 是 | 密码 |
| nickname | string | 是 | 昵称 |
| email | string | 否 | 邮箱 |
| phone | string | 否 | 手机号 |
| avatar | string | 否 | 头像URL |
| department_id | int | 否 | 部门ID |
| role_ids | []int | 否 | 角色ID数组 |
| status | int | 否 | 状态,默认 1 |
### 获取管理员详情
```http
GET /admins/{id}
Authorization: Bearer {token}
```
### 更新管理员
```http
PUT /admins/{id}
Authorization: Bearer {token}
```
### 删除管理员
```http
DELETE /admins/{id}
Authorization: Bearer {token}
```
### 重置密码
```http
PUT /admins/{id}/reset-password
Authorization: Bearer {token}
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| password | string | 是 | 新密码 |
---
## 角色管理
### 获取角色列表
```http
GET /roles
Authorization: Bearer {token}
```
**查询参数:**
| 参数 | 类型 | 说明 |
|------|------|------|
| page | int | 页码 |
| page_size | int | 每页条数 |
| name | string | 角色名称(模糊搜索) |
| status | int | 状态 |
### 创建角色
```http
POST /roles
Authorization: Bearer {token}
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| name | string | 是 | 角色名称 |
| slug | string | 是 | 角色标识(唯一) |
| description | string | 否 | 描述 |
| permission_ids | []int | 否 | 权限ID数组 |
| menu_ids | []int | 否 | 菜单ID数组 |
| status | int | 否 | 状态 |
| sort | int | 否 | 排序 |
### 获取角色详情
```http
GET /roles/{id}
Authorization: Bearer {token}
```
### 更新角色
```http
PUT /roles/{id}
Authorization: Bearer {token}
```
### 删除角色
```http
DELETE /roles/{id}
Authorization: Bearer {token}
```
---
## 菜单管理
### 获取菜单列表(树形)
```http
GET /menus
Authorization: Bearer {token}
```
**响应示例:**
```json
{
"code": 200,
"data": {
"list": [
{
"id": 1,
"parent_id": 0,
"title": "系统管理",
"slug": "system",
"icon": "Setting",
"path": "/system",
"component": "",
"type": 1,
"status": 1,
"sort": 1,
"children": [
{
"id": 2,
"parent_id": 1,
"title": "管理员管理",
"slug": "admin",
"path": "/system/admin",
"component": "admin/AdminList",
"type": 2,
"status": 1
}
]
}
]
}
}
```
### 创建菜单
```http
POST /menus
Authorization: Bearer {token}
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| parent_id | int | 否 | 父级ID,默认 0 |
| title | string | 是 | 菜单标题 |
| slug | string | 是 | 菜单标识 |
| icon | string | 否 | 图标名称 |
| path | string | 否 | 路由路径 |
| component | string | 否 | 组件路径 |
| type | int | 是 | 类型:1-目录,2-菜单,3-按钮 |
| status | int | 否 | 状态 |
| sort | int | 否 | 排序 |
### 获取菜单详情
```http
GET /menus/{id}
Authorization: Bearer {token}
```
### 更新菜单
```http
PUT /menus/{id}
Authorization: Bearer {token}
```
### 删除菜单
```http
DELETE /menus/{id}
Authorization: Bearer {token}
```
---
## 权限管理
### 获取权限列表
```http
GET /permissions
Authorization: Bearer {token}
```
### 创建权限
```http
POST /permissions
Authorization: Bearer {token}
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| name | string | 是 | 权限名称 |
| slug | string | 是 | 权限标识(唯一) |
| method | string | 是 | HTTP 方法(GET/POST/PUT/DELETE |
| path | string | 是 | API 路径 |
| menu_id | int | 否 | 关联菜单ID |
| status | int | 否 | 状态 |
### 更新权限
```http
PUT /permissions/{id}
Authorization: Bearer {token}
```
### 删除权限
```http
DELETE /permissions/{id}
Authorization: Bearer {token}
```
---
## 部门管理
### 获取部门列表(树形)
```http
GET /departments
Authorization: Bearer {token}
```
### 创建部门
```http
POST /departments
Authorization: Bearer {token}
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| name | string | 是 | 部门名称 |
| parent_id | int | 否 | 父部门ID |
| leader | string | 否 | 负责人 |
| phone | string | 否 | 联系电话 |
| email | string | 否 | 邮箱 |
| status | int | 否 | 状态 |
| sort | int | 否 | 排序 |
### 更新部门
```http
PUT /departments/{id}
Authorization: Bearer {token}
```
### 删除部门
```http
DELETE /departments/{id}
Authorization: Bearer {token}
```
---
## 字典管理
### 获取字典列表
```http
GET /dictionaries
Authorization: Bearer {token}
```
### 创建字典
```http
POST /dictionaries
Authorization: Bearer {token}
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| parent_id | int | 否 | 父级ID0为字典类型) |
| name | string | 是 | 名称 |
| code | string | 是 | 编码 |
| value | string | 否 | 值 |
| description | string | 否 | 描述 |
| status | int | 否 | 状态 |
| sort | int | 否 | 排序 |
### 更新字典
```http
PUT /dictionaries/{id}
Authorization: Bearer {token}
```
### 删除字典
```http
DELETE /dictionaries/{id}
Authorization: Bearer {token}
```
---
## 黑名单管理
### 获取黑名单列表
```http
GET /blacklists
Authorization: Bearer {token}
```
### 创建黑名单
```http
POST /blacklists
Authorization: Bearer {token}
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| ip | string | 是 | IP地址(支持单IP、CIDR、范围) |
| remark | string | 否 | 备注 |
| status | int | 否 | 状态 |
**IP 格式示例:**
- 单个 IP: `192.168.1.100`
- CIDR 格式: `192.168.1.0/24`
- IP 范围: `192.168.1.1-192.168.1.100`
### 更新黑名单
```http
PUT /blacklists/{id}
Authorization: Bearer {token}
```
### 删除黑名单
```http
DELETE /blacklists/{id}
Authorization: Bearer {token}
```
### 批量删除黑名单
```http
DELETE /blacklists/batch
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"ids": [1, 2, 3]
}
```
---
## 日志管理
### 操作日志
```http
GET /logs/operation
Authorization: Bearer {token}
```
**查询参数:**
| 参数 | 类型 | 说明 |
|------|------|------|
| admin_id | int | 管理员ID |
| module | string | 模块 |
| action | string | 操作 |
| start_date | string | 开始日期 |
| end_date | string | 结束日期 |
### 登录日志
```http
GET /logs/login
Authorization: Bearer {token}
```
**查询参数:**
| 参数 | 类型 | 说明 |
|------|------|------|
| admin_id | int | 管理员ID |
| ip | string | IP地址 |
| status | int | 状态:0-失败,1-成功 |
| start_date | string | 开始日期 |
| end_date | string | 结束日期 |
### 系统日志
```http
GET /logs/system
Authorization: Bearer {token}
```
**查询参数:**
| 参数 | 类型 | 说明 |
|------|------|------|
| level | string | 日志级别(error/warning/info/debug |
| trace_id | string | 追踪ID |
| start_date | string | 开始日期 |
| end_date | string | 结束日期 |
---
## 仪表盘
### 获取统计数据
```http
GET /dashboard/stats
Authorization: Bearer {token}
```
**响应示例:**
```json
{
"code": 200,
"data": {
"admin_count": 10,
"role_count": 5,
"menu_count": 30,
"login_count_today": 15,
"operation_count_today": 100,
"recent_logins": [],
"recent_operations": []
}
}
```
---
## 在线管理员
### 获取在线管理员列表
```http
GET /online-admins
Authorization: Bearer {token}
```
### 强制下线
```http
DELETE /online-admins/{token_id}
Authorization: Bearer {token}
```
### 批量强制下线
```http
POST /online-admins/batch-kick-out
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"token_ids": [1, 2, 3]
}
```
---
## 服务监控
### 获取系统信息
```http
GET /monitor/system
Authorization: Bearer {token}
```
**响应示例:**
```json
{
"code": 200,
"data": {
"cpu": {
"cores": 8,
"usage": 25.5
},
"memory": {
"total": 16384,
"used": 8192,
"usage": 50.0
},
"disk": {
"total": 512000,
"used": 256000,
"usage": 50.0
},
"go": {
"version": "go1.21",
"goroutines": 50,
"gc_pause": "1.2ms"
}
}
}
```
---
## 文件上传
### 上传文件
```http
POST /attachments/upload
Authorization: Bearer {token}
Content-Type: multipart/form-data
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| file | file | 是 | 文件 |
| type | string | 否 | 类型(image/document/video |
### 分片上传
```http
POST /attachments/chunk
Authorization: Bearer {token}
Content-Type: multipart/form-data
```
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| file | file | 是 | 分片文件 |
| chunk_id | string | 是 | 分片标识 |
| chunk_index | int | 是 | 分片索引 |
| total_chunks | int | 是 | 总分片数 |
| filename | string | 是 | 原始文件名 |
### 合并分片
```http
POST /attachments/merge
Authorization: Bearer {token}
```
**请求参数:**
```json
{
"chunk_id": "abc123",
"filename": "large-file.zip",
"total_chunks": 10
}
```
---
## 通知中心
### WebSocket 连接
```
ws://localhost:3000/api/admin/ws/notifications
Authorization: Bearer {token}
```
**消息格式:**
```json
{
"type": "notification",
"data": {
"id": 1,
"title": "新通知",
"content": "通知内容",
"created_at": "2024-01-01T12:00:00Z"
}
}
```
### 获取通知列表
```http
GET /notifications
Authorization: Bearer {token}
```
### 标记已读
```http
PUT /notifications/{id}/read
Authorization: Bearer {token}
```
### 全部标记已读
```http
PUT /notifications/read-all
Authorization: Bearer {token}
```
---
## 错误码说明
错误码定义在 `app/errors/codes.go`,格式为 `XXYYYY`
- `XX`: 模块 (10-认证, 20-权限, 30-验证, 40-业务, 50-系统)
- `YYYY`: 具体错误
### 认证模块 (10xxx)
| 错误码 | 说明 |
|--------|------|
| 10001 | 用户名或密码错误 |
| 10002 | 账号已被禁用 |
| 10003 | Token 已过期 |
| 10004 | Token 已被撤销 |
| 10005 | 验证码错误 |
| 10006 | 登录尝试次数超限 |
| 10007 | Token 无效 |
### 权限模块 (20xxx)
| 错误码 | 说明 |
|--------|------|
| 20001 | 无权限访问 |
| 20002 | 资源不存在 |
| 20003 | 访问被拒绝 |
### 验证模块 (30xxx)
| 错误码 | 说明 |
|--------|------|
| 30001 | 参数验证失败 |
| 30002 | 数据已存在 |
| 30003 | 数据不存在 |
| 30004 | 格式无效 |
### 业务模块 (40xxx)
| 错误码 | 说明 |
|--------|------|
| 40001 | 操作失败 |
| 40002 | 删除失败 |
| 40003 | 更新失败 |
| 40004 | 创建失败 |
| 40005 | 上传失败 |
| 40006 | 导出失败 |
### 系统模块 (50xxx)
| 错误码 | 说明 |
|--------|------|
| 50001 | 服务器内部错误 |
| 50002 | 数据库错误 |
| 50003 | 缓存错误 |
| 50004 | 队列错误 |
| 50005 | 第三方服务错误 |
---
## 附录
### 认证头格式
```http
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
```
### 分页参数
所有列表接口支持以下分页参数:
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| page | int | 1 | 页码 |
| page_size | int | 10 | 每页条数(最大 100 |
| order_by | string | id:desc | 排序(字段:方向) |
### 时间格式
所有时间字段使用 ISO 8601 格式:`2024-01-01T12:00:00Z`
### 多语言支持
通过请求头指定语言:
```http
Accept-Language: zh-CN
```
支持的语言:
- `zh-CN` - 简体中文
- `en-US` - English