mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-22 16:43:35 +00:00
715 lines
19 KiB
JavaScript
715 lines
19 KiB
JavaScript
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
|
||
}
|
||
})
|