import { adminClient } from '@/shared/api/adminClient' import type { ApiResponse } from '@/shared/api/types' import type { AdminCaptcha, AdminListing, AdminListingPage, AdminListingQuery, AdminLoginData, AdminOrderDetail, AdminOrderPage, AdminOrderQuery, AdminUser, DashboardData, } from '@/features/admin/types' export async function fetchAdminCaptcha() { const { data } = await adminClient.get>('/admin/auth/captcha') return data.data } export async function loginAdmin( username: string, password: string, captchaId: string, captchaCode: string ) { const { data } = await adminClient.post>('/admin/auth/login', { username, password, captcha_id: captchaId, captcha_code: captchaCode, }) return data.data } export async function fetchAdminMe() { const { data } = await adminClient.get>('/admin/me') return data.data } export async function logoutAdmin() { await adminClient.post('/admin/auth/logout') } export async function changeAdminPassword(oldPassword: string, newPassword: string) { await adminClient.put('/admin/admin-users/me/password', { old_password: oldPassword, new_password: newPassword, }) } export async function fetchAdminDashboard() { const { data } = await adminClient.get>('/admin/dashboard') return data.data } function compactParams(query: T) { return Object.fromEntries( Object.entries(query).filter(([, value]) => value !== '' && value != null) ) } export async function fetchAdminOrders(query: AdminOrderQuery) { const { data } = await adminClient.get>>('/admin/orders', { params: compactParams(query), }) return { items: data.data.items ?? [], total: data.data.total ?? 0, page: data.data.page ?? query.page ?? 1, page_size: data.data.page_size ?? query.page_size ?? 20, } } export async function fetchAdminOrder(id: number | string) { const { data } = await adminClient.get>(`/admin/orders/${id}`) return data.data } export async function fetchAdminListings(query: AdminListingQuery) { const { data } = await adminClient.get>>('/admin/listings', { params: compactParams(query), }) return { items: data.data.items ?? [], total: data.data.total ?? 0, page: data.data.page ?? query.page ?? 1, page_size: data.data.page_size ?? query.page_size ?? 20, } } export async function fetchAdminListing(id: number | string) { const { data } = await adminClient.get>(`/admin/listings/${id}`) return data.data } /** 审核队列使用独立接口:权限为 listing:approve,且返回全部待审商品。 */ export async function fetchAdminPendingListings() { const { data } = await adminClient.get>( '/admin/listings/pending' ) return data.data.items ?? [] } export async function approveAdminListing(id: number | string) { const { data } = await adminClient.post>(`/admin/listings/${id}/approve`) return data.data } export async function rejectAdminListing(id: number | string, reason: string) { const { data } = await adminClient.post>( `/admin/listings/${id}/reject`, { reason } ) return data.data } export async function offlineAdminListing(id: number | string, reason: string) { const { data } = await adminClient.post>( `/admin/listings/${id}/offline`, { reason } ) return data.data } export async function markAbnormalAdminListing(id: number | string, reason: string) { const { data } = await adminClient.post>( `/admin/listings/${id}/mark-abnormal`, { reason } ) return data.data }