05ae0c62d6
- 后台密钥列表:主管只看本组子账户(created_by_id=自己),超管全量可按创建人筛选;行 VO 新增 createdById/createdByUsername - 代理提取接口欠费(message=余额不足)识别为 insufficient_balance,不再静默回退直连 - 上游 LLM 网关欠费(code=insufficient_user_quota/预扣费额度失败)同样归为欠费并透传额度明细 - 前端:桌面设置面板显示"欠费",admin 后台单格药丸显示"欠费"、新增所属管理员列与超管筛选
81 lines
2.2 KiB
TypeScript
81 lines
2.2 KiB
TypeScript
import { http } from './http'
|
|
import { unwrap } from './envelope'
|
|
|
|
/** 单模块状态(脱敏值 + 连通性)。 */
|
|
export interface AdminUserSecretModule {
|
|
moduleKey: string
|
|
moduleLabel: string
|
|
masked: string
|
|
exists: boolean
|
|
checkStatus: string
|
|
checkCode: string
|
|
checkMessage: string
|
|
checkLatencyMs: number | null
|
|
checkedAt: string | null
|
|
updatedAt: string | null
|
|
}
|
|
|
|
/** 一行一用户:三个字段列 + 行级状态(三类都检测通过才算 passed)。 */
|
|
export interface AdminUserSecretRow {
|
|
userId: number
|
|
username: string
|
|
createdById: number | null
|
|
createdByUsername: string
|
|
similarAsin: AdminUserSecretModule
|
|
appearancePatent: AdminUserSecretModule
|
|
proxy: AdminUserSecretModule
|
|
status: string
|
|
statusMessage: string
|
|
updatedAt: string | null
|
|
}
|
|
|
|
export interface AdminUserSecretPage {
|
|
items: AdminUserSecretRow[]
|
|
total: number
|
|
page: number
|
|
pageSize: number
|
|
}
|
|
|
|
/** 管理员下拉项(超管筛选用)。 */
|
|
export interface AdminOption {
|
|
id: number
|
|
username: string
|
|
}
|
|
|
|
export interface UserSecretQuery {
|
|
keyword?: string
|
|
checkStatus?: string
|
|
/** 按创建人筛选(仅超管生效)。 */
|
|
createdById?: number
|
|
page: number
|
|
pageSize: number
|
|
}
|
|
|
|
/** 分页查询用户密钥(一行一用户):GET /api/admin/user-secrets */
|
|
export async function fetchUserSecretList(params: UserSecretQuery): Promise<AdminUserSecretPage> {
|
|
const { data } = await http.get('/api/admin/user-secrets', { params })
|
|
return unwrap<AdminUserSecretPage>(data)
|
|
}
|
|
|
|
/** 立即检测该用户全部已配置项:POST /api/admin/user-secrets/{userId}/check */
|
|
export async function checkUserSecret(userId: number) {
|
|
const { data } = await http.post(`/api/admin/user-secrets/${userId}/check`)
|
|
return unwrap<
|
|
Array<{
|
|
moduleKey: string
|
|
checkStatus: string
|
|
checkCode: string
|
|
checkMessage: string
|
|
checkLatencyMs: number | null
|
|
checkedAt: string | null
|
|
viaProxy: boolean
|
|
}>
|
|
>(data)
|
|
}
|
|
|
|
/** 清空该用户全部密钥与代理配置:DELETE /api/admin/user-secrets/{userId} */
|
|
export async function deleteUserSecret(userId: number): Promise<void> {
|
|
const { data } = await http.delete(`/api/admin/user-secrets/${userId}`)
|
|
unwrap<unknown>(data)
|
|
}
|