Files
claude-relay-service/web/admin-spa/src/stores/accounts.js
2025-08-23 10:30:29 +08:00

715 lines
19 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { defineStore } from 'pinia'
import { ref } from 'vue'
import { apiClient } from '@/config/api'
export const useAccountsStore = defineStore('accounts', () => {
// 状态
const claudeAccounts = ref([])
const claudeConsoleAccounts = ref([])
const bedrockAccounts = ref([])
const geminiAccounts = ref([])
const openaiAccounts = ref([])
const azureOpenaiAccounts = ref([])
const loading = ref(false)
const error = ref(null)
const sortBy = ref('')
const sortOrder = ref('asc')
// Actions
// 获取Claude账户列表
const fetchClaudeAccounts = async () => {
loading.value = true
error.value = null
try {
const response = await apiClient.get('/admin/claude-accounts')
if (response.success) {
claudeAccounts.value = response.data || []
} else {
throw new Error(response.message || '获取Claude账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 获取Claude Console账户列表
const fetchClaudeConsoleAccounts = async () => {
loading.value = true
error.value = null
try {
const response = await apiClient.get('/admin/claude-console-accounts')
if (response.success) {
claudeConsoleAccounts.value = response.data || []
} else {
throw new Error(response.message || '获取Claude Console账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 获取Bedrock账户列表
const fetchBedrockAccounts = async () => {
loading.value = true
error.value = null
try {
const response = await apiClient.get('/admin/bedrock-accounts')
if (response.success) {
bedrockAccounts.value = response.data || []
} else {
throw new Error(response.message || '获取Bedrock账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 获取Gemini账户列表
const fetchGeminiAccounts = async () => {
loading.value = true
error.value = null
try {
const response = await apiClient.get('/admin/gemini-accounts')
if (response.success) {
geminiAccounts.value = response.data || []
} else {
throw new Error(response.message || '获取Gemini账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 获取OpenAI账户列表
const fetchOpenAIAccounts = async () => {
loading.value = true
error.value = null
try {
const response = await apiClient.get('/admin/openai-accounts')
if (response.success) {
openaiAccounts.value = response.data || []
} else {
throw new Error(response.message || '获取OpenAI账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 获取Azure OpenAI账户列表
const fetchAzureOpenAIAccounts = async () => {
loading.value = true
error.value = null
try {
const response = await apiClient.get('/admin/azure-openai-accounts')
if (response.success) {
azureOpenaiAccounts.value = response.data || []
} else {
throw new Error(response.message || '获取Azure OpenAI账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 获取所有账户
const fetchAllAccounts = async () => {
loading.value = true
error.value = null
try {
await Promise.all([
fetchClaudeAccounts(),
fetchClaudeConsoleAccounts(),
fetchBedrockAccounts(),
fetchGeminiAccounts(),
fetchOpenAIAccounts(),
fetchAzureOpenAIAccounts()
])
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 创建Claude账户
const createClaudeAccount = async (data) => {
loading.value = true
error.value = null
try {
const response = await apiClient.post('/admin/claude-accounts', data)
if (response.success) {
await fetchClaudeAccounts()
return response.data
} else {
throw new Error(response.message || '创建Claude账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 创建Claude Console账户
const createClaudeConsoleAccount = async (data) => {
loading.value = true
error.value = null
try {
const response = await apiClient.post('/admin/claude-console-accounts', data)
if (response.success) {
await fetchClaudeConsoleAccounts()
return response.data
} else {
throw new Error(response.message || '创建Claude Console账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 创建Bedrock账户
const createBedrockAccount = async (data) => {
loading.value = true
error.value = null
try {
const response = await apiClient.post('/admin/bedrock-accounts', data)
if (response.success) {
await fetchBedrockAccounts()
return response.data
} else {
throw new Error(response.message || '创建Bedrock账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 创建Gemini账户
const createGeminiAccount = async (data) => {
loading.value = true
error.value = null
try {
const response = await apiClient.post('/admin/gemini-accounts', data)
if (response.success) {
await fetchGeminiAccounts()
return response.data
} else {
throw new Error(response.message || '创建Gemini账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 创建OpenAI账户
const createOpenAIAccount = async (data) => {
loading.value = true
error.value = null
try {
const response = await apiClient.post('/admin/openai-accounts', data)
if (response.success) {
await fetchOpenAIAccounts()
return response.data
} else {
throw new Error(response.message || '创建OpenAI账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 创建Azure OpenAI账户
const createAzureOpenAIAccount = async (data) => {
loading.value = true
error.value = null
try {
const response = await apiClient.post('/admin/azure-openai-accounts', data)
if (response.success) {
await fetchAzureOpenAIAccounts()
return response.data
} else {
throw new Error(response.message || '创建Azure OpenAI账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 更新Claude账户
const updateClaudeAccount = async (id, data) => {
loading.value = true
error.value = null
try {
const response = await apiClient.put(`/admin/claude-accounts/${id}`, data)
if (response.success) {
await fetchClaudeAccounts()
return response
} else {
throw new Error(response.message || '更新Claude账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 更新Claude Console账户
const updateClaudeConsoleAccount = async (id, data) => {
loading.value = true
error.value = null
try {
const response = await apiClient.put(`/admin/claude-console-accounts/${id}`, data)
if (response.success) {
await fetchClaudeConsoleAccounts()
return response
} else {
throw new Error(response.message || '更新Claude Console账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 更新Bedrock账户
const updateBedrockAccount = async (id, data) => {
loading.value = true
error.value = null
try {
const response = await apiClient.put(`/admin/bedrock-accounts/${id}`, data)
if (response.success) {
await fetchBedrockAccounts()
return response
} else {
throw new Error(response.message || '更新Bedrock账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 更新Gemini账户
const updateGeminiAccount = async (id, data) => {
loading.value = true
error.value = null
try {
const response = await apiClient.put(`/admin/gemini-accounts/${id}`, data)
if (response.success) {
await fetchGeminiAccounts()
return response
} else {
throw new Error(response.message || '更新Gemini账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 更新OpenAI账户
const updateOpenAIAccount = async (id, data) => {
loading.value = true
error.value = null
try {
const response = await apiClient.put(`/admin/openai-accounts/${id}`, data)
if (response.success) {
await fetchOpenAIAccounts()
return response
} else {
throw new Error(response.message || '更新OpenAI账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 更新Azure OpenAI账户
const updateAzureOpenAIAccount = async (id, data) => {
loading.value = true
error.value = null
try {
const response = await apiClient.put(`/admin/azure-openai-accounts/${id}`, data)
if (response.success) {
await fetchAzureOpenAIAccounts()
return response
} else {
throw new Error(response.message || '更新Azure OpenAI账户失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 切换账户状态
const toggleAccount = async (platform, id) => {
loading.value = true
error.value = null
try {
let endpoint
if (platform === 'claude') {
endpoint = `/admin/claude-accounts/${id}/toggle`
} else if (platform === 'claude-console') {
endpoint = `/admin/claude-console-accounts/${id}/toggle`
} else if (platform === 'bedrock') {
endpoint = `/admin/bedrock-accounts/${id}/toggle`
} else if (platform === 'gemini') {
endpoint = `/admin/gemini-accounts/${id}/toggle`
} else if (platform === 'openai') {
endpoint = `/admin/openai-accounts/${id}/toggle`
} else if (platform === 'azure_openai') {
endpoint = `/admin/azure-openai-accounts/${id}/toggle`
} else {
endpoint = `/admin/openai-accounts/${id}/toggle`
}
const response = await apiClient.put(endpoint)
if (response.success) {
if (platform === 'claude') {
await fetchClaudeAccounts()
} else if (platform === 'claude-console') {
await fetchClaudeConsoleAccounts()
} else if (platform === 'bedrock') {
await fetchBedrockAccounts()
} else if (platform === 'gemini') {
await fetchGeminiAccounts()
} else if (platform === 'openai') {
await fetchOpenAIAccounts()
} else if (platform === 'azure_openai') {
await fetchAzureOpenAIAccounts()
} else {
await fetchOpenAIAccounts()
}
return response
} else {
throw new Error(response.message || '切换状态失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 删除账户
const deleteAccount = async (platform, id) => {
loading.value = true
error.value = null
try {
let endpoint
if (platform === 'claude') {
endpoint = `/admin/claude-accounts/${id}`
} else if (platform === 'claude-console') {
endpoint = `/admin/claude-console-accounts/${id}`
} else if (platform === 'bedrock') {
endpoint = `/admin/bedrock-accounts/${id}`
} else if (platform === 'gemini') {
endpoint = `/admin/gemini-accounts/${id}`
} else if (platform === 'openai') {
endpoint = `/admin/openai-accounts/${id}`
} else if (platform === 'azure_openai') {
endpoint = `/admin/azure-openai-accounts/${id}`
} else {
endpoint = `/admin/openai-accounts/${id}`
}
const response = await apiClient.delete(endpoint)
if (response.success) {
if (platform === 'claude') {
await fetchClaudeAccounts()
} else if (platform === 'claude-console') {
await fetchClaudeConsoleAccounts()
} else if (platform === 'bedrock') {
await fetchBedrockAccounts()
} else if (platform === 'gemini') {
await fetchGeminiAccounts()
} else if (platform === 'openai') {
await fetchOpenAIAccounts()
} else if (platform === 'azure_openai') {
await fetchAzureOpenAIAccounts()
} else {
await fetchOpenAIAccounts()
}
return response
} else {
throw new Error(response.message || '删除失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 刷新Claude Token
const refreshClaudeToken = async (id) => {
loading.value = true
error.value = null
try {
const response = await apiClient.post(`/admin/claude-accounts/${id}/refresh`)
if (response.success) {
await fetchClaudeAccounts()
return response
} else {
throw new Error(response.message || 'Token刷新失败')
}
} catch (err) {
error.value = err.message
throw err
} finally {
loading.value = false
}
}
// 生成Claude OAuth URL
const generateClaudeAuthUrl = async (proxyConfig) => {
try {
const response = await apiClient.post('/admin/claude-accounts/generate-auth-url', proxyConfig)
if (response.success) {
return response.data // 返回整个对象包含authUrl和sessionId
} else {
throw new Error(response.message || '生成授权URL失败')
}
} catch (err) {
error.value = err.message
throw err
}
}
// 交换Claude OAuth Code
const exchangeClaudeCode = async (data) => {
try {
const response = await apiClient.post('/admin/claude-accounts/exchange-code', data)
if (response.success) {
return response.data
} else {
throw new Error(response.message || '交换授权码失败')
}
} catch (err) {
error.value = err.message
throw err
}
}
// 生成Claude Setup Token URL
const generateClaudeSetupTokenUrl = async (proxyConfig) => {
try {
const response = await apiClient.post(
'/admin/claude-accounts/generate-setup-token-url',
proxyConfig
)
if (response.success) {
return response.data // 返回整个对象包含authUrl和sessionId
} else {
throw new Error(response.message || '生成Setup Token URL失败')
}
} catch (err) {
error.value = err.message
throw err
}
}
// 交换Claude Setup Token Code
const exchangeClaudeSetupTokenCode = async (data) => {
try {
const response = await apiClient.post(
'/admin/claude-accounts/exchange-setup-token-code',
data
)
if (response.success) {
return response.data
} else {
throw new Error(response.message || '交换Setup Token授权码失败')
}
} catch (err) {
error.value = err.message
throw err
}
}
// 生成Gemini OAuth URL
const generateGeminiAuthUrl = async (proxyConfig) => {
try {
const response = await apiClient.post('/admin/gemini-accounts/generate-auth-url', proxyConfig)
if (response.success) {
return response.data // 返回整个对象包含authUrl和sessionId
} else {
throw new Error(response.message || '生成授权URL失败')
}
} catch (err) {
error.value = err.message
throw err
}
}
// 交换Gemini OAuth Code
const exchangeGeminiCode = async (data) => {
try {
const response = await apiClient.post('/admin/gemini-accounts/exchange-code', data)
if (response.success) {
return response.data
} else {
throw new Error(response.message || '交换授权码失败')
}
} catch (err) {
error.value = err.message
throw err
}
}
// 生成OpenAI OAuth URL
const generateOpenAIAuthUrl = async (proxyConfig) => {
try {
const response = await apiClient.post('/admin/openai-accounts/generate-auth-url', proxyConfig)
if (response.success) {
return response.data // 返回整个对象包含authUrl和sessionId
} else {
throw new Error(response.message || '生成授权URL失败')
}
} catch (err) {
error.value = err.message
throw err
}
}
// 交换OpenAI OAuth Code
const exchangeOpenAICode = async (data) => {
try {
const response = await apiClient.post('/admin/openai-accounts/exchange-code', data)
if (response.success) {
return response.data
} else {
throw new Error(response.message || '交换授权码失败')
}
} catch (err) {
error.value = err.message
throw err
}
}
// 排序账户
const sortAccounts = (field) => {
if (sortBy.value === field) {
sortOrder.value = sortOrder.value === 'asc' ? 'desc' : 'asc'
} else {
sortBy.value = field
sortOrder.value = 'asc'
}
}
// 重置store
const reset = () => {
claudeAccounts.value = []
claudeConsoleAccounts.value = []
bedrockAccounts.value = []
geminiAccounts.value = []
openaiAccounts.value = []
azureOpenaiAccounts.value = []
loading.value = false
error.value = null
sortBy.value = ''
sortOrder.value = 'asc'
}
return {
// State
claudeAccounts,
claudeConsoleAccounts,
bedrockAccounts,
geminiAccounts,
openaiAccounts,
azureOpenaiAccounts,
loading,
error,
sortBy,
sortOrder,
// Actions
fetchClaudeAccounts,
fetchClaudeConsoleAccounts,
fetchBedrockAccounts,
fetchGeminiAccounts,
fetchOpenAIAccounts,
fetchAzureOpenAIAccounts,
fetchAllAccounts,
createClaudeAccount,
createClaudeConsoleAccount,
createBedrockAccount,
createGeminiAccount,
createOpenAIAccount,
createAzureOpenAIAccount,
updateClaudeAccount,
updateClaudeConsoleAccount,
updateBedrockAccount,
updateGeminiAccount,
updateOpenAIAccount,
updateAzureOpenAIAccount,
toggleAccount,
deleteAccount,
refreshClaudeToken,
generateClaudeAuthUrl,
exchangeClaudeCode,
generateClaudeSetupTokenUrl,
exchangeClaudeSetupTokenCode,
generateGeminiAuthUrl,
exchangeGeminiCode,
generateOpenAIAuthUrl,
exchangeOpenAICode,
sortAccounts,
reset
}
})