登录与会话
管理端登录与会话维护,登录后才能访问其余业务接口。
管理端登录
接口地址
text
POST /admin/login接口说明
校验账号密码后签发 JWT,并在 Redis 写入 login:<login_id> 实现主动过期。 账号被禁用时返回业务错误。
接口参数说明
| Body 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
username | string | 是 | 登录账号 |
password | string | 是 | 登录密码 |
响应示例
json
{
"code": 0,
"msg": "success",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}响应参数说明
| 响应字段 | 类型 | 说明 |
|---|---|---|
token | string | JWT 访问令牌,携带方式:Authorization: Bearer <token> |
退出登录
接口地址
text
POST /admin/logout接口说明
删除当前登录会话的 Redis Key,JWT 立即失效。
接口参数说明
无请求参数。
响应示例
json
{
"code": 0,
"msg": "success",
"data": {
"code": 0,
"msg": "success",
"data": null
}
}响应参数说明
成功时 data 为 null。
当前登录用户信息
接口地址
text
GET /admin/me接口参数说明
无请求参数。
响应示例
json
{
"code": 0,
"msg": "success",
"data": {
"id": 1,
"created_at": "2026-09-25T10:00:00+08:00",
"updated_at": "2026-09-25T10:00:00+08:00",
"username": "admin",
"nickname": "超级管理员",
"avatar": "/files/2026/09/23/8f14e45fceea167a5a36dedd4bea2543.png",
"mobile": "",
"email": "",
"dept_id": 0,
"status": 1,
"is_super": 0,
"roles": [
{
"id": 1,
"created_at": "2026-09-25T10:00:00+08:00",
"updated_at": "2026-09-25T10:00:00+08:00",
"name": "运营专员",
"code": "operator",
"parent_id": 0,
"sort": 0,
"status": 1,
"remark": ""
}
]
}
}响应参数说明
| 响应字段 | 类型 | 说明 |
|---|---|---|
id | integer | 主键ID |
created_at | string | 创建时间 |
updated_at | string | 更新时间 |
username | string | 登录账号 |
nickname | string | 用户昵称 |
avatar | string | 头像访问地址(按当前默认存储动态生成) |
mobile | string | 手机号 |
email | string | 邮箱 |
dept_id | integer | 部门ID |
status | integer | 状态 1启用 2禁用 |
is_super | integer | 是否超级管理员 0否 1是 |
roles | array<RoleItem> | 角色列表 |
roles[].id | integer | 主键ID |
roles[].created_at | string | 创建时间 |
roles[].updated_at | string | 更新时间 |
roles[].name | string | 角色名称 |
roles[].code | string | 角色编码(唯一) |
roles[].parent_id | integer | 上级角色ID,0 为顶级 |
roles[].sort | integer | 排序 |
roles[].status | integer | 状态 1启用 2禁用 |
roles[].remark | string | 备注 |
修改当前管理员个人资料
接口地址
text
POST /admin/profile/update接口说明
仅可修改昵称、头像、手机号、邮箱,不能修改权限、部门与账号状态。
接口参数说明
| Body 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
nickname | string | 否 | 用户昵称,最长 32 字符 |
avatar | string | 否 | 头像相对路径(由上传接口返回) |
mobile | string | 否 | 手机号,最长 16 字符 |
email | string | 否 | 邮箱,最长 64 字符 |
响应示例
json
{
"code": 0,
"msg": "success",
"data": {
"id": 1,
"created_at": "2026-09-25T10:00:00+08:00",
"updated_at": "2026-09-25T10:00:00+08:00",
"username": "admin",
"nickname": "超级管理员",
"avatar": "/files/2026/09/23/8f14e45fceea167a5a36dedd4bea2543.png",
"mobile": "",
"email": "",
"dept_id": 0,
"status": 1,
"is_super": 0,
"roles": [
{
"id": 1,
"created_at": "2026-09-25T10:00:00+08:00",
"updated_at": "2026-09-25T10:00:00+08:00",
"name": "运营专员",
"code": "operator",
"parent_id": 0,
"sort": 0,
"status": 1,
"remark": ""
}
]
}
}响应参数说明
| 响应字段 | 类型 | 说明 |
|---|---|---|
id | integer | 主键ID |
created_at | string | 创建时间 |
updated_at | string | 更新时间 |
username | string | 登录账号 |
nickname | string | 用户昵称 |
avatar | string | 头像访问地址(按当前默认存储动态生成) |
mobile | string | 手机号 |
email | string | 邮箱 |
dept_id | integer | 部门ID |
status | integer | 状态 1启用 2禁用 |
is_super | integer | 是否超级管理员 0否 1是 |
roles | array<RoleItem> | 角色列表 |
roles[].id | integer | 主键ID |
roles[].created_at | string | 创建时间 |
roles[].updated_at | string | 更新时间 |
roles[].name | string | 角色名称 |
roles[].code | string | 角色编码(唯一) |
roles[].parent_id | integer | 上级角色ID,0 为顶级 |
roles[].sort | integer | 排序 |
roles[].status | integer | 状态 1启用 2禁用 |
roles[].remark | string | 备注 |
单独修改当前管理员头像
接口地址
text
POST /admin/profile/avatar接口说明
只更新头像字段,不影响其他未保存的个人资料。
接口参数说明
| Body 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
avatar | string | 是 | 头像相对路径(由上传接口返回) |
响应示例
json
{
"code": 0,
"msg": "success",
"data": {
"id": 1,
"created_at": "2026-09-25T10:00:00+08:00",
"updated_at": "2026-09-25T10:00:00+08:00",
"username": "admin",
"nickname": "超级管理员",
"avatar": "/files/2026/09/23/8f14e45fceea167a5a36dedd4bea2543.png",
"mobile": "",
"email": "",
"dept_id": 0,
"status": 1,
"is_super": 0,
"roles": [
{
"id": 1,
"created_at": "2026-09-25T10:00:00+08:00",
"updated_at": "2026-09-25T10:00:00+08:00",
"name": "运营专员",
"code": "operator",
"parent_id": 0,
"sort": 0,
"status": 1,
"remark": ""
}
]
}
}响应参数说明
| 响应字段 | 类型 | 说明 |
|---|---|---|
id | integer | 主键ID |
created_at | string | 创建时间 |
updated_at | string | 更新时间 |
username | string | 登录账号 |
nickname | string | 用户昵称 |
avatar | string | 头像访问地址(按当前默认存储动态生成) |
mobile | string | 手机号 |
email | string | 邮箱 |
dept_id | integer | 部门ID |
status | integer | 状态 1启用 2禁用 |
is_super | integer | 是否超级管理员 0否 1是 |
roles | array<RoleItem> | 角色列表 |
roles[].id | integer | 主键ID |
roles[].created_at | string | 创建时间 |
roles[].updated_at | string | 更新时间 |
roles[].name | string | 角色名称 |
roles[].code | string | 角色编码(唯一) |
roles[].parent_id | integer | 上级角色ID,0 为顶级 |
roles[].sort | integer | 排序 |
roles[].status | integer | 状态 1启用 2禁用 |
roles[].remark | string | 备注 |
当前用户的菜单树(前端路由)
接口地址
text
GET /admin/routers接口说明
返回目录 + 菜单页面(不含按钮)的树形结构,用于渲染侧边导航。 超级管理员返回全部显示中的菜单。
接口参数说明
无请求参数。
响应示例
json
{
"code": 0,
"msg": "success",
"data": [
{
"data": {
"id": 1,
"created_at": "2026-09-25T10:00:00+08:00",
"updated_at": "2026-09-25T10:00:00+08:00",
"name": "用户管理",
"type": 1,
"parent_id": 0,
"path": "/system/user",
"api_path": "POST:/admin/user/add",
"icon": "User",
"sort": 0,
"status": 1,
"remark": ""
},
"children": [
{
"data": {
"id": 1,
"created_at": "2026-09-25T10:00:00+08:00",
"updated_at": "2026-09-25T10:00:00+08:00",
"name": "用户管理",
"type": 1,
"parent_id": 0,
"path": "/system/user",
"api_path": "POST:/admin/user/add",
"icon": "User",
"sort": 0,
"status": 1,
"remark": ""
},
"children": [
{
"data": {
},
"children": [
{
}
]
}
]
}
]
}
]
}响应参数说明
成功时 data 为 null。
当前用户的接口权限列表
接口地址
text
GET /admin/permissions接口说明
返回当前用户拥有的接口权限集合(格式 METHOD:/path),用于前端按钮显隐。 超级管理员返回 ["*"]。
接口参数说明
无请求参数。
响应示例
json
{
"code": 0,
"msg": "success",
"data": [
""
]
}响应参数说明
成功时 data 为 null。
修改当前管理员密码
接口地址
text
POST /admin/change_password接口说明
修改成功后会踢掉该账号所有在线会话,需要重新登录。
接口参数说明
| Body 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
old_password | string | 是 | 原密码 |
new_password | string | 是 | 新密码,至少 6 位 |
响应示例
json
{
"code": 0,
"msg": "success",
"data": {
"code": 0,
"msg": "success",
"data": null
}
}响应参数说明
成功时 data 为 null。