forked from xiaohei/taiji-AI-PAD
1307 lines
32 KiB
Markdown
1307 lines
32 KiB
Markdown
# 渠道合作伙伴平台 - 接口对接文档
|
||
|
||
> **版本**: v1.0.0
|
||
> **更新时间**: 2026-01-06
|
||
> **说明**: 本文档基于前端业务需求清单与后端API接口清单核实,列出渠道平台所有接口的对接状态
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
1. [接口对接核实总结](#接口对接核实总结)
|
||
2. [认证模块](#认证模块)
|
||
3. [仪表板模块](#仪表板模块)
|
||
4. [租户管理模块](#租户管理模块)
|
||
5. [资源管理模块](#资源管理模块)
|
||
6. [计费模块](#计费模块)
|
||
7. [设置模块](#设置模块)
|
||
8. [接口汇总表](#接口汇总表)
|
||
9. [待完善功能清单](#待完善功能清单)
|
||
|
||
---
|
||
|
||
## 接口对接核实总结
|
||
|
||
### 核实结果概览
|
||
|
||
| 分类 | 已对接 | 部分对接 | 待开发 | 总计 |
|
||
|------|--------|----------|--------|------|
|
||
| 认证模块 | 2 | 0 | 0 | 2 |
|
||
| 仪表板模块 | 1 | 1 | 0 | 2 |
|
||
| 租户管理模块 | 9 | 0 | 0 | 9 |
|
||
| 资源管理模块 | 4 | 0 | 0 | 4 |
|
||
| 计费模块 | 3 | 1 | 0 | 4 |
|
||
| 设置模块 | 2 | 0 | 1 | 3 |
|
||
| **总计** | **21** | **2** | **1** | **24** |
|
||
|
||
### 核实说明
|
||
|
||
- ✅ **已对接**: 后端接口已存在且与前端需求匹配
|
||
- ⚠️ **部分对接**: 后端接口存在但功能不完整
|
||
- ❌ **待开发**: 后端接口不存在,需要新增
|
||
|
||
---
|
||
|
||
## 认证模块
|
||
|
||
### 1. 渠道用户登录 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | 登录页面 → "登录"按钮 |
|
||
| **接口路径** | `POST /api/auth/login` |
|
||
| **后端文件** | `services/mcp-server/app/routes/auth.py` |
|
||
| **权限要求** | 无 |
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| email | string | 是 | 邮箱地址 |
|
||
| password | string | 是 | 密码 |
|
||
| role | string | 是 | 固定值 `"channel"` |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||
"user": {
|
||
"id": "channel_001",
|
||
"email": "channel@example.com",
|
||
"role": "channel_admin",
|
||
"name": "渠道管理员"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.login(email, password, "channel")`
|
||
|
||
**Token存储**: `channel_token` (localStorage + Cookie)
|
||
|
||
---
|
||
|
||
### 2. 退出登录 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | 页面头部 → "退出"按钮 |
|
||
| **接口路径** | `POST /api/auth/logout` |
|
||
| **后端文件** | `services/mcp-server/app/routes/auth.py` |
|
||
| **权限要求** | 已认证用户 |
|
||
|
||
**请求头**:
|
||
|
||
```
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "登出成功"
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.logout()`
|
||
|
||
**前端行为**: 清除所有本地存储的token,跳转到登录页
|
||
|
||
---
|
||
|
||
## 仪表板模块
|
||
|
||
### 3. 渠道统计概览 ⚠️ 部分对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **展示位置** | 仪表板页面 → 顶部统计卡片区域 |
|
||
| **当前接口** | `GET /api/channel/tenants` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**展示内容**:
|
||
- 总租户数(从租户列表计算)✅
|
||
- 活跃租户(从租户列表计算)✅
|
||
- 月度收入 ❌ 需要专门接口
|
||
- 已获佣金 ❌ 需要专门接口
|
||
|
||
**当前实现**: 从租户列表接口计算总租户数和活跃租户数
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"tenants": [
|
||
{
|
||
"id": "tenant_001",
|
||
"name": "租户A",
|
||
"status": "active"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
**待完善**: 建议后端新增聚合统计接口
|
||
|
||
```
|
||
GET /api/channel/dashboard/stats
|
||
```
|
||
|
||
**建议响应**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"totalTenants": 5,
|
||
"activeTenants": 3,
|
||
"monthlyRevenue": 12500.00,
|
||
"commission": 1250.00
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 4. 平台Agent概览 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **展示位置** | 仪表板页面 → "平台Agent概览"区域 |
|
||
| **接口路径** | `GET /api/channel/available-platform-agents` |
|
||
| **后端文件** | `services/mcp-server/app/routes/platform_agent_quota.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"templates": [
|
||
{
|
||
"name": "gpt-assistant",
|
||
"displayName": "GPT助手",
|
||
"description": "基于GPT的智能助手",
|
||
"podQuota": 10,
|
||
"podRemaining": 8,
|
||
"hasAccess": true
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.getAvailablePlatformAgents()`
|
||
|
||
---
|
||
|
||
## 租户管理模块
|
||
|
||
### 5. 租户列表 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **展示位置** | "我的租户"标签页 → 租户列表 |
|
||
| **接口路径** | `GET /api/channel/tenants` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"tenants": [
|
||
{
|
||
"id": "tenant_001",
|
||
"name": "企业A",
|
||
"status": "active",
|
||
"plan": "enterprise",
|
||
"users": 50,
|
||
"revenue": "$3,200",
|
||
"balance": "$1,500",
|
||
"creditLimit": "$5,000"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.getChannelTenants()`
|
||
|
||
---
|
||
|
||
### 6. 创建租户 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | "我的租户"标签页 → "添加租户"按钮 |
|
||
| **接口路径** | `POST /api/channel/tenants/create` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| name | string | 是 | 公司名称 |
|
||
| email | string | 是 | 联系邮箱(用于登录) |
|
||
| password | string | 是 | 登录密码 |
|
||
| subscriptionTier | string | 否 | 订阅等级:free/pro/enterprise |
|
||
|
||
**请求示例**:
|
||
|
||
```json
|
||
{
|
||
"name": "新企业",
|
||
"email": "admin@newcompany.com",
|
||
"password": "SecurePass123",
|
||
"subscriptionTier": "pro"
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"tenant": {
|
||
"id": "tenant_002",
|
||
"name": "新企业",
|
||
"email": "admin@newcompany.com"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.createChannelTenant(data)`
|
||
|
||
---
|
||
|
||
### 7. 删除租户 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | 租户列表 → 操作菜单 → "删除租户" |
|
||
| **接口路径** | `DELETE /api/channel/tenants/{tenantId}` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**路径参数**:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| tenantId | string | 租户ID |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "租户删除成功"
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.deleteTenant(tenantId)`
|
||
|
||
---
|
||
|
||
### 8. 分配资源 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | 租户列表 → 操作菜单 → "分配资源" |
|
||
| **接口路径** | `PUT /api/channel/tenants/{tenantId}/resources` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**路径参数**:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| tenantId | string | 租户ID |
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| agents | array | 否 | Agent配额列表 |
|
||
| agents[].agentId | string | 是 | Agent模板名称 |
|
||
| agents[].quantity | int | 是 | 分配数量 |
|
||
| models | array | 否 | 模型配额列表 |
|
||
| models[].modelName | string | 是 | 模型名称(如gpt-4) |
|
||
| models[].rpm | int | 是 | 每分钟请求数限制 |
|
||
| models[].tpm | int | 是 | 每分钟令牌数限制 |
|
||
| customAgentQuota | object | 否 | 自定义Agent资源配额 |
|
||
| customAgentQuota.cpuQuota | float | 否 | CPU配额(核数/Agent) |
|
||
| customAgentQuota.memoryQuota | float | 否 | 内存配额(GB/Agent) |
|
||
|
||
**请求示例**:
|
||
|
||
```json
|
||
{
|
||
"agents": [
|
||
{
|
||
"agentId": "gpt-assistant",
|
||
"quantity": 5
|
||
}
|
||
],
|
||
"models": [
|
||
{
|
||
"modelName": "gpt-4",
|
||
"rpm": 100,
|
||
"tpm": 50000
|
||
}
|
||
],
|
||
"customAgentQuota": {
|
||
"cpuQuota": 0.5,
|
||
"memoryQuota": 1.0
|
||
}
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "资源分配成功"
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.allocateTenantResources(tenantId, data)`
|
||
|
||
---
|
||
|
||
### 9. 租户充值 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | 租户列表 → 操作菜单 → "充值" |
|
||
| **接口路径** | `POST /api/channel/tenants/{tenantId}/recharge` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**路径参数**:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| tenantId | string | 租户ID |
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| amount | float | 是 | 充值金额(USD) |
|
||
|
||
**请求示例**:
|
||
|
||
```json
|
||
{
|
||
"amount": 500.00
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"newBalance": 2000.00
|
||
}
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.rechargeTenant(tenantId, amount)`
|
||
|
||
**快捷金额**: $50, $100, $500, $1000
|
||
|
||
---
|
||
|
||
### 10. 设置授信额度 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | 租户列表 → 操作菜单 → "授信额度" |
|
||
| **接口路径** | `PUT /api/channel/tenants/{tenantId}/credit` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**路径参数**:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| tenantId | string | 租户ID |
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| creditLimit | float | 是 | 授信额度(USD) |
|
||
|
||
**请求示例**:
|
||
|
||
```json
|
||
{
|
||
"creditLimit": 5000.00
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "授信额度设置成功"
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.setTenantCreditLimit(tenantId, creditLimit)`
|
||
|
||
**快捷金额**: $500, $1000, $5000, $10000
|
||
|
||
---
|
||
|
||
### 11. 管理计费 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | 租户列表 → 操作菜单 → "管理计费" |
|
||
| **接口路径** | `PUT /api/channel/tenants/{tenantId}/billing` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**路径参数**:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| tenantId | string | 租户ID |
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| subscriptionTier | string | 否 | 订阅层级:free/pro/enterprise |
|
||
| discount | int | 否 | 折扣比例(0-100的百分比) |
|
||
|
||
**请求示例**:
|
||
|
||
```json
|
||
{
|
||
"subscriptionTier": "pro",
|
||
"discount": 10
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "计费设置更新成功"
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.updateTenantBilling(tenantId, data)`
|
||
|
||
**订阅层级说明**:
|
||
|
||
| 层级 | 价格 | 说明 |
|
||
|------|------|------|
|
||
| 免费版 (free) | $0/mo | 基础功能 |
|
||
| 专业版 (pro) | $1,800/mo | 适合中小企业 |
|
||
| 企业版 (enterprise) | $3,200/mo | 无限制 |
|
||
|
||
---
|
||
|
||
### 12. 更新租户状态 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | 租户列表 → 操作菜单 → "暂停/启用" |
|
||
| **接口路径** | `PUT /api/channel/tenants/{tenantId}/status` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**路径参数**:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| tenantId | string | 租户ID |
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| status | string | 是 | 状态:active/suspended |
|
||
|
||
**请求示例**:
|
||
|
||
```json
|
||
{
|
||
"status": "suspended"
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "租户状态更新成功"
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.updateTenantStatus(tenantId, status)`
|
||
|
||
---
|
||
|
||
### 13. 更新租户权限 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | 租户详情 → 权限设置 |
|
||
| **接口路径** | `PUT /api/channel/tenants/{tenantId}/permissions` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**路径参数**:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| tenantId | string | 租户ID |
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| permissions | array | 是 | 权限列表 |
|
||
|
||
**可用权限值**:
|
||
|
||
| 权限 | 说明 |
|
||
|------|------|
|
||
| use:platform_agents | 使用平台Agent |
|
||
| use:custom_agents | 使用自定义Agent |
|
||
| create:agents | 创建Agent |
|
||
| read:billing | 查看计费信息 |
|
||
| export:data | 导出数据 |
|
||
|
||
**请求示例**:
|
||
|
||
```json
|
||
{
|
||
"permissions": ["use:platform_agents", "use:custom_agents", "create:agents", "read:billing", "export:data"]
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "租户权限更新成功"
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.updateTenantPermissions(tenantId, permissions)`
|
||
|
||
---
|
||
|
||
## 资源管理模块
|
||
|
||
### 14. 平台Agent模板列表 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **展示位置** | "资源管理"标签页 → "平台Agent模板"区域 |
|
||
| **接口路径** | `GET /api/channel/available-platform-agents` |
|
||
| **后端文件** | `services/mcp-server/app/routes/platform_agent_quota.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"templates": [
|
||
{
|
||
"name": "gpt-assistant",
|
||
"displayName": "GPT助手",
|
||
"description": "基于GPT的智能助手",
|
||
"status": "available",
|
||
"hasAccess": true,
|
||
"pendingApplication": false,
|
||
"cpuRequest": "100m",
|
||
"cpuLimit": "500m",
|
||
"memoryRequest": "128Mi",
|
||
"memoryLimit": "512Mi",
|
||
"podQuota": 10,
|
||
"podUsed": 2,
|
||
"podRemaining": 8
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.getAvailablePlatformAgents()`
|
||
|
||
---
|
||
|
||
### 15. 模型供应商列表 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **展示位置** | "资源管理"标签页 → "模型管理"区域 |
|
||
| **接口路径** | `GET /api/channel/providers` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"providers": [
|
||
{
|
||
"id": "provider_001",
|
||
"name": "OpenAI",
|
||
"provider": "openai",
|
||
"hasAccess": true,
|
||
"pendingApplication": false,
|
||
"supportedModels": ["gpt-4", "gpt-3.5-turbo"],
|
||
"rpm": 1000,
|
||
"tpm": 100000
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.getChannelProviders()`
|
||
|
||
---
|
||
|
||
### 16. 申请平台Agent配额 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | Agent模板卡片 → "申请使用"/"申请更多配额"按钮 |
|
||
| **接口路径** | `POST /api/channel/applications/platform-agents` |
|
||
| **后端文件** | `services/mcp-server/app/routes/platform_agent_quota.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| templateName | string | 是 | Agent模板名称 |
|
||
| requestedPodQuota | int | 是 | 申请的Pod配额数量 |
|
||
| reason | string | 是 | 申请理由 |
|
||
|
||
**请求示例**:
|
||
|
||
```json
|
||
{
|
||
"templateName": "gpt-assistant",
|
||
"requestedPodQuota": 10,
|
||
"reason": "业务扩展需要更多Agent实例"
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"applicationId": "app_001"
|
||
},
|
||
"message": "申请已提交,等待审批"
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.applyForPlatformAgent(data)`
|
||
|
||
---
|
||
|
||
### 17. 申请模型供应商使用权限 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | 模型供应商卡片 → "申请使用"按钮 |
|
||
| **接口路径** | `POST /api/channel/providers/apply` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| providerId | string | 是 | 供应商ID |
|
||
| requestedRpm | int | 否 | 申请的RPM配额 |
|
||
| requestedTpm | int | 否 | 申请的TPM配额 |
|
||
| reason | string | 是 | 申请理由 |
|
||
|
||
**请求示例**:
|
||
|
||
```json
|
||
{
|
||
"providerId": "provider_001",
|
||
"requestedRpm": 500,
|
||
"requestedTpm": 50000,
|
||
"reason": "需要使用OpenAI模型服务"
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"applicationId": "app_002"
|
||
},
|
||
"message": "申请已提交,等待审批"
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.applyForProvider(data)`
|
||
|
||
---
|
||
|
||
## 计费模块
|
||
|
||
### 18. 租户计费统计 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **展示位置** | "计费"标签页 → "租户计费统计"区域 |
|
||
| **接口路径** | `GET /api/channel/billing/stats` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**查询参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| startTime | string | 是 | 开始时间(ISO 8601格式) |
|
||
| endTime | string | 是 | 结束时间(ISO 8601格式) |
|
||
| tenantName | string | 否 | 租户名称筛选 |
|
||
| minCalls | int | 否 | 最小调用次数 |
|
||
| maxCalls | int | 否 | 最大调用次数 |
|
||
| export | string | 否 | 导出格式:excel/csv/pdf |
|
||
|
||
**请求示例**:
|
||
|
||
```
|
||
GET /api/channel/billing/stats?startTime=2026-01-01T00:00:00Z&endTime=2026-01-31T23:59:59Z
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"tenantStats": [
|
||
{
|
||
"tenantId": "tenant_001",
|
||
"tenantName": "企业A",
|
||
"calls": 1500,
|
||
"totalEU": 150.5,
|
||
"totalCost": 450.00
|
||
}
|
||
],
|
||
"callRecords": [
|
||
{
|
||
"timestamp": "2026-01-15T10:30:00Z",
|
||
"tenantName": "企业A",
|
||
"agentType": "gpt-assistant",
|
||
"duration": 120,
|
||
"eu": 12.0,
|
||
"price": 36.00
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.getChannelBillingStats(params)`
|
||
|
||
**默认范围**: 最近30天
|
||
|
||
---
|
||
|
||
### 19. 时间范围查询 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | "计费"标签页 → "时间查询"按钮 |
|
||
| **接口路径** | `GET /api/channel/billing/stats` |
|
||
| **说明** | 通过 `startTime` 和 `endTime` 参数实现 |
|
||
|
||
---
|
||
|
||
### 20. 筛选功能 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | "计费"标签页 → "筛选"按钮 |
|
||
| **接口路径** | `GET /api/channel/billing/stats` |
|
||
| **说明** | 通过查询参数实现筛选 |
|
||
|
||
**筛选条件**:
|
||
- 客户名称(tenantName)
|
||
- 最小调用次数(minCalls)
|
||
- 最大调用次数(maxCalls)
|
||
|
||
---
|
||
|
||
### 21. 数据导出 ⚠️ 部分对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | "计费"标签页 → "导出"按钮 |
|
||
| **接口路径** | `GET /api/channel/billing/stats` |
|
||
| **说明** | 通过 `export` 参数实现 |
|
||
|
||
**支持格式**:
|
||
- Excel (.xlsx)
|
||
- CSV (.csv)
|
||
- PDF (.pdf)
|
||
|
||
**待完善**: 后端需要支持生成并返回文件下载链接或文件流
|
||
|
||
---
|
||
|
||
## 设置模块
|
||
|
||
### 22. 管理员列表 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **展示位置** | "设置"标签页 → "当前管理员列表"区域 |
|
||
| **接口路径** | `GET /api/channel/admins` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"admins": [
|
||
{
|
||
"id": "admin_001",
|
||
"name": "张三",
|
||
"email": "zhangsan@example.com",
|
||
"role": "channel_admin",
|
||
"status": "active"
|
||
},
|
||
{
|
||
"id": "admin_002",
|
||
"name": "李四",
|
||
"email": "lisi@example.com",
|
||
"role": "billing_admin",
|
||
"status": "active"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.getChannelAdmins()`
|
||
|
||
---
|
||
|
||
### 23. 创建管理员 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | "设置"标签页 → "添加管理员"按钮 |
|
||
| **接口路径** | `POST /api/channel/admins/create` |
|
||
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
|
||
| **权限要求** | channel_admin |
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| name | string | 是 | 管理员姓名 |
|
||
| email | string | 是 | 登录邮箱 |
|
||
| password | string | 是 | 登录密码 |
|
||
| role | string | 是 | 角色:billing_admin/operations_admin |
|
||
|
||
**请求示例**:
|
||
|
||
```json
|
||
{
|
||
"name": "王五",
|
||
"email": "wangwu@example.com",
|
||
"password": "SecurePass123",
|
||
"role": "billing_admin"
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"admin": {
|
||
"id": "admin_003",
|
||
"name": "王五",
|
||
"email": "wangwu@example.com",
|
||
"role": "billing_admin"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.createChannelAdmin(data)`
|
||
|
||
---
|
||
|
||
### 24. 删除管理员 ✅ 已对接
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | 管理员列表 → 删除按钮 |
|
||
| **接口路径** | `DELETE /api/admin/admins/{adminId}` |
|
||
| **后端文件** | `services/mcp-server/app/routes/admin.py` |
|
||
| **权限要求** | super_admin |
|
||
|
||
**路径参数**:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| adminId | string | 管理员ID |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "管理员删除成功"
|
||
}
|
||
```
|
||
|
||
**前端调用**: `TaijiAPIClient.deleteAdmin(adminId)`
|
||
|
||
**注意**: 此接口使用的是 `/api/admin/admins/{adminId}` 路径,需要 super_admin 权限。前端需求文档中标注为已对接,但实际上渠道管理员可能无法直接调用此接口,需要确认权限配置。
|
||
|
||
---
|
||
|
||
### 25. 配置角色权限 ❌ 待开发
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **触发位置** | "设置"标签页 → 角色卡片 → "配置权限"按钮 |
|
||
| **建议接口** | `PUT /api/channel/roles/{roleId}/permissions` |
|
||
| **状态** | 后端接口不存在 |
|
||
|
||
**功能描述**: 设置不同角色可访问的功能模块
|
||
|
||
**可配置模块**:
|
||
- 概览(overview)
|
||
- 租户管理(tenants)
|
||
- 资源管理(resources)
|
||
- 计费(billing)
|
||
- 设置(settings)
|
||
|
||
**默认角色权限**:
|
||
|
||
| 角色 | 默认权限 |
|
||
|------|----------|
|
||
| 计费管理员 | overview, tenants, billing |
|
||
| 运营管理员 | overview, tenants, resources |
|
||
|
||
**当前实现**: 权限配置仅在前端状态管理
|
||
|
||
**建议请求参数**:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| permissions | array | 权限列表(如 ["overview", "tenants", "billing"]) |
|
||
|
||
**建议请求示例**:
|
||
|
||
```json
|
||
{
|
||
"permissions": ["overview", "tenants", "billing"]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 接口汇总表
|
||
|
||
### 认证相关接口
|
||
|
||
| 序号 | 接口 | 方法 | 路径 | 状态 | 说明 |
|
||
|------|------|------|------|------|------|
|
||
| 1 | 登录 | POST | `/api/auth/login` | ✅ 已对接 | 用户登录 |
|
||
| 2 | 登出 | POST | `/api/auth/logout` | ✅ 已对接 | 用户登出 |
|
||
|
||
### 仪表板相关接口
|
||
|
||
| 序号 | 接口 | 方法 | 路径 | 状态 | 说明 |
|
||
|------|------|------|------|------|------|
|
||
| 3 | 渠道统计 | GET | `/api/channel/tenants` | ⚠️ 部分对接 | 当前从租户列表计算,建议新增聚合接口 |
|
||
| 4 | 平台Agent概览 | GET | `/api/channel/available-platform-agents` | ✅ 已对接 | 可用Agent模板 |
|
||
|
||
### 租户管理相关接口
|
||
|
||
| 序号 | 接口 | 方法 | 路径 | 状态 | 说明 |
|
||
|------|------|------|------|------|------|
|
||
| 5 | 获取租户列表 | GET | `/api/channel/tenants` | ✅ 已对接 | 获取渠道下所有租户 |
|
||
| 6 | 创建租户 | POST | `/api/channel/tenants/create` | ✅ 已对接 | 创建新租户 |
|
||
| 7 | 删除租户 | DELETE | `/api/channel/tenants/{tenantId}` | ✅ 已对接 | 删除租户 |
|
||
| 8 | 分配资源 | PUT | `/api/channel/tenants/{tenantId}/resources` | ✅ 已对接 | 分配Agent和模型资源 |
|
||
| 9 | 充值 | POST | `/api/channel/tenants/{tenantId}/recharge` | ✅ 已对接 | 为租户充值 |
|
||
| 10 | 设置授信 | PUT | `/api/channel/tenants/{tenantId}/credit` | ✅ 已对接 | 设置授信额度 |
|
||
| 11 | 更新计费 | PUT | `/api/channel/tenants/{tenantId}/billing` | ✅ 已对接 | 更新计费设置 |
|
||
| 12 | 更新状态 | PUT | `/api/channel/tenants/{tenantId}/status` | ✅ 已对接 | 更新租户状态 |
|
||
| 13 | 更新权限 | PUT | `/api/channel/tenants/{tenantId}/permissions` | ✅ 已对接 | 更新租户权限 |
|
||
|
||
### 资源管理相关接口
|
||
|
||
| 序号 | 接口 | 方法 | 路径 | 状态 | 说明 |
|
||
|------|------|------|------|------|------|
|
||
| 14 | 获取平台Agent | GET | `/api/channel/available-platform-agents` | ✅ 已对接 | 获取可用Agent模板 |
|
||
| 15 | 获取供应商列表 | GET | `/api/channel/providers` | ✅ 已对接 | 获取可用模型供应商 |
|
||
| 16 | 申请Agent配额 | POST | `/api/channel/applications/platform-agents` | ✅ 已对接 | 申请Agent配额 |
|
||
| 17 | 申请供应商 | POST | `/api/channel/providers/apply` | ✅ 已对接 | 申请使用供应商 |
|
||
|
||
### 计费统计相关接口
|
||
|
||
| 序号 | 接口 | 方法 | 路径 | 状态 | 说明 |
|
||
|------|------|------|------|------|------|
|
||
| 18 | 获取计费统计 | GET | `/api/channel/billing/stats` | ✅ 已对接 | 获取租户计费统计 |
|
||
| 19 | 时间范围查询 | GET | `/api/channel/billing/stats` | ✅ 已对接 | 通过参数实现 |
|
||
| 20 | 筛选功能 | GET | `/api/channel/billing/stats` | ✅ 已对接 | 通过参数实现 |
|
||
| 21 | 数据导出 | GET | `/api/channel/billing/stats` | ⚠️ 部分对接 | 需要后端支持文件生成 |
|
||
|
||
### 管理员管理相关接口
|
||
|
||
| 序号 | 接口 | 方法 | 路径 | 状态 | 说明 |
|
||
|------|------|------|------|------|------|
|
||
| 22 | 获取管理员列表 | GET | `/api/channel/admins` | ✅ 已对接 | 获取渠道管理员 |
|
||
| 23 | 创建管理员 | POST | `/api/channel/admins/create` | ✅ 已对接 | 创建管理员 |
|
||
| 24 | 删除管理员 | DELETE | `/api/admin/admins/{adminId}` | ✅ 已对接 | 删除管理员(需super_admin权限) |
|
||
| 25 | 配置角色权限 | PUT | `/api/channel/roles/{roleId}/permissions` | ❌ 待开发 | 配置角色权限 |
|
||
|
||
---
|
||
|
||
## 待完善功能清单
|
||
|
||
### 高优先级
|
||
|
||
| 序号 | 需求 | 说明 | 建议接口 |
|
||
|------|------|------|----------|
|
||
| 1 | 渠道仪表板统计 | 需要专门的聚合接口返回月度收入、佣金等统计数据 | `GET /api/channel/dashboard/stats` |
|
||
| 2 | 数据导出功能 | 计费数据导出需要后端支持生成Excel/CSV/PDF文件 | 修改 `/api/channel/billing/stats` 支持文件流返回 |
|
||
|
||
### 中优先级
|
||
|
||
| 序号 | 需求 | 说明 | 建议接口 |
|
||
|------|------|------|----------|
|
||
| 3 | 角色权限配置 | 当前权限配置仅在前端状态管理,需要后端接口持久化 | `PUT /api/channel/roles/{roleId}/permissions` |
|
||
| 4 | 权限验证 | 后端需要根据角色权限控制API访问 | 中间件实现 |
|
||
|
||
### 低优先级
|
||
|
||
| 序号 | 需求 | 说明 | 建议接口 |
|
||
|------|------|------|----------|
|
||
| 5 | 删除管理员权限调整 | 当前使用admin接口,建议增加channel专用接口 | `DELETE /api/channel/admins/{adminId}` |
|
||
|
||
---
|
||
|
||
## 后端接口与前端需求对照表
|
||
|
||
以下是后端 [`channel.py`](services/mcp-server/app/routes/channel.py) 中已实现的所有接口与前端需求的对照:
|
||
|
||
| 后端接口 | 前端是否使用 | 说明 |
|
||
|----------|--------------|------|
|
||
| `GET /api/channel/tenants` | ✅ 使用 | 租户列表 |
|
||
| `POST /api/channel/tenants/create` | ✅ 使用 | 创建租户 |
|
||
| `PUT /api/channel/tenants/{tenant_id}/resources` | ✅ 使用 | 分配资源 |
|
||
| `PUT /api/channel/tenants/{tenant_id}/billing` | ✅ 使用 | 管理计费 |
|
||
| `POST /api/channel/tenants/{tenant_id}/recharge` | ✅ 使用 | 租户充值 |
|
||
| `PUT /api/channel/tenants/{tenant_id}/credit` | ✅ 使用 | 设置授信 |
|
||
| `DELETE /api/channel/tenants/{tenant_id}` | ✅ 使用 | 删除租户 |
|
||
| `PUT /api/channel/tenants/{tenant_id}/status` | ✅ 使用 | 更新状态 |
|
||
| `PUT /api/channel/tenants/{tenant_id}/permissions` | ✅ 使用 | 更新权限 |
|
||
| `PUT /api/channel/tenants/{tenant_id}/password` | ❓ 未明确 | 重置密码(前端需求未提及) |
|
||
| `GET /api/channel/tenants/{tenant_id}/custom-agent-quota` | ❓ 未明确 | 获取自定义Agent配额 |
|
||
| `POST /api/channel/admins/create` | ✅ 使用 | 创建管理员 |
|
||
| `GET /api/channel/admins` | ✅ 使用 | 管理员列表 |
|
||
| `POST /api/channel/resources/apply` | ❓ 未明确 | 申请资源(前端可能使用其他接口) |
|
||
| `GET /api/channel/billing/stats` | ✅ 使用 | 计费统计 |
|
||
| `GET /api/channel/providers` | ✅ 使用 | 供应商列表 |
|
||
| `POST /api/channel/providers/apply` | ✅ 使用 | 申请供应商 |
|
||
| `GET /api/channel/providers/applications` | ✅ 使用 | 供应商申请列表 |
|
||
| `GET /api/channel/providers/access` | ❓ 未明确 | 已授权供应商列表 |
|
||
| `GET /api/channel/available-platform-agents` | ✅ 使用 | 平台Agent模板 |
|
||
| `POST /api/channel/applications/platform-agents` | ✅ 使用 | 申请Agent配额 |
|
||
| `GET /api/channel/applications/platform-agents` | ✅ 使用 | Agent申请列表 |
|
||
| `GET /api/channel/platform-agents` | ❓ 未明确 | 渠道Agent配额 |
|
||
| `POST /api/channel/tenants/{tenant_id}/platform-agents` | ❓ 未明确 | 分配Agent给租户 |
|
||
| `GET /api/channel/tenants/{tenant_id}/platform-agents/usage` | ❓ 未明确 | 租户Agent使用情况 |
|
||
| `GET /api/channel/agent-billing/stats` | ❓ 未明确 | Agent计费统计 |
|
||
| `GET /api/channel/agent-billing/history` | ❓ 未明确 | Agent计费历史 |
|
||
| `GET /api/channel/agent-billing/tenant-summary` | ❓ 未明确 | 租户Agent计费汇总 |
|
||
|
||
---
|
||
|
||
## 数据模型参考
|
||
|
||
### 租户数据结构
|
||
|
||
```typescript
|
||
interface Tenant {
|
||
id: string
|
||
name: string
|
||
email: string
|
||
status: "active" | "suspended" | "inactive"
|
||
plan: "enterprise" | "pro" | "starter" | "free"
|
||
users: number
|
||
revenue: string // 如 "$3,200"
|
||
balance?: string
|
||
creditLimit?: string
|
||
createdAt?: string
|
||
}
|
||
```
|
||
|
||
### Agent资源数据结构
|
||
|
||
```typescript
|
||
interface AgentResource {
|
||
id: string
|
||
name: string
|
||
displayName?: string
|
||
description?: string
|
||
status: "available" | "unavailable" | "Running" | "Pending"
|
||
hasAccess: boolean
|
||
pendingApplication?: boolean
|
||
cpuRequest?: string // K8s格式,如 "100m"
|
||
cpuLimit?: string // K8s格式,如 "500m"
|
||
memoryRequest?: string // K8s格式,如 "128Mi"
|
||
memoryLimit?: string // K8s格式,如 "512Mi"
|
||
podQuota?: number
|
||
podUsed?: number
|
||
podRemaining?: number
|
||
}
|
||
```
|
||
|
||
### 模型供应商数据结构
|
||
|
||
```typescript
|
||
interface ModelProvider {
|
||
id: string
|
||
name: string
|
||
provider?: string // openai, anthropic等
|
||
type?: string
|
||
hasAccess: boolean
|
||
pendingApplication?: boolean
|
||
supportedModels?: string[]
|
||
rpm: number
|
||
tpm: number
|
||
}
|
||
```
|
||
|
||
### 计费统计数据结构
|
||
|
||
```typescript
|
||
interface BillingStats {
|
||
tenantStats: Array<{
|
||
tenantId: string
|
||
tenantName: string
|
||
calls: number
|
||
totalEU: number
|
||
totalCost: number
|
||
}>
|
||
callRecords: Array<{
|
||
timestamp: string
|
||
tenantName: string
|
||
agentType: string
|
||
duration: number // 秒
|
||
eu: number
|
||
price: number
|
||
}>
|
||
}
|
||
```
|
||
|
||
### 管理员数据结构
|
||
|
||
```typescript
|
||
interface ChannelAdmin {
|
||
id: string
|
||
name: string
|
||
email: string
|
||
role: "channel_admin" | "billing_admin" | "operations_admin"
|
||
status?: "active" | "inactive"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 错误码说明
|
||
|
||
| 错误码 | HTTP状态码 | 说明 |
|
||
|--------|------------|------|
|
||
| AUTH_FAILED | 401 | 认证失败 |
|
||
| TOKEN_EXPIRED | 401 | Token已过期 |
|
||
| PERMISSION_DENIED | 403 | 权限不足 |
|
||
| NOT_FOUND | 404 | 资源不存在 |
|
||
| VALIDATION_ERROR | 400 | 参数验证失败 |
|
||
| QUOTA_EXCEEDED | 400 | 配额超限 |
|
||
| DUPLICATE_ENTRY | 409 | 重复数据 |
|
||
| INTERNAL_ERROR | 500 | 服务器内部错误 |
|
||
|
||
---
|
||
|
||
## 前端源文件参考
|
||
|
||
| 文件路径 | 说明 |
|
||
|----------|------|
|
||
| `app/channel/dashboard/page.tsx` | 渠道仪表板主页面 |
|
||
| `app/channel/login/page.tsx` | 渠道登录页面 |
|
||
| `app/channel/layout.tsx` | 渠道布局组件 |
|
||
| `lib/api-client.ts` | API客户端封装 |
|
||
|
||
---
|
||
|
||
## 后端源文件参考
|
||
|
||
| 文件路径 | 说明 |
|
||
|----------|------|
|
||
| [`services/mcp-server/app/routes/auth.py`](services/mcp-server/app/routes/auth.py) | 认证模块 |
|
||
| [`services/mcp-server/app/routes/channel.py`](services/mcp-server/app/routes/channel.py) | 渠道合作伙伴API |
|
||
| [`services/mcp-server/app/routes/platform_agent_quota.py`](services/mcp-server/app/routes/platform_agent_quota.py) | 平台Agent配额管理 |
|
||
| [`services/mcp-server/app/routes/admin.py`](services/mcp-server/app/routes/admin.py) | 超级管理员API |
|
||
|
||
---
|
||
|
||
*文档生成时间: 2026-01-06*
|
||
*基于前端需求清单 v1.2.0 与后端API清单核实* |