🔑 API Keys(管理员视角)

Admin 管理员集中管理所有用户的 AI API Key(OpenAI/Claude 等),包括查看、创建、禁用/启用、撤销。页面展示 Key 列表、关联账单、使用统计,支持按供应商/状态/账单筛选、关键词搜索。

路由/api-keys

页面初始化触发

1. 进入页面 → 并发请求 2 个

触发条件:组件首次挂载
GET /admin/api-keys
✅ 页面加载时自动触发

请求头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}]

GET /admin/bills
✅ 页面加载时自动触发(并发)

Querylimit=1000

用途:填充"所属账单"下拉筛选器

筛选操作触发

2. 切换供应商筛选 → GET /admin/api-keys(provider)

触发条件:选择供应商下拉框(OpenAI / Claude / 其他)

3. 切换状态筛选 → GET /admin/api-keys(is_active)

触发条件:选择状态下拉框(全部/启用/停用)

4. 切换账单筛选 → GET /admin/api-keys(bill_id)

触发条件:选择账单下拉框

5. 清空筛选 → 重置所有 → 重新请求

搜索操作

6. 搜索 → 本地筛选(非请求)

触发条件:搜索框输入 → 400ms 防抖 → 本地过滤(匹配 provider、model、bill_name)

创建操作

7. 点击"新建"按钮 → 弹出 Modal

触发条件:点击"新建"按钮(Key 图标)
  • 显示 showModal=true
  • 表单初始值:{ provider: '', model: '', api_key: '', bill_id: '', is_shared: false, priority: '', expires_at: '' }

8. 填写表单 → POST /admin/api-keys

触发条件:Modal 内点击"创建"按钮
POST /admin/api-keys
✅ 点击"创建"按钮触发(需 provider + api_key 非空)

请求头Authorization: Bearer {token}

参数类型必填说明
providerstring必填供应商名称(如 OpenAI、Claude)
api_keystring必填API Key 值
modelstring可选模型名称
bill_idinteger可选关联账单 ID
is_sharedboolean可选是否共享(默认 false)
priorityinteger可选优先级(数字越小越优先)
expires_atstring可选过期时间(YYYY-MM-DD)

副作用:创建成功后 → setShowModal(false) → 清空表单 → doFetchKeys() 刷新列表

前端校验:provider 或 api_key 为空时直接 return,不发送请求。

撤销操作

9. 点击"撤销"按钮 → PUT /admin/api-keys/:id/revoke

触发条件:点击某行的撤销按钮 → confirm() 确认框
PUT /admin/api-keys/:id/revoke
✅ 点击"撤销"按钮 + 用户确认后触发

请求头Authorization: Bearer {token}

Body{}(空对象)

副作用:成功后 → doFetchKeys() 刷新列表(is_active 变为 0)

不可恢复:撤销后 Key 失效,前端弹出 confirm() 确认框告知用户"撤销后不可恢复"。

复制操作

10. 点击"复制"按钮 → 复制 API Key 到剪贴板

触发条件:点击某行的复制按钮
实现:navigator.clipboard.writeText(key.api_key)(纯前端,无请求)