feat(admin): 新增后台商品管理与审核视图

This commit is contained in:
yml2213
2026-10-30 13:01:55 +08:00
parent a978ec07f4
commit cd66bca9d5
9 changed files with 1052 additions and 7 deletions
+58 -1
View File
@@ -2,6 +2,9 @@ import { adminClient } from '@/shared/api/adminClient'
import type { ApiResponse } from '@/shared/api/types'
import type {
AdminCaptcha,
AdminListing,
AdminListingPage,
AdminListingQuery,
AdminLoginData,
AdminOrderDetail,
AdminOrderPage,
@@ -51,7 +54,7 @@ export async function fetchAdminDashboard() {
return data.data
}
function compactParams(query: AdminOrderQuery) {
function compactParams<T extends object>(query: T) {
return Object.fromEntries(
Object.entries(query).filter(([, value]) => value !== '' && value != null)
)
@@ -73,3 +76,57 @@ export async function fetchAdminOrder(id: number | string) {
const { data } = await adminClient.get<ApiResponse<AdminOrderDetail>>(`/admin/orders/${id}`)
return data.data
}
export async function fetchAdminListings(query: AdminListingQuery) {
const { data } = await adminClient.get<ApiResponse<Partial<AdminListingPage>>>('/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<ApiResponse<AdminListing>>(`/admin/listings/${id}`)
return data.data
}
/** 审核队列使用独立接口:权限为 listing:approve,且返回全部待审商品。 */
export async function fetchAdminPendingListings() {
const { data } = await adminClient.get<ApiResponse<{ items: AdminListing[] }>>(
'/admin/listings/pending'
)
return data.data.items ?? []
}
export async function approveAdminListing(id: number | string) {
const { data } = await adminClient.post<ApiResponse<AdminListing>>(`/admin/listings/${id}/approve`)
return data.data
}
export async function rejectAdminListing(id: number | string, reason: string) {
const { data } = await adminClient.post<ApiResponse<AdminListing>>(
`/admin/listings/${id}/reject`,
{ reason }
)
return data.data
}
export async function offlineAdminListing(id: number | string, reason: string) {
const { data } = await adminClient.post<ApiResponse<AdminListing>>(
`/admin/listings/${id}/offline`,
{ reason }
)
return data.data
}
export async function markAbnormalAdminListing(id: number | string, reason: string) {
const { data } = await adminClient.post<ApiResponse<AdminListing>>(
`/admin/listings/${id}/mark-abnormal`,
{ reason }
)
return data.data
}