🔑 API Keys(管理员视角)
Admin 管理员集中管理所有用户的 AI API Key(OpenAI/Claude 等),包括查看、创建、禁用/启用、撤销。页面展示 Key 列表、关联账单、使用统计,支持按供应商/状态/账单筛选、关键词搜索。
路由:/api-keys
页面初始化触发
1. 进入页面 → 并发请求 2 个
请求头:Authorization: Bearer {token}
Query 参数(可选):provider, is_active, bill_id
响应:[{id, provider, model, api_key, bill_id, bill_name, is_shared, priority, expires_at, is_active, total_usage, created_at}]
Query:limit=1000
用途:填充"所属账单"下拉筛选器
筛选操作触发
2. 切换供应商筛选 → GET /admin/api-keys(provider)
3. 切换状态筛选 → GET /admin/api-keys(is_active)
4. 切换账单筛选 → GET /admin/api-keys(bill_id)
5. 清空筛选 → 重置所有 → 重新请求
搜索操作
6. 搜索 → 本地筛选(非请求)
创建操作
7. 点击"新建"按钮 → 弹出 Modal
- 显示
showModal=true - 表单初始值:
{ provider: '', model: '', api_key: '', bill_id: '', is_shared: false, priority: '', expires_at: '' }
8. 填写表单 → POST /admin/api-keys
请求头:Authorization: Bearer {token}
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
provider | string | 必填 | 供应商名称(如 OpenAI、Claude) |
api_key | string | 必填 | API Key 值 |
model | string | 可选 | 模型名称 |
bill_id | integer | 可选 | 关联账单 ID |
is_shared | boolean | 可选 | 是否共享(默认 false) |
priority | integer | 可选 | 优先级(数字越小越优先) |
expires_at | string | 可选 | 过期时间(YYYY-MM-DD) |
副作用:创建成功后 → setShowModal(false) → 清空表单 → doFetchKeys() 刷新列表
撤销 / 恢复操作
9. 点击"撤销/恢复"按钮 → PUT /admin/api-keys/:id
confirm() 确认框请求头:Authorization: Bearer {token}
Body:{"revoked_at": "2026-04-15T00:00:00.000Z"}(撤销时设时间戳)
恢复 Body:{"revoked_at": null}(恢复时设为 null)
副作用:成功后 → setSelectedKey(null); doFetchKeys()
- 已撤销 Key → 显示蓝色"恢复 Key"按钮
- 正常 Key → 显示红色"撤销 Key"按钮
- 操作不可逆但支持恢复
复制操作
10. 点击"复制"按钮 → 复制 API Key 到剪贴板
navigator.clipboard.writeText(key.api_key)(纯前端,无请求)余额查询
11. 点击"查询余额"按钮 → POST /admin/api-keys/:id/check-balance
说明:根据 Key 的 provider 调用对应厂商 API 查询余额,返回值含 amount、currency、type。
支持的 provider:DeepSeek、MiniMax、Hailuo、GLM (BigModel)、OpenAI
响应: { success: true, balance: { amount: 12.50, currency: "USD", type: "realtime" } }
错误:404 Key 不存在 | 500 厂商接口调用失败/超时