duoqi-admin/src/lib/api/admin-api.ts
Wang Zhuoxuan 0a31f8634e feat: 实现 Phase 3 — UGC 审核、举报处理、运营配置、多管理员
Phase 3a - UGC 审核队列:
- 题目列表添加来源 Tab 切换(全部/官方/用户投稿)
- UGC 审核对话框,支持通过/拒绝并填写备注
- 添加来源列和审核操作入口

Phase 3b - 举报处理:
- 举报列表页面,支持搜索和筛选
- 举报详情对话框,支持驳回/采纳处理
- 5 种举报原因和 4 种处理状态

Phase 3c - 运营配置:
- 设置页面使用 Tabs 布局
- 活动配置:XP 加成、时间范围、状态管理
- 推送文案:模板管理、变量支持、测试发送
- 通用设置:应用级配置项管理

Phase 3d - 多管理员支持:
- 用户名密码登录(替换 Token 登录)
- 管理员管理页面:创建、删除、重置密码
- 角色区分:admin(管理员)/ moderator(审核员)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 15:38:07 +08:00

50 lines
1.6 KiB
TypeScript

import { apiClient } from "@/lib/api-client"
import type { ApiResponse } from "@/types/api"
import type { Admin, AdminLoginForm, AdminSession, CreateAdminForm } from "@/types/admin"
// 认证
export async function loginAdmin(
credentials: AdminLoginForm
): Promise<ApiResponse<AdminSession>> {
return apiClient.post("auth/login", { json: credentials }).json<ApiResponse<AdminSession>>()
}
export async function fetchMe(): Promise<ApiResponse<Admin>> {
return apiClient.get("auth/me").json<ApiResponse<Admin>>()
}
// 管理员管理
export async function fetchAdmins(): Promise<ApiResponse<Admin[]>> {
return apiClient.get("admins").json<ApiResponse<Admin[]>>()
}
export async function fetchAdmin(id: string): Promise<ApiResponse<Admin>> {
return apiClient.get(`admins/${id}`).json<ApiResponse<Admin>>()
}
export async function createAdmin(
data: CreateAdminForm
): Promise<ApiResponse<Admin>> {
return apiClient.post("admins", { json: data }).json<ApiResponse<Admin>>()
}
export async function updateAdmin(
id: string,
data: Partial<CreateAdminForm>
): Promise<ApiResponse<Admin>> {
return apiClient.put(`admins/${id}`, { json: data }).json<ApiResponse<Admin>>()
}
export async function deleteAdmin(id: string): Promise<ApiResponse<{ id: string }>> {
return apiClient.delete(`admins/${id}`).json<ApiResponse<{ id: string }>>()
}
export async function resetAdminPassword(
id: string,
newPassword: string
): Promise<ApiResponse<Admin>> {
return apiClient
.post(`admins/${id}/reset-password`, { json: { password: newPassword } })
.json<ApiResponse<Admin>>()
}