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>
50 lines
1.6 KiB
TypeScript
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>>()
|
|
}
|