Files
datahub/frontend/src/stores/admin-api-key.ts
T

86 lines
2.2 KiB
TypeScript
Raw Normal View History

2026-04-16 11:01:30 +08:00
import { api } from '@/utils/request'
import type { PaginatedData, ApiKeyRecord, AdminApiKeyFilters } from '@/types/api'
export const useAdminApiKeyStore = defineStore('admin-api-key', () => {
const keys = ref<ApiKeyRecord[]>([])
const loading = ref(false)
const pagination = reactive({
page: 1,
per_page: 15,
total: 0,
})
const filters = reactive<AdminApiKeyFilters>({
user_id: undefined,
enabled: undefined,
})
async function fetchAllKeys() {
loading.value = true
try {
const data = await api.get<PaginatedData<ApiKeyRecord>>('/api/v1/admin/api-keys', {
page: pagination.page,
per_page: pagination.per_page,
user_id: filters.user_id,
enabled: filters.enabled,
})
keys.value = data.items
pagination.total = data.total
pagination.page = data.page
} catch (err: unknown) {
const msg = err instanceof Error ? err.message : '获取 API Key 列表失败'
message.error(msg)
} finally {
loading.value = false
}
}
async function toggleKey(id: number, enabled: boolean) {
try {
await api.patch(`/api/v1/admin/api-keys/${id}/toggle`, { enabled })
await fetchAllKeys()
} catch (err: unknown) {
const msg = err instanceof Error ? err.message : '操作失败'
message.error(msg)
}
}
async function deleteKey(id: number) {
try {
await api.delete(`/api/v1/admin/api-keys/${id}`)
await fetchAllKeys()
message.success('已删除')
} catch (err: unknown) {
const msg = err instanceof Error ? err.message : '删除失败'
message.error(msg)
}
}
async function toggleUserApiKeyEnabled(userId: number, enabled: boolean) {
try {
await api.patch(`/api/v1/users/${userId}/api-key-enabled`, { enabled })
await fetchAllKeys()
} catch (err: unknown) {
const msg = err instanceof Error ? err.message : '操作失败'
message.error(msg)
}
}
function resetFilters() {
filters.user_id = undefined
filters.enabled = undefined
pagination.page = 1
}
return {
keys,
loading,
pagination,
filters,
fetchAllKeys,
toggleKey,
deleteKey,
toggleUserApiKeyEnabled,
resetFilters,
}
})