Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
Next.js SSR/hydration 与 SWR fetch-on-mount 存在根本冲突: hydration 卸载组件时 abort 的请求仍占用后端 DB 连接, retry 循环耗尽 PostgreSQL 连接池导致后端完全卡死。 admin-v2 使用 Vite + React + antd 纯 SPA 彻底消除此问题: - 12 页面全部完成(Login, Dashboard, Accounts, Providers, Models, API Keys, Usage, Relay, Config, Prompts, Logs, Agent Templates) - ProTable + ProForm + ProLayout 统一 UI 模式 - TanStack Query + Axios + Zustand 数据层 - JWT 自动刷新 + 401 重试机制 - 全部 18 网络请求 200 OK,零 ERR_ABORTED 同时更新 troubleshooting 第 13 节和 SaaS 平台文档。
32 lines
1.4 KiB
TypeScript
32 lines
1.4 KiB
TypeScript
import request from './request'
|
|
import type { Provider, ProviderKey, PaginatedResponse } from '@/types'
|
|
|
|
export const providerService = {
|
|
list: (params?: Record<string, unknown>) =>
|
|
request.get<PaginatedResponse<Provider>>('/providers', { params }).then((r) => r.data),
|
|
|
|
create: (data: Partial<Omit<Provider, 'id' | 'created_at' | 'updated_at'>>) =>
|
|
request.post<Provider>('/providers', data).then((r) => r.data),
|
|
|
|
update: (id: string, data: Partial<Omit<Provider, 'id' | 'created_at' | 'updated_at'>>) =>
|
|
request.patch<Provider>(`/providers/${id}`, data).then((r) => r.data),
|
|
|
|
delete: (id: string) =>
|
|
request.delete(`/providers/${id}`).then((r) => r.data),
|
|
|
|
listKeys: (providerId: string) =>
|
|
request.get<ProviderKey[]>(`/providers/${providerId}/keys`).then((r) => r.data),
|
|
|
|
addKey: (providerId: string, data: {
|
|
key_label: string; key_value: string; priority?: number
|
|
max_rpm?: number; max_tpm?: number; quota_reset_interval?: string
|
|
}) =>
|
|
request.post<{ ok: boolean; key_id: string }>(`/providers/${providerId}/keys`, data).then((r) => r.data),
|
|
|
|
toggleKey: (providerId: string, keyId: string, active: boolean) =>
|
|
request.put<{ ok: boolean }>(`/providers/${providerId}/keys/${keyId}/toggle`, { active }).then((r) => r.data),
|
|
|
|
deleteKey: (providerId: string, keyId: string) =>
|
|
request.delete<{ ok: boolean }>(`/providers/${providerId}/keys/${keyId}`).then((r) => r.data),
|
|
}
|