fix: 修复gemini api类型账户绑定显示问题

This commit is contained in:
shaw
2025-11-28 16:33:31 +08:00
parent 4a0ba6ed63
commit 53553c7e76
4 changed files with 95 additions and 45 deletions

View File

@@ -581,6 +581,7 @@ const refreshAccounts = async () => {
claudeData,
claudeConsoleData,
geminiData,
geminiApiData,
openaiData,
openaiResponsesData,
bedrockData,
@@ -590,6 +591,7 @@ const refreshAccounts = async () => {
apiClient.get('/admin/claude-accounts'),
apiClient.get('/admin/claude-console-accounts'),
apiClient.get('/admin/gemini-accounts'),
apiClient.get('/admin/gemini-api-accounts'), // 获取 Gemini-API 账号
apiClient.get('/admin/openai-accounts'),
apiClient.get('/admin/openai-responses-accounts'),
apiClient.get('/admin/bedrock-accounts'),
@@ -622,13 +624,31 @@ const refreshAccounts = async () => {
localAccounts.value.claude = claudeAccounts
// 合并 Gemini OAuth 和 Gemini API 账号
const geminiAccounts = []
if (geminiData.success) {
localAccounts.value.gemini = (geminiData.data || []).map((account) => ({
...account,
isDedicated: account.accountType === 'dedicated'
}))
;(geminiData.data || []).forEach((account) => {
geminiAccounts.push({
...account,
platform: 'gemini',
isDedicated: account.accountType === 'dedicated'
})
})
}
if (geminiApiData.success) {
;(geminiApiData.data || []).forEach((account) => {
geminiAccounts.push({
...account,
platform: 'gemini-api',
isDedicated: account.accountType === 'dedicated'
})
})
}
localAccounts.value.gemini = geminiAccounts
const openaiAccounts = []
if (openaiData.success) {
@@ -819,12 +839,20 @@ onMounted(async () => {
// 初始化账号数据
if (props.accounts) {
// props.accounts.gemini 已经包含了 OAuth 和 API 两种类型的账号(父组件已合并)
// 保留原有的 platform 属性,不要覆盖
const geminiAccounts = (props.accounts.gemini || []).map((account) => ({
...account,
platform: account.platform || 'gemini' // 保留原有 platform只在没有时设默认值
}))
// props.accounts.openai 只包含 openai 类型openaiResponses 需要单独处理
const openaiAccounts = []
if (props.accounts.openai) {
props.accounts.openai.forEach((account) => {
openaiAccounts.push({
...account,
platform: 'openai'
platform: account.platform || 'openai'
})
})
}
@@ -832,17 +860,20 @@ onMounted(async () => {
props.accounts.openaiResponses.forEach((account) => {
openaiAccounts.push({
...account,
platform: 'openai-responses'
platform: account.platform || 'openai-responses'
})
})
}
localAccounts.value = {
claude: props.accounts.claude || [],
gemini: props.accounts.gemini || [],
gemini: geminiAccounts,
openai: openaiAccounts,
bedrock: props.accounts.bedrock || [],
droid: props.accounts.droid || [],
droid: (props.accounts.droid || []).map((account) => ({
...account,
platform: account.platform || 'droid'
})),
claudeGroups: props.accounts.claudeGroups || [],
geminiGroups: props.accounts.geminiGroups || [],
openaiGroups: props.accounts.openaiGroups || [],

View File

@@ -986,13 +986,20 @@ onMounted(async () => {
availableTags.value = await apiKeysStore.fetchTags()
// 初始化账号数据
if (props.accounts) {
// 合并 OpenAI 和 OpenAI-Responses 账号
// props.accounts.gemini 已经包含了 OAuth 和 API 两种类型的账号(父组件已合并)
// 保留原有的 platform 属性,不要覆盖
const geminiAccounts = (props.accounts.gemini || []).map((account) => ({
...account,
platform: account.platform || 'gemini' // 保留原有 platform只在没有时设默认值
}))
// props.accounts.openai 只包含 openai 类型openaiResponses 需要单独处理
const openaiAccounts = []
if (props.accounts.openai) {
props.accounts.openai.forEach((account) => {
openaiAccounts.push({
...account,
platform: 'openai'
platform: account.platform || 'openai'
})
})
}
@@ -1000,19 +1007,19 @@ onMounted(async () => {
props.accounts.openaiResponses.forEach((account) => {
openaiAccounts.push({
...account,
platform: 'openai-responses'
platform: account.platform || 'openai-responses'
})
})
}
localAccounts.value = {
claude: props.accounts.claude || [],
gemini: props.accounts.gemini || [],
gemini: geminiAccounts,
openai: openaiAccounts,
bedrock: props.accounts.bedrock || [],
droid: (props.accounts.droid || []).map((account) => ({
...account,
platform: 'droid'
platform: account.platform || 'droid'
})),
claudeGroups: props.accounts.claudeGroups || [],
geminiGroups: props.accounts.geminiGroups || [],
@@ -1032,6 +1039,7 @@ const refreshAccounts = async () => {
claudeData,
claudeConsoleData,
geminiData,
geminiApiData,
openaiData,
openaiResponsesData,
bedrockData,
@@ -1041,6 +1049,7 @@ const refreshAccounts = async () => {
apiClient.get('/admin/claude-accounts'),
apiClient.get('/admin/claude-console-accounts'),
apiClient.get('/admin/gemini-accounts'),
apiClient.get('/admin/gemini-api-accounts'), // 获取 Gemini-API 账号
apiClient.get('/admin/openai-accounts'),
apiClient.get('/admin/openai-responses-accounts'), // 获取 OpenAI-Responses 账号
apiClient.get('/admin/bedrock-accounts'),
@@ -1073,13 +1082,31 @@ const refreshAccounts = async () => {
localAccounts.value.claude = claudeAccounts
// 合并 Gemini OAuth 和 Gemini API 账号
const geminiAccounts = []
if (geminiData.success) {
localAccounts.value.gemini = (geminiData.data || []).map((account) => ({
...account,
isDedicated: account.accountType === 'dedicated' // 保留以便向后兼容
}))
;(geminiData.data || []).forEach((account) => {
geminiAccounts.push({
...account,
platform: 'gemini',
isDedicated: account.accountType === 'dedicated'
})
})
}
if (geminiApiData.success) {
;(geminiApiData.data || []).forEach((account) => {
geminiAccounts.push({
...account,
platform: 'gemini-api',
isDedicated: account.accountType === 'dedicated'
})
})
}
localAccounts.value.gemini = geminiAccounts
// 合并 OpenAI 和 OpenAI-Responses 账号
const openaiAccounts = []

View File

@@ -1179,32 +1179,20 @@ onMounted(async () => {
// 初始化账号数据
if (props.accounts) {
// 合并 Gemini OAuth 和 Gemini API 账号
const geminiAccounts = []
if (props.accounts.gemini) {
props.accounts.gemini.forEach((account) => {
geminiAccounts.push({
...account,
platform: 'gemini'
})
})
}
if (props.accounts.geminiApi) {
props.accounts.geminiApi.forEach((account) => {
geminiAccounts.push({
...account,
platform: 'gemini-api'
})
})
}
// props.accounts.gemini 已经包含了 OAuth 和 API 两种类型的账号(父组件已合并)
// 保留原有的 platform 属性,不要覆盖
const geminiAccounts = (props.accounts.gemini || []).map((account) => ({
...account,
platform: account.platform || 'gemini' // 保留原有 platform只在没有时设默认值
}))
// 合并 OpenAI 和 OpenAI-Responses 账号
// props.accounts.openai 只包含 openai 类型openaiResponses 需要单独处理
const openaiAccounts = []
if (props.accounts.openai) {
props.accounts.openai.forEach((account) => {
openaiAccounts.push({
...account,
platform: 'openai'
platform: account.platform || 'openai'
})
})
}
@@ -1212,7 +1200,7 @@ onMounted(async () => {
props.accounts.openaiResponses.forEach((account) => {
openaiAccounts.push({
...account,
platform: 'openai-responses'
platform: account.platform || 'openai-responses'
})
})
}
@@ -1224,7 +1212,7 @@ onMounted(async () => {
bedrock: props.accounts.bedrock || [],
droid: (props.accounts.droid || []).map((account) => ({
...account,
platform: 'droid'
platform: account.platform || 'droid'
})),
claudeGroups: props.accounts.claudeGroups || [],
geminiGroups: props.accounts.geminiGroups || [],

View File

@@ -2158,6 +2158,7 @@ const defaultTime = ref([new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23,
const accounts = ref({
claude: [],
gemini: [],
geminiApi: [], // 添加 Gemini-API 账号列表(用于传递给子组件初始化)
openai: [],
openaiResponses: [], // 添加 OpenAI-Responses 账号列表
bedrock: [],
@@ -2372,12 +2373,15 @@ const loadAccounts = async (forceRefresh = false) => {
}
if (geminiApiData.success) {
;(geminiApiData.data || []).forEach((account) => {
geminiAccounts.push({
...account,
platform: 'gemini-api',
isDedicated: account.accountType === 'dedicated'
})
// 保存原始 Gemini-API 账号列表供子组件初始化使用
accounts.value.geminiApi = (geminiApiData.data || []).map((account) => ({
...account,
platform: 'gemini-api',
isDedicated: account.accountType === 'dedicated'
}))
// 同时添加到合并列表
accounts.value.geminiApi.forEach((account) => {
geminiAccounts.push(account)
})
}