refactor: 统一 API 格式显示函数,补全 Usage/Trace 的 provider 链路信息

- 提取 formatApiFormat 为共享工具函数,替换各组件中分散的 API_FORMAT_LABELS 调用
- Trace API 返回密钥认证类型(key_auth_type)和 OAuth 套餐信息(key_oauth_plan_type)
- 请求时间线展示密钥认证方式标签(OAuth/Vertex AI/Kiro 等)
- Usage 记录补充 provider_id/endpoint_id/key_id,避免 curl 复现时缺失 provider 信息
- curl 复现兜底从 RequestCandidate 表查找 provider 信息
- Headers Diff 面板左右独立滚动并同步垂直滚动位置
This commit is contained in:
fawney19
2026-02-19 14:51:08 +08:00
parent 0d2cafaec3
commit 7a81e56553
23 changed files with 355 additions and 206 deletions
@@ -26,7 +26,7 @@
<!-- 卡片头部:格式名称 + 状态 + 操作 -->
<div class="flex items-center justify-between px-4 py-2.5 bg-muted/30 border-b">
<div class="flex items-center gap-3">
<span class="font-medium">{{ API_FORMAT_LABELS[endpoint.api_format] || endpoint.api_format }}</span>
<span class="font-medium">{{ formatApiFormat(endpoint.api_format) }}</span>
<Badge
v-if="!endpoint.is_active"
variant="secondary"
@@ -737,7 +737,6 @@ import {
createEndpoint,
updateEndpoint,
deleteEndpoint,
API_FORMAT_LABELS,
type ProviderEndpoint,
type ProviderWithEndpointsSummary,
type HeaderRule,
@@ -747,6 +746,7 @@ import {
type BodyRuleConditionOp,
} from '@/api/endpoints'
import { adminApi } from '@/api/admin'
import { formatApiFormat } from '@/api/endpoints/types/api-format'
// 编辑用的规则类型(统一的可编辑结构)
interface EditableRule {
@@ -1032,7 +1032,7 @@ const availableFormats = computed(() => {
// 删除确认弹窗描述
const deleteConfirmDescription = computed(() => {
if (!endpointToDelete.value) return ''
const formatLabel = API_FORMAT_LABELS[endpointToDelete.value.api_format] || endpointToDelete.value.api_format
const formatLabel = formatApiFormat(endpointToDelete.value.api_format)
return `确定要删除 ${formatLabel} 端点吗?关联密钥将移除对该 API 格式的支持。`
})
@@ -2040,7 +2040,7 @@ async function handleAddEndpoint() {
custom_path: newEndpoint.value.custom_path || undefined,
is_active: true,
})
success(`已添加 ${API_FORMAT_LABELS[newEndpoint.value.api_format] || newEndpoint.value.api_format} 端点`)
success(`已添加 ${formatApiFormat(newEndpoint.value.api_format)} 端点`)
// 重置表单,保留 URL
newEndpoint.value = { api_format: '', base_url: baseUrl, custom_path: '' }
emit('endpointCreated')
@@ -2082,7 +2082,7 @@ async function confirmDeleteEndpoint() {
try {
await deleteEndpoint(endpoint.id)
success(`已删除 ${API_FORMAT_LABELS[endpoint.api_format] || endpoint.api_format} 端点`)
success(`已删除 ${formatApiFormat(endpoint.api_format)} 端点`)
emit('endpointUpdated')
} catch (error: any) {
showError(error.response?.data?.detail || '删除失败', '错误')