mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 09:38:02 +00:00
107 lines
2.5 KiB
JavaScript
107 lines
2.5 KiB
JavaScript
import { defineStore } from 'pinia'
|
|
import { ref } from 'vue'
|
|
|
|
import * as httpApis from '@/utils/http_apis'
|
|
|
|
export const useApiKeysStore = defineStore('apiKeys', () => {
|
|
const apiKeys = ref([])
|
|
const loading = ref(false)
|
|
const error = ref(null)
|
|
const statsTimeRange = ref('all')
|
|
const sortBy = ref('')
|
|
const sortOrder = ref('asc')
|
|
|
|
const fetchApiKeys = async () => {
|
|
loading.value = true
|
|
const res = await httpApis.getApiKeysApi()
|
|
if (res.success) apiKeys.value = res.data || []
|
|
else error.value = res.message
|
|
loading.value = false
|
|
}
|
|
|
|
const createApiKey = async (data) => {
|
|
loading.value = true
|
|
const res = await httpApis.createApiKeyApi(data)
|
|
if (res.success) await fetchApiKeys()
|
|
else error.value = res.message
|
|
loading.value = false
|
|
return res
|
|
}
|
|
|
|
const updateApiKey = async (id, data) => {
|
|
loading.value = true
|
|
const res = await httpApis.updateApiKeyApi(id, data)
|
|
if (res.success) await fetchApiKeys()
|
|
else error.value = res.message
|
|
loading.value = false
|
|
return res
|
|
}
|
|
|
|
const toggleApiKey = async (id) => {
|
|
loading.value = true
|
|
const res = await httpApis.toggleApiKeyApi(id)
|
|
if (res.success) await fetchApiKeys()
|
|
else error.value = res.message
|
|
loading.value = false
|
|
return res
|
|
}
|
|
|
|
const renewApiKey = (id, data) => updateApiKey(id, data)
|
|
|
|
const deleteApiKey = async (id) => {
|
|
loading.value = true
|
|
const res = await httpApis.deleteApiKeyApi(id)
|
|
if (res.success) await fetchApiKeys()
|
|
else error.value = res.message
|
|
loading.value = false
|
|
return res
|
|
}
|
|
|
|
const fetchApiKeyStats = async (id, timeRange = 'all') => {
|
|
const res = await httpApis.getApiKeyStatsApi(id, { timeRange })
|
|
return res.success ? res.stats : null
|
|
}
|
|
|
|
const fetchTags = async () => {
|
|
const res = await httpApis.getApiKeyTagsApi()
|
|
return res.success ? res.data || [] : []
|
|
}
|
|
|
|
const sortApiKeys = (field) => {
|
|
if (sortBy.value === field) {
|
|
sortOrder.value = sortOrder.value === 'asc' ? 'desc' : 'asc'
|
|
} else {
|
|
sortBy.value = field
|
|
sortOrder.value = 'asc'
|
|
}
|
|
}
|
|
|
|
const reset = () => {
|
|
apiKeys.value = []
|
|
loading.value = false
|
|
error.value = null
|
|
statsTimeRange.value = 'all'
|
|
sortBy.value = ''
|
|
sortOrder.value = 'asc'
|
|
}
|
|
|
|
return {
|
|
apiKeys,
|
|
loading,
|
|
error,
|
|
statsTimeRange,
|
|
sortBy,
|
|
sortOrder,
|
|
fetchApiKeys,
|
|
createApiKey,
|
|
updateApiKey,
|
|
toggleApiKey,
|
|
renewApiKey,
|
|
deleteApiKey,
|
|
fetchApiKeyStats,
|
|
fetchTags,
|
|
sortApiKeys,
|
|
reset
|
|
}
|
|
})
|