fix: 修复最近登录租户功能的数据加载逻辑

- 优化数据加载逻辑,优先使用 data.recentTenants 字段
- 兼容 data.tenants 字段(向后兼容)
- 支持直接数组格式
- 移除调试日志,保持代码整洁

测试验证:后端API返回正确的租户登录记录
This commit is contained in:
xiaohei
2026-01-04 05:24:27 +00:00
parent 8279de706f
commit e4ee876f57
3 changed files with 514 additions and 26 deletions
+6 -26
View File
@@ -627,8 +627,12 @@ export default function AdminDashboard() {
// 加载最近登录的租户列表
try {
const recentLoginsData = await TaijiAPIClient.getRecentLogins(10)
if (recentLoginsData?.success && recentLoginsData.data?.recentTenants) {
if (recentLoginsData?.success && recentLoginsData.data?.recentTenants && Array.isArray(recentLoginsData.data.recentTenants)) {
setRecentLogins(recentLoginsData.data.recentTenants)
} else if (recentLoginsData?.success && recentLoginsData.data?.tenants && Array.isArray(recentLoginsData.data.tenants)) {
// 兼容:后端返回的字段是 tenants 而不是 recentTenants
setRecentLogins(recentLoginsData.data.tenants)
} else if (Array.isArray(recentLoginsData?.data)) {
setRecentLogins(recentLoginsData.data)
} else {
@@ -1483,24 +1487,6 @@ export default function AdminDashboard() {
{tenant.email} · {tenant.channelName || (language === "zh" ? "直属" : "Direct")}
</p>
</div>
<div className="text-right">
<div className="flex items-center gap-2 mb-1">
<Clock className="h-3 w-3 text-muted-foreground" />
<span className="text-sm text-muted-foreground">
{language === "zh" ? "最后登录" : "Last Login"}
</span>
</div>
<p className="text-xs text-foreground font-medium">
{tenant.lastLoginAt
? new Date(tenant.lastLoginAt).toLocaleString(language === "zh" ? "zh-CN" : "en-US", {
month: "short",
day: "numeric",
hour: "2-digit",
minute: "2-digit"
})
: (language === "zh" ? "从未登录" : "Never")}
</p>
</div>
</div>
<div className="ml-4">
@@ -2238,7 +2224,7 @@ export default function AdminDashboard() {
<h4 className="text-base font-semibold text-foreground mb-4">
{language === "zh" ? "资源配置" : "Resource Configuration"}
</h4>
<div className="grid grid-cols-3 gap-4">
<div className="grid grid-cols-2 gap-4">
<div className="bg-muted/50 rounded-lg p-4 text-center">
<p className="text-3xl font-bold text-primary mb-2">{selectedChannel?.cpuCores || 0}</p>
<p className="text-sm text-muted-foreground">
@@ -2251,12 +2237,6 @@ export default function AdminDashboard() {
{language === "zh" ? "内存" : "Memory"}
</p>
</div>
<div className="bg-muted/50 rounded-lg p-4 text-center">
<p className="text-3xl font-bold text-primary mb-2">{selectedChannel?.storage || "0GB"}</p>
<p className="text-sm text-muted-foreground">
{language === "zh" ? "存储空间" : "Storage"}
</p>
</div>
</div>
</div>
@@ -0,0 +1,266 @@
# 管理平台(Super Admin Console)业务功能规范
> 本文档描述管理平台的业务功能要求,用于后端设计核对和功能完善。
## 1. 业务概述
管理平台是面向**超级管理员**的多租户SaaS平台管理控制台,主要业务目标:
- 管理分销渠道的准入、配额与资源分配
- 监控平台整体运营健康状况
- 提供精细化的计费管理与财务分析
- 维护平台的核心资源(AI模型、Agent、计算资源)
- 处理渠道与租户的业务审批流程
## 2. 核心业务实体
### 2.1 渠道(Channel)
- **定义**:分销商/合作伙伴,拥有独立的租户组合管理权限
- **核心属性**:渠道名称、联系信息、佣金比例、授信额度、状态
- **业务关系**:一个渠道可管理多个租户
### 2.2 租户(Tenant)
- **定义**:最终用户,通过渠道获得平台服务
- **核心属性**:租户名称、归属渠道、权限范围、使用配额、计费信息
- **业务关系**:归属于特定渠道,使用渠道分配的资源
### 2.3 Agent
- **定义**:AI智能体实例,提供具体的AI服务能力
- **核心属性**:类型、计算资源配置(CPU/内存)、健康状态、性能指标
- **业务关系**:可被分配给渠道,再由渠道分配给租户使用
### 2.4 模型供应商(Provider)
- **定义**:上游AI模型服务提供商
- **核心属性**:供应商名称、API配置、支持模型、调用限制(RPM/TPM)
- **业务关系**:可授权给特定渠道使用
## 3. 业务功能模块
### 3.1 平台概览与监控
#### 3.1.1 运营概览
**业务需求**:提供平台整体运营状况的实时概览
- 统计数据:渠道总数、租户总数、总收入
- 系统资源:CPU/内存/磁盘使用率、活跃Agent数量
- 租户动态:最新注册/活跃租户列表,支持搜索和快速操作
**后端要求**:
- 提供实时/准实时的汇总统计接口
- 支持系统资源监控数据采集
- 租户列表支持分页、搜索、状态筛选
#### 3.1.2 资源分配概览
**业务需求**:展示平台计算资源的分配使用情况
- 展示总体CPU/内存分配情况
- Agent资源分配统计
- 资源利用率分析
**后端要求**:
- 实时计算资源分配统计
- 支持按Agent类型、渠道等维度聚合
### 3.2 渠道管理
#### 3.2.1 渠道生命周期管理
**业务需求**:管理渠道从准入到运营的完整生命周期
- 渠道注册:创建渠道账户,设置基本信息和佣金政策
- 渠道状态管理:激活、暂停、禁用等状态转换
- 渠道信息维护:联系信息、佣金比例等基础数据管理
**后端要求**:
- 渠道基础信息CRUD
- 渠道状态流转控制
- 渠道唯一性约束(名称、邮箱等)
#### 3.2.2 渠道资源分配
**业务需求**:为渠道分配可用的平台资源
- 模型供应商授权:控制渠道可使用哪些AI模型
- Agent配额分配:设定渠道可分配给租户的Agent数量和类型
- 计算资源配置:设定自定义Agent的默认CPU/内存配置
- 授信管理:设置渠道的信用额度上限
**后端要求**:
- 资源分配关系管理(多对多关系)
- 配额检查和使用量统计
- 支持资源池管理和动态调整
#### 3.2.3 渠道租户管理
**业务需求**:支持渠道对其下属租户的管理
- 租户创建:渠道为最终用户创建租户账户
- 权限分配:为租户设置功能权限(仪表板、Agent管理、模型配置等)
- 租户状态管理:激活、禁用、删除等操作
- 密码管理:支持租户密码重置
**后端要求**:
- 租户归属关系维护
- 细粒度权限控制系统
- 租户状态流转日志
- 密码安全管理
### 3.3 审批流程管理
#### 3.3.1 供应商接入审批
**业务需求**:管理渠道申请使用新供应商的审批流程
- 申请提交:渠道提交供应商使用申请
- 申请审核:超管审批渠道的供应商接入请求
- 授权管理:批准后建立渠道-供应商授权关系
**后端要求**:
- 审批工作流引擎
- 申请状态跟踪
- 审批历史记录
- 授权关系自动建立
#### 3.3.2 Agent资源审批
**业务需求**:管理渠道申请额外Agent资源的审批流程
- 资源申请:渠道申请特定类型和数量的Agent
- 需求评估:超管评估申请的合理性
- 资源分配:批准后自动分配Agent资源
**后端要求**:
- 申请模板和流程定义
- 资源可用性检查
- 自动资源分配机制
### 3.4 资源管理
#### 3.4.1 Agent计算资源管理
**业务需求**:管理Agent实例的计算资源配置
- Agent资源配置:为每个Agent设置CPU、内存、实例数
- 资源利用监控:实时监控Agent资源使用情况
- 弹性伸缩:根据负载动态调整Agent实例数
**后端要求**:
- Agent实例管理
- 资源配置持久化
- 实时监控数据采集
- 自动伸缩策略支持
#### 3.4.2 供应商管理
**业务需求**:管理上游AI模型供应商的接入和配置
- 供应商注册:添加新的模型供应商
- 连接配置:设置API端点、密钥、调用限制等
- 健康检查:监控供应商服务可用性和延迟
- 供应商下线:安全移除不再使用的供应商
**后端要求**:
- 供应商配置管理
- API连接池管理
- 健康检查调度
- 依赖关系检查(删除前)
### 3.5 监控告警
#### 3.5.1 Agent健康监控
**业务需求**:实时监控所有Agent实例的健康状态
- 健康状态评估:基于CPU、内存、响应时间等指标评估Agent健康度
- 性能监控:监控响应时间、请求量、错误率等关键指标
- 异常告警:当Agent出现异常时及时告警
**后端要求**:
- Agent指标采集系统
- 健康度评估算法
- 实时告警机制
- 监控数据存储和查询
### 3.6 计费管理
#### 3.6.1 多维度计费统计
**业务需求**:提供多个维度的计费数据统计和分析
- 渠道维度:按渠道统计调用量、消费金额、EU使用量
- 租户维度:按租户统计使用量和费用,支持跨渠道分析
- 调用明细:详细的API调用记录,包含时长、费用、时间戳等
**后端要求**:
- 实时计费数据统计
- 多维度数据聚合
- 计费规则引擎(EU到费用的转换)
- 大数据量查询优化
#### 3.6.2 财务分析与导出
**业务需求**:支持财务数据的分析和导出
- 时间范围查询:支持自定义时间段的计费查询
- 数据筛选:按客户名称、调用次数等条件筛选
- 多格式导出:支持Excel、CSV、PDF等格式的数据导出
**后端要求**:
- 灵活的查询接口设计
- 异步导出任务处理
- 文件生成和下载服务
- 数据权限控制
### 3.7 权限与用户管理
#### 3.7.1 管理员账户管理
**业务需求**:管理平台的各类管理员账户
- 系统管理员:管理计费管理员、运营管理员等
- 渠道管理员:查看各渠道的管理员信息
- 角色权限:为不同角色配置可访问的功能模块
**后端要求**:
- 分层级的用户管理体系
- 基于角色的访问控制(RBAC)
- 管理员操作审计日志
- 密码安全策略
#### 3.7.2 角色权限配置
**业务需求**:灵活配置不同角色的系统权限
- 权限模板:预定义的角色权限模板
- 自定义权限:支持为特定角色定制权限范围
- 权限继承:支持权限的层级继承关系
**后端要求**:
- 细粒度权限控制系统
- 权限配置的持久化存储
- 实时权限生效机制
- 权限变更历史记录
## 4. 数据要求
### 4.1 实时性要求
- **高实时性**(秒级):系统监控数据、Agent健康状态
- **准实时**(分钟级):运营统计数据、资源使用情况
- **批处理**(小时/日级):计费统计、财务报表
### 4.2 数据一致性要求
- **强一致性**:计费数据、资源分配、权限管理
- **最终一致性**:监控数据、统计数据
- **幂等性**:所有状态变更操作需支持幂等
### 4.3 数据存储要求
- **冷热分离**:近期数据热存储,历史数据归档
- **备份恢复**:关键业务数据需要定期备份
- **审计追踪**:重要操作需要完整的审计日志
## 5. 安全要求
### 5.1 身份认证
- 支持多种认证方式(用户名密码、Token等)
- 会话管理和超时控制
- 多设备登录控制
### 5.2 操作授权
- 基于角色的细粒度权限控制
- 资源级别的访问控制
- 操作审计和日志记录
### 5.3 数据安全
- 敏感数据加密存储
- API调用加密传输
- 数据脱敏和隐私保护
## 6. 性能要求
### 6.1 响应时间
- 页面加载时间 < 2秒
- 查询接口响应 < 500ms
- 统计数据接口 < 1秒
### 6.2 并发处理
- 支持100+管理员并发访问
- 支持1000+渠道数据管理
- 支持10000+租户数据查询
### 6.3 数据处理能力
- 支持TB级别的计费数据查询
- 支持千万级别的调用记录检索
- 支持实时流式数据处理
+242
View File
@@ -0,0 +1,242 @@
# 管理平台(Super Admin Console)功能盘点
页面地址:`/admin/dashboard`
对应实现:`app/admin/dashboard/page.tsx`
> 本文仅整理“前端实际展示的功能与交互”。部分按钮/表单在当前实现中可能仅有 UI(例如某些“保存/查询”只打印日志或未真正发起请求),文中会标注。
## 0. 全局/通用能力
- 登录态校验与跳转:页面加载时检查 `localStorage.admin_token`,没有则跳转到 `/admin/login`。
- 语言切换:右上角语言选择(中/英),影响页面文案。
- 退出登录:调用 `TaijiAPIClient.logout()`,并清理本地 token(`admin_token/auth_token/channel_token/refresh_token` 等),跳转到 `/admin/login`。
- 顶部导航 Tab:共 6 个(概览 / 渠道 / 资源 / 监控 / 计费 / 设置)。
## 1. 概览(Overview)
### 1.1 平台关键统计卡片
- 展示内容:
- 渠道总数(Total Channels)
- 租户总数(Total Tenants)
- 总收入(Total Revenue)
- 作用:快速了解平台规模与收入概况。
- 数据来源:`TaijiAPIClient.getAdminDashboardStats()`。
### 1.2 系统指标(System Metrics)
- 展示内容:CPU 使用率、内存使用率、磁盘使用率、活跃 Agents(以进度条展示)。
- 作用:查看平台整体资源压力与服务活跃度。
- 数据来源:`TaijiAPIClient.getMonitoringMetrics()`。
### 1.3 最近租户列表(Recent Tenants)
- 展示内容:租户卡片列表(名称、套餐/Plan、月收入、Usage%、状态),每行支持“更多”菜单(查看详情 / 编辑 / 暂停)。
- 作用:快速查看租户概况与后续管理入口。
- 备注:
- 列表顶部的搜索框目前仅为 UI(未见实际筛选逻辑)。
- “更多菜单”选项目前未绑定具体后端动作(看起来是占位)。
- 数据来源:`TaijiAPIClient.getAdminTenants()`。
### 1.4 平台资源分配统计(CPU/Memory)
- 展示内容:汇总已分配 CPU 核数、已分配内存(GB),以及 Agent 数量/平均值。
- 作用:从平台维度快速评估 Agent 资源分配情况。
- 计算方式:由 `agentResources` 列表累加得到。
- 数据来源:`TaijiAPIClient.getAdminAgentResources()`。
## 2. 渠道(Channels)
### 2.1 渠道列表与状态概览
- 展示内容:渠道卡片列表(渠道名、状态、联系人/邮箱、租户数、月收入、佣金比例)。
- 作用:查看渠道基本盘与关键经营指标。
- 备注:列表顶部“搜索渠道”输入框目前仅为 UI(未见实际筛选逻辑)。
- 数据来源:`TaijiAPIClient.getAdminChannels()`。
### 2.2 添加渠道
- 入口:右上角“添加渠道”按钮。
- 表单字段:渠道名称、联系邮箱、密码、佣金比例。
- 作用:创建新的渠道账户。
- 数据来源/接口:`TaijiAPIClient.createAdminChannel(...)`;成功后会 `loadDashboardData()` 刷新列表。
### 2.3 渠道操作菜单(每个渠道卡片右侧)
#### 2.3.1 查看渠道详情
- 入口:菜单“查看详情”。
- 展示内容:
- 基本信息:名称、状态、邮箱、创建日期等
- 资源配置:CPU/内存/存储(展示)
- 配额信息:租户总数、授信额度、已用授信、剩余授信(展示)
- 作用:在一个弹窗中快速查看渠道经营/资源/授信摘要。
#### 2.3.2 编辑渠道信息
- 入口:菜单“编辑”。
- 功能:
- 编辑渠道基本信息(名称、联系人、邮箱、电话)。
- 管理渠道管理员列表(展示管理员并支持删除)。
- 作用:维护渠道档案与其管理员账号。
- 数据来源/接口:
- 保存渠道信息:通过 `handleSaveChannelEdit`(内部使用 `fetch` 调用后端,见 `page.tsx` 中相关实现)。
- 删除管理员:`handleRemoveAdmin(admin.id)`(内部 `fetch`/API 调用,见实现)。
#### 2.3.3 查看租户(渠道租户管理)
- 入口:菜单“查看租户”。
- 展示内容:渠道下租户列表(含权限 tags、状态、创建时间等)。
- 支持动作:
- 添加租户(打开“添加新租户”对话框)
- 管理权限(多选权限项并保存)
- 修改密码
- 禁用租户
- 删除租户
- 作用:以渠道为维度管理其租户账户生命周期与授权。
- 数据来源/接口(按功能):
- 加载渠道租户:`fetch(`${API_BASE_URLS.mcpServer}/api/channel/tenants`, ...)` 等(具体见实现)。
- 创建租户:`TaijiAPIClient.createChannelTenant(...)`(或相关 API)。
- 修改租户权限:`fetch(.../api/channel/tenants/{tenantId}/permissions)`。
- 修改租户密码:`TaijiAPIClient.changeTenantPassword(tenantId, newPassword)`。
- 禁用租户:`fetch(.../api/channel/tenants/{tenantId}/status)`。
- 删除租户:对应 `handleDeleteTenant` 内的 API 调用(见实现)。
#### 2.3.4 修改佣金
- 入口:菜单“修改佣金”。
- 作用:为渠道设置佣金比例(UI 提供输入与保存)。
- 备注:当前 `handleSaveCommission()` 实际调用的是 `TaijiAPIClient.manageChannelResources(...{ channelCredit })`,看起来并未真正提交 `commissionRate`,可能是后端字段对齐/实现未完成导致的占位。
#### 2.3.5 管理授权(供应商访问权限)
- 入口:菜单“管理授权”。
- 展示内容:该渠道已获得的供应商授权列表(供应商名、类型、RPM/TPM、授权时间、状态)。
- 支持动作:撤销授权(对 active 状态)。
- 作用:控制渠道可以使用哪些上游供应商(模型/服务)的能力。
- 数据来源/接口:
- 查询授权:`TaijiAPIClient.getChannelProviderAccess({ channelId })`
- 撤销授权:`TaijiAPIClient.revokeChannelProviderAccess(access.id)`
#### 2.3.6 资源管理(渠道维度:模型/Agent/授信/自定义Agent默认资源)
- 入口:菜单“资源管理”。
- 功能点:
- 选择该渠道可用的模型供应商(checkbox 列表)
- 选择该渠道可分配给租户的 Agent,并设置数量(Quantity)
- 设置“自定义 Agent”默认 CPU/内存
- 设置渠道授信额度(Credit Limit)
- “资源配置摘要”汇总展示
- 作用:按渠道维度进行配额与可用资源的能力封装。
- 数据来源/接口:
- 读取当前渠道资源:`fetch(`${API_BASE_URLS.mcpServer}/api/admin/channels/${channel.id}/resources`, ...)`
- 保存:`TaijiAPIClient.manageChannelResources(channelId, payload)`(由 `handleSaveResourceManagement` 执行)。
### 2.4 渠道申请审批
#### 2.4.1 供应商申请审批(Provider Application Approvals)
- 展示内容:渠道对供应商/模型的申请列表(渠道、供应商、期望模型、提交时间、状态)。
- 支持动作:审批(打开详情弹窗),可“批准/拒绝”。
- 作用:平台侧把控渠道接入上游供应商的门槛。
- 数据来源/接口:
- 加载申请:`TaijiAPIClient.getAdminApplications()` 并按 `type === "provider"` 过滤
- 审批:`TaijiAPIClient.reviewApplication(applicationId, approved, reason)`
#### 2.4.2 Agent 申请审批(Agent Application Approvals)
- 展示内容:渠道对 Agent 数量/类型的申请列表。
- 支持动作:审批(打开详情弹窗),可“批准/拒绝”。
- 作用:平台侧控制 Agent 资源发放。
- 数据来源/接口:同上(`getAdminApplications()` 过滤 `type === "agent"`,审批用 `reviewApplication`)。
## 3. 资源(Resources)
> 该 Tab 聚焦于平台资源本身(Agent 资源、供应商资源),而不是“渠道维度的资源分配”。
### 3.1 Agent 计算资源分配(Agent Compute Resource Allocation)
- 展示内容:Agent 资源卡片列表(名称、状态、CPU/内存、CPU/内存使用率)。
- 支持动作:
- 配置:打开“Agent资源配置”弹窗(CPU/内存/可用实例数)
- 删除:删除该 Agent 资源
- 作用:平台侧维护每个 Agent 的计算资源配置(以及可用实例数的设定入口)。
- 备注:
- “保存配置”按钮当前仅关闭弹窗,未见实际调用后端保存(可能是 UI 占位)。
- 数据来源/接口:
- 加载:`TaijiAPIClient.getAdminAgentResources()`
- 删除:`TaijiAPIClient.deleteAgentResource(agent.id)`
### 3.2 货源供应商管理(Goods Source / Model Providers)
- 展示内容:模型供应商卡片列表(状态、支持模型数量、RPM/TPM)。
- 支持动作:
- 添加模型供应商(打开新增弹窗)
- 配置(编辑供应商信息)
- 测试延迟(连接测试)
- 删除供应商
- 作用:平台侧管理上游模型供应商的接入信息、配额与健康检查。
- 数据来源/接口:
- 列表:优先 `TaijiAPIClient.getModelProviders()`;失败则使用 `TaijiAPIClient.getAdminModelProviders()` 的结果兜底。
- 新增:`TaijiAPIClient.createModelProvider(...)`(由 `handleSaveProvider` 在“新增”路径触发)
- 更新:`TaijiAPIClient.updateProvider(providerId, payload)`(由 `handleSaveProvider` 在“编辑”路径触发)
- 连接测试:`TaijiAPIClient.testProviderConnection(providerId)`
- 删除:`TaijiAPIClient.deleteProvider(providerId)`
## 4. 监控(Monitoring)
### 4.1 Agent 健康监控(Agent Health Monitoring)
- 展示内容:Agent 健康卡片(健康/警告/严重)、CPU/内存使用率进度条、响应时间、请求数、错误率、运行时长、最后活跃时间。
- 作用:快速定位异常 Agent 与性能风险。
- 数据来源/接口:`TaijiAPIClient.getAdminAgentMonitoring()`。
## 5. 计费(Billing)
### 5.1 顶部操作:时间查询 / 筛选 / 导出
- 时间查询:弹窗输入起止时间(datetime-local),点击“查询”。
- 备注:当前仅 UI,未见与后端联动的查询逻辑。
- 筛选:弹窗输入客户名、最小/最大调用次数。
- 备注:当前仅 UI,未见实际筛选逻辑。
- 导出:点击后自动以“最近 30 天”为时间范围,调用导出接口并打开下载链接。
- 接口:`TaijiAPIClient.getAdminBillingOverview({ startTime, endTime, export: "excel" })`
- 行为:若返回 `fileUrl`,则 `window.open(fileUrl)`。
### 5.2 计费维度切换
- 维度:渠道维度 / 租户维度 / 调用记录。
- 作用:从不同管理视角查看平台计费消耗。
### 5.3 渠道维度计费(Channel Dimension)
- 展示内容:
- 汇总卡片:渠道总数、总计费额、总 EU 消耗
- 明细表:每渠道的调用次数、总 EU、渠道总价
- 作用:评估各渠道的计费贡献与资源消耗。
- 数据来源:`billingData.channelStats`(由页面内部计费加载逻辑填充;导出接口也会返回相关数据/文件)。
### 5.4 租户维度计费(Tenant Dimension)
- 展示内容:
- 汇总卡片:租户总数、用户总价、平均消费
- 明细表:每租户的渠道归属、调用次数、总 EU、用户总价
- 作用:评估租户级别成本与消费结构。
- 数据来源:`billingData.tenantStats`。
### 5.5 调用记录(Call Records)
- 展示内容:调用记录明细表(调用ID/租户/渠道/时长/EU/价格/时间戳等)。
- 作用:提供更细粒度的计费审计视角。
- 备注:当前表格使用的是前端静态示例数据(并非后端真实数据)。
## 6. 设置(Settings)
### 6.1 管理员列表管理(SettingsTab 组件)
- 展示内容:
- 系统管理员管理:管理员列表(姓名/邮箱/角色/状态/创建时间),支持创建管理员、删除管理员。
- 渠道管理员查看:按渠道分组展示渠道管理员列表(可折叠展开)。
- 作用:统一维护平台管理员与渠道管理员信息。
- 数据来源/接口(见 `app/admin/dashboard/components/SettingsTab.tsx`):
- 获取管理员列表:`TaijiAPIClient.getAdmins()`
- 创建管理员:`TaijiAPIClient.createAdmin(...)`(在组件内实现)
- 删除管理员:`TaijiAPIClient.deleteAdmin(adminId)`(在组件内实现)
- 获取渠道列表:`TaijiAPIClient.getAdminChannels()`
- 获取每个渠道管理员:`fetch(`${API_BASE_URLS.mcpServer}/api/admin/channels/${channelId}/admins`)`
### 6.2 角色权限配置(Role Permission Configuration)
- 展示内容:三种角色卡片(计费管理员/运营管理员/超级管理员),选择角色后可在下方勾选可访问的 Tab(概览/渠道/资源/监控/计费/供应商后台/渠道后台/设置)。
- 作用:提供“角色 → 可访问标签页” 的配置入口,用于权限治理。
- 备注:当前“保存权限配置”仅 `console.log`,未见持久化到后端。
---
## 附:页面加载的数据清单(loadDashboardData)
页面首次加载会并行/串行拉取以下数据,并填充到对应 Tab:
- 统计:`getAdminDashboardStats()` → 概览统计卡片
- 系统指标:`getMonitoringMetrics()` → 概览系统指标
- 渠道:`getAdminChannels()` → 渠道 Tab
- 申请:`getAdminApplications()` → 渠道 Tab(供应商/Agent 审批列表)
- Agent 监控:`getAdminAgentMonitoring()` → 监控 Tab
- 模型供应商:`getAdminModelProviders()` + `getModelProviders()` → 资源 Tab + 渠道资源管理弹窗
- Agent 资源:`getAdminAgentResources()` → 资源 Tab + 概览资源统计 + 渠道资源管理弹窗
- 租户:`getAdminTenants()` → 概览最近租户列表