diff --git a/frontend/src/api/endpoints/keys.ts b/frontend/src/api/endpoints/keys.ts
index 4dcd3a3..3e33500 100644
--- a/frontend/src/api/endpoints/keys.ts
+++ b/frontend/src/api/endpoints/keys.ts
@@ -110,6 +110,14 @@ export async function updateEndpointKey(
return response.data
}
+/**
+ * 获取完整的 API Key(用于查看和复制)
+ */
+export async function revealEndpointKey(keyId: string): Promise<{ api_key: string }> {
+ const response = await client.get(`/api/admin/endpoints/keys/${keyId}/reveal`)
+ return response.data
+}
+
/**
* 删除 Endpoint Key
*/
diff --git a/frontend/src/features/providers/components/ProviderDetailDrawer.vue b/frontend/src/features/providers/components/ProviderDetailDrawer.vue
index efb15af..a74ea77 100644
--- a/frontend/src/features/providers/components/ProviderDetailDrawer.vue
+++ b/frontend/src/features/providers/components/ProviderDetailDrawer.vue
@@ -337,8 +337,40 @@
{{ key.is_active ? '活跃' : '禁用' }}
-
- {{ key.api_key_masked }}
+
+
+ {{ revealedKeys.has(key.id) ? revealedKeys.get(key.id) : key.api_key_masked }}
+
+
+
@@ -654,7 +686,9 @@ import {
Power,
Layers,
GripVertical,
- Copy
+ Copy,
+ Eye,
+ EyeOff
} from 'lucide-vue-next'
import { useEscapeKey } from '@/composables/useEscapeKey'
import Button from '@/components/ui/button.vue'
@@ -681,6 +715,7 @@ import {
updateEndpoint,
updateEndpointKey,
batchUpdateKeyPriority,
+ revealEndpointKey,
type ProviderEndpoint,
type EndpointAPIKey,
type Model
@@ -731,6 +766,10 @@ const recoveringEndpointId = ref(null)
const togglingEndpointId = ref(null)
const togglingKeyId = ref(null)
+// 密钥显示状态:key_id -> 完整密钥
+const revealedKeys = ref