Files
Aether/frontend/src/api/users.ts

107 lines
3.3 KiB
TypeScript
Raw Normal View History

2025-12-10 20:52:44 +08:00
import apiClient from './client'
export interface User {
id: string // UUID
username: string
email: string
role: 'admin' | 'user'
is_active: boolean
quota_usd: number | null
used_usd: number
total_usd: number
allowed_providers: string[] | null // 允许使用的提供商 ID 列表
allowed_endpoints: string[] | null // 允许使用的端点 ID 列表
allowed_models: string[] | null // 允许使用的模型名称列表
created_at: string
updated_at?: string
}
export interface CreateUserRequest {
username: string
password: string
email: string
role?: 'admin' | 'user'
quota_usd?: number | null
allowed_providers?: string[] | null
allowed_endpoints?: string[] | null
allowed_models?: string[] | null
}
export interface UpdateUserRequest {
email?: string
is_active?: boolean
role?: 'admin' | 'user'
quota_usd?: number | null
password?: string
allowed_providers?: string[] | null
allowed_endpoints?: string[] | null
allowed_models?: string[] | null
}
export interface ApiKey {
id: string // UUID
key?: string // 完整的 key只在创建时返回
key_display?: string // 脱敏后的密钥显示
name?: string
created_at: string
last_used_at?: string
expires_at?: string // 过期时间
is_active: boolean
is_standalone: boolean // 是否为独立余额Key
balance_used_usd?: number // 已使用余额仅独立Key
current_balance_usd?: number | null // 当前余额独立Key预付费模式null表示无限制
rate_limit?: number // 速率限制(请求/分钟)
total_requests?: number // 总请求数
total_cost_usd?: number // 总费用
}
export const usersApi = {
async getAllUsers(): Promise<User[]> {
const response = await apiClient.get<User[]>('/api/admin/users')
return response.data
},
async getUser(userId: string): Promise<User> {
const response = await apiClient.get<User>(`/api/admin/users/${userId}`)
return response.data
},
async createUser(user: CreateUserRequest): Promise<User> {
const response = await apiClient.post<User>('/api/admin/users', user)
return response.data
},
async updateUser(userId: string, updates: UpdateUserRequest): Promise<User> {
const response = await apiClient.put<User>(`/api/admin/users/${userId}`, updates)
return response.data
},
async deleteUser(userId: string): Promise<void> {
await apiClient.delete(`/api/admin/users/${userId}`)
},
async getUserApiKeys(userId: string): Promise<ApiKey[]> {
const response = await apiClient.get<{ api_keys: ApiKey[] }>(`/api/admin/users/${userId}/api-keys`)
return response.data.api_keys
},
async createApiKey(userId: string, name?: string): Promise<ApiKey & { key: string }> {
const response = await apiClient.post<ApiKey & { key: string }>(`/api/admin/users/${userId}/api-keys`, { name })
return response.data
},
async deleteApiKey(userId: string, keyId: string): Promise<void> {
await apiClient.delete(`/api/admin/users/${userId}/api-keys/${keyId}`)
},
async resetUserQuota(userId: string): Promise<void> {
await apiClient.patch(`/api/admin/users/${userId}/quota`)
},
// 管理员统计
async getUsageStats(): Promise<any> {
const response = await apiClient.get('/api/admin/usage/stats')
return response.data
}
}