diff --git a/web/admin-spa/src/views/AccountsView.vue b/web/admin-spa/src/views/AccountsView.vue
index 59dd3191..c6802e13 100644
--- a/web/admin-spa/src/views/AccountsView.vue
+++ b/web/admin-spa/src/views/AccountsView.vue
@@ -1010,8 +1010,12 @@ const loadAccounts = async (forceReload = false) => {
}
if (openaiData.success) {
const openaiAccounts = (openaiData.data || []).map((acc) => {
+ // 计算每个OpenAI账户绑定的API Key数量
+ const boundApiKeysCount = apiKeys.value.filter(
+ (key) => key.openaiAccountId === acc.id
+ ).length
const groupInfo = accountGroupMap.value.get(acc.id) || null
- return { ...acc, platform: 'openai', boundApiKeysCount: 0, groupInfo }
+ return { ...acc, platform: 'openai', boundApiKeysCount, groupInfo }
})
allAccounts.push(...openaiAccounts)
}
@@ -1210,7 +1214,10 @@ const editAccount = (account) => {
const deleteAccount = async (account) => {
// 检查是否有API Key绑定到此账号
const boundKeysCount = apiKeys.value.filter(
- (key) => key.claudeAccountId === account.id || key.geminiAccountId === account.id
+ (key) =>
+ key.claudeAccountId === account.id ||
+ key.geminiAccountId === account.id ||
+ key.openaiAccountId === account.id
).length
if (boundKeysCount > 0) {
diff --git a/web/admin-spa/src/views/ApiKeysView.vue b/web/admin-spa/src/views/ApiKeysView.vue
index dc52fad1..3b9bad49 100644
--- a/web/admin-spa/src/views/ApiKeysView.vue
+++ b/web/admin-spa/src/views/ApiKeysView.vue
@@ -206,18 +206,60 @@
{{ key.id }}
-
-
+
+
+
+
+
+ Claude
+
+
+ {{ getClaudeBindingInfo(key) }}
+
+
+
+
+
+
+ Gemini
+
+
+ {{ getGeminiBindingInfo(key) }}
+
+
+
+
+
+
+ OpenAI
+
+
+ {{ getOpenAIBindingInfo(key) }}
+
+
+
+
-
- {{ getBoundAccountName(key.claudeAccountId) }}
-
-
- 共享池
-
+ 使用共享池
+
@@ -712,16 +754,58 @@
-
-
-
-
- 绑定: {{ getBoundAccountName(key.claudeAccountId, key.claudeConsoleAccountId) }}
-
-
+
+
+
+
+
+
+ Claude
+
+
+ {{ getClaudeBindingInfo(key) }}
+
+
+
+
+
+
+ Gemini
+
+
+ {{ getGeminiBindingInfo(key) }}
+
+
+
+
+
+
+ OpenAI
+
+
+ {{ getOpenAIBindingInfo(key) }}
+
+
+
+
使用共享池
-
+
@@ -1300,6 +1384,12 @@ const getBoundAccountName = (accountId) => {
return `分组-${geminiGroup.name}`
}
+ // 从OpenAI分组中查找
+ const openaiGroup = accounts.value.openaiGroups.find((g) => g.id === groupId)
+ if (openaiGroup) {
+ return `分组-${openaiGroup.name}`
+ }
+
// 如果找不到分组,返回分组ID的前8位
return `分组-${groupId.substring(0, 8)}`
}
@@ -1307,17 +1397,92 @@ const getBoundAccountName = (accountId) => {
// 从Claude账户列表中查找
const claudeAccount = accounts.value.claude.find((acc) => acc.id === accountId)
if (claudeAccount) {
- return `账户-${claudeAccount.name}`
+ return `${claudeAccount.name}`
}
// 从Gemini账户列表中查找
const geminiAccount = accounts.value.gemini.find((acc) => acc.id === accountId)
if (geminiAccount) {
- return `账户-${geminiAccount.name}`
+ return `${geminiAccount.name}`
+ }
+
+ // 从OpenAI账户列表中查找
+ const openaiAccount = accounts.value.openai.find((acc) => acc.id === accountId)
+ if (openaiAccount) {
+ return `${openaiAccount.name}`
}
// 如果找不到,返回账户ID的前8位
- return `账户-${accountId.substring(0, 8)}`
+ return `${accountId.substring(0, 8)}`
+}
+
+// 获取Claude绑定信息
+const getClaudeBindingInfo = (key) => {
+ if (key.claudeAccountId) {
+ const info = getBoundAccountName(key.claudeAccountId)
+ if (key.claudeAccountId.startsWith('group:')) {
+ return info
+ }
+ // 检查账户是否存在
+ const account = accounts.value.claude.find((acc) => acc.id === key.claudeAccountId)
+ if (!account) {
+ return `⚠️ ${info} (账户不存在)`
+ }
+ if (account.accountType === 'dedicated') {
+ return `🔒 专属-${info}`
+ }
+ return info
+ }
+ if (key.claudeConsoleAccountId) {
+ const account = accounts.value.claude.find(
+ (acc) => acc.id === key.claudeConsoleAccountId && acc.platform === 'claude-console'
+ )
+ if (!account) {
+ return `⚠️ Console账户不存在`
+ }
+ return `Console-${account.name}`
+ }
+ return ''
+}
+
+// 获取Gemini绑定信息
+const getGeminiBindingInfo = (key) => {
+ if (key.geminiAccountId) {
+ const info = getBoundAccountName(key.geminiAccountId)
+ if (key.geminiAccountId.startsWith('group:')) {
+ return info
+ }
+ // 检查账户是否存在
+ const account = accounts.value.gemini.find((acc) => acc.id === key.geminiAccountId)
+ if (!account) {
+ return `⚠️ ${info} (账户不存在)`
+ }
+ if (account.accountType === 'dedicated') {
+ return `🔒 专属-${info}`
+ }
+ return info
+ }
+ return ''
+}
+
+// 获取OpenAI绑定信息
+const getOpenAIBindingInfo = (key) => {
+ if (key.openaiAccountId) {
+ const info = getBoundAccountName(key.openaiAccountId)
+ if (key.openaiAccountId.startsWith('group:')) {
+ return info
+ }
+ // 检查账户是否存在
+ const account = accounts.value.openai.find((acc) => acc.id === key.openaiAccountId)
+ if (!account) {
+ return `⚠️ ${info} (账户不存在)`
+ }
+ if (account.accountType === 'dedicated') {
+ return `🔒 专属-${info}`
+ }
+ return info
+ }
+ return ''
}
// 检查API Key是否过期