feat(distribution): 补齐分销长尾后台页面
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { adminClient } from '@/shared/api/adminClient'
|
||||
import type { ApiResponse } from '@/shared/api/types'
|
||||
import type {
|
||||
AdminAccountDisplay,
|
||||
AdminAnnouncement,
|
||||
AdminAnnouncementPage,
|
||||
AdminAnnouncementPayload,
|
||||
@@ -12,8 +13,30 @@ import type {
|
||||
AdminDispute,
|
||||
AdminDisputePage,
|
||||
AdminDisputeQuery,
|
||||
AdminDistributionInvitationConfig,
|
||||
AdminDistributionOrder,
|
||||
AdminDistributionOrderPage,
|
||||
AdminDistributionOrderQuery,
|
||||
AdminDistributionQrCode,
|
||||
AdminDistributionQrCodePage,
|
||||
AdminDistributionQrCodeQuery,
|
||||
AdminDistributionQrCodeStats,
|
||||
AdminDistributionRule,
|
||||
AdminDistributionRuleQuery,
|
||||
AdminDistributionSettlementBatch,
|
||||
AdminDistributionSettlementItem,
|
||||
AdminDistributionSite,
|
||||
AdminDistributionSiteUpdatePayload,
|
||||
AdminDistributionSMSConfig,
|
||||
AdminDistributionUserPage,
|
||||
AdminDistributionUserQuery,
|
||||
AdminDistributionWallet,
|
||||
AdminDistributionWithdrawal,
|
||||
AdminDistributionWithdrawalPage,
|
||||
AdminSiteAnnouncement,
|
||||
AdminSiteAnnouncementPage,
|
||||
AdminSiteAnnouncementPayload,
|
||||
AdminSiteAnnouncementQuery,
|
||||
AdminListing,
|
||||
AdminListingPage,
|
||||
AdminListingQuery,
|
||||
@@ -21,6 +44,10 @@ import type {
|
||||
AdminOrderDetail,
|
||||
AdminOrderPage,
|
||||
AdminOrderQuery,
|
||||
AdminPaymentChannel,
|
||||
AdminPaymentConfigOption,
|
||||
AdminReceivedListingPage,
|
||||
AdminReceivedListingQuery,
|
||||
AdminSystemConfig,
|
||||
AdminSystemConfigUpdatePayload,
|
||||
AdminUser,
|
||||
@@ -30,6 +57,10 @@ import type {
|
||||
AdminWithdrawal,
|
||||
AdminWithdrawalPage,
|
||||
AdminWithdrawalQuery,
|
||||
ApplyAdminDistributionWithdrawalPayload,
|
||||
CreateAdminDistributionQrCodeItem,
|
||||
CreateAdminDistributionRulePayload,
|
||||
CreateAdminDistributionSettlementBatchPayload,
|
||||
DashboardData,
|
||||
FinanceDashboard,
|
||||
FinanceDetailPage,
|
||||
@@ -39,6 +70,10 @@ import type {
|
||||
OperatingExpensePage,
|
||||
OperatingExpensePayload,
|
||||
OperatingExpenseQuery,
|
||||
TestAdminDistributionSMSConfigPayload,
|
||||
UpdateAdminDistributionInvitationConfigPayload,
|
||||
UpdateAdminDistributionQrCodePayload,
|
||||
UpdateAdminDistributionSMSConfigPayload,
|
||||
} from '@/features/admin/types'
|
||||
|
||||
export async function fetchAdminCaptcha() {
|
||||
@@ -469,6 +504,438 @@ export async function updateAdminDistributionSite(
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function fetchAdminDistributionWallet(id: number | string) {
|
||||
const { data } = await adminClient.get<ApiResponse<AdminDistributionWallet>>(
|
||||
`/admin/distribution/sites/${id}/wallet`
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function applyAdminDistributionWithdrawal(
|
||||
id: number | string,
|
||||
payload: ApplyAdminDistributionWithdrawalPayload
|
||||
) {
|
||||
const { data } = await adminClient.post<ApiResponse<AdminDistributionWithdrawal>>(
|
||||
`/admin/distribution/sites/${id}/withdrawals`,
|
||||
payload
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function fetchAdminDistributionWithdrawals(
|
||||
id: number | string,
|
||||
query: { page?: number; page_size?: number }
|
||||
) {
|
||||
const { data } = await adminClient.get<ApiResponse<Partial<AdminDistributionWithdrawalPage>>>(
|
||||
`/admin/distribution/sites/${id}/withdrawals`,
|
||||
{ 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 fetchAdminDistributionSMSConfig(id: number | string) {
|
||||
const { data } = await adminClient.get<ApiResponse<AdminDistributionSMSConfig>>(
|
||||
`/admin/distribution/sites/${id}/sms-config`
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function updateAdminDistributionSMSConfig(
|
||||
id: number | string,
|
||||
payload: UpdateAdminDistributionSMSConfigPayload
|
||||
) {
|
||||
const { data } = await adminClient.put<ApiResponse<AdminDistributionSMSConfig>>(
|
||||
`/admin/distribution/sites/${id}/sms-config`,
|
||||
payload
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function testAdminDistributionSMSConfig(
|
||||
id: number | string,
|
||||
payload: TestAdminDistributionSMSConfigPayload
|
||||
) {
|
||||
const { data } = await adminClient.post<ApiResponse<{ message?: string }>>(
|
||||
`/admin/distribution/sites/${id}/sms-config/test`,
|
||||
payload
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function fetchAdminDistributionInvitationConfig(id: number | string) {
|
||||
const { data } = await adminClient.get<ApiResponse<AdminDistributionInvitationConfig>>(
|
||||
`/admin/distribution/sites/${id}/invitation-config`
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function updateAdminDistributionInvitationConfig(
|
||||
id: number | string,
|
||||
payload: UpdateAdminDistributionInvitationConfigPayload
|
||||
) {
|
||||
const { data } = await adminClient.put<ApiResponse<AdminDistributionInvitationConfig>>(
|
||||
`/admin/distribution/sites/${id}/invitation-config`,
|
||||
payload
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function fetchAdminDistributionQrCodes(
|
||||
id: number | string,
|
||||
query: AdminDistributionQrCodeQuery
|
||||
) {
|
||||
const { data } = await adminClient.get<ApiResponse<Partial<AdminDistributionQrCodePage>>>(
|
||||
`/admin/distribution/sites/${id}/qrcodes`,
|
||||
{ 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.limit ?? 20,
|
||||
}
|
||||
}
|
||||
|
||||
export async function fetchAdminDistributionQrCodeStats(id: number | string) {
|
||||
const { data } = await adminClient.get<ApiResponse<Partial<AdminDistributionQrCodeStats>>>(
|
||||
`/admin/distribution/sites/${id}/qrcodes/stats`
|
||||
)
|
||||
return {
|
||||
unused_count: data.data.unused_count ?? 0,
|
||||
used_count: data.data.used_count ?? 0,
|
||||
disabled_count: data.data.disabled_count ?? 0,
|
||||
total_count: data.data.total_count ?? 0,
|
||||
}
|
||||
}
|
||||
|
||||
export async function batchCreateAdminDistributionQrCodes(
|
||||
id: number | string,
|
||||
items: CreateAdminDistributionQrCodeItem[]
|
||||
) {
|
||||
const { data } = await adminClient.post<ApiResponse<AdminDistributionQrCode[]>>(
|
||||
`/admin/distribution/sites/${id}/qrcodes/batch`,
|
||||
{ items }
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function batchDeleteAdminDistributionQrCodes(
|
||||
id: number | string,
|
||||
ids: number[]
|
||||
) {
|
||||
const { data } = await adminClient.post<ApiResponse<{ deleted?: number }>>(
|
||||
`/admin/distribution/sites/${id}/qrcodes/batch-delete`,
|
||||
{ ids }
|
||||
)
|
||||
return data.data.deleted ?? 0
|
||||
}
|
||||
|
||||
export async function updateAdminDistributionQrCode(
|
||||
id: number | string,
|
||||
qrcodeId: number,
|
||||
payload: UpdateAdminDistributionQrCodePayload
|
||||
) {
|
||||
await adminClient.patch(`/admin/distribution/sites/${id}/qrcodes/${qrcodeId}`, payload)
|
||||
}
|
||||
|
||||
export async function deleteAdminDistributionQrCode(id: number | string, qrcodeId: number) {
|
||||
await adminClient.delete(`/admin/distribution/sites/${id}/qrcodes/${qrcodeId}`)
|
||||
}
|
||||
|
||||
export async function fetchAdminDistributionRules(query: AdminDistributionRuleQuery) {
|
||||
const { data } = await adminClient.get<ApiResponse<{ items?: AdminDistributionRule[] }>>(
|
||||
'/admin/distribution/rules',
|
||||
{ params: compactParams(query) }
|
||||
)
|
||||
return data.data.items ?? []
|
||||
}
|
||||
|
||||
export async function createAdminDistributionRule(payload: CreateAdminDistributionRulePayload) {
|
||||
const { data } = await adminClient.post<ApiResponse<AdminDistributionRule>>(
|
||||
'/admin/distribution/rules',
|
||||
payload
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function updateAdminDistributionRuleStatus(
|
||||
id: number,
|
||||
status: 'draft' | 'active' | 'disabled'
|
||||
) {
|
||||
const { data } = await adminClient.put<ApiResponse<AdminDistributionRule>>(
|
||||
`/admin/distribution/rules/${id}/status`,
|
||||
{ status }
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function fetchAdminDistributionOrders(query: AdminDistributionOrderQuery) {
|
||||
const { data } = await adminClient.get<ApiResponse<Partial<AdminDistributionOrderPage>>>(
|
||||
'/admin/distribution/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 fetchAdminDistributionOrder(id: number) {
|
||||
const { data } = await adminClient.get<ApiResponse<AdminDistributionOrder>>(
|
||||
`/admin/distribution/orders/${id}`
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function fetchAdminDistributionSettlementBatches(siteId: number) {
|
||||
const { data } = await adminClient.get<
|
||||
ApiResponse<{ items?: AdminDistributionSettlementBatch[] }>
|
||||
>('/admin/distribution/settlement-batches', { params: { site_id: siteId } })
|
||||
return data.data.items ?? []
|
||||
}
|
||||
|
||||
export async function createAdminDistributionSettlementBatch(
|
||||
payload: CreateAdminDistributionSettlementBatchPayload
|
||||
) {
|
||||
const { data } = await adminClient.post<ApiResponse<AdminDistributionSettlementBatch>>(
|
||||
'/admin/distribution/settlement-batches',
|
||||
payload
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function fetchAdminDistributionSettlementItems(batchId: number) {
|
||||
const { data } = await adminClient.get<
|
||||
ApiResponse<{ items?: AdminDistributionSettlementItem[] }>
|
||||
>(`/admin/distribution/settlement-batches/${batchId}/items`)
|
||||
return data.data.items ?? []
|
||||
}
|
||||
|
||||
export async function settleAdminDistributionSettlementBatch(batchId: number) {
|
||||
const { data } = await adminClient.post<ApiResponse<AdminDistributionSettlementBatch>>(
|
||||
`/admin/distribution/settlement-batches/${batchId}/settle`
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function cancelAdminDistributionSettlementBatch(batchId: number) {
|
||||
const { data } = await adminClient.post<ApiResponse<AdminDistributionSettlementBatch>>(
|
||||
`/admin/distribution/settlement-batches/${batchId}/cancel`
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function fetchAdminDistributionUsers(
|
||||
siteId: number,
|
||||
query: AdminDistributionUserQuery
|
||||
) {
|
||||
const { data } = await adminClient.get<ApiResponse<Partial<AdminDistributionUserPage>>>(
|
||||
'/admin/distribution/users',
|
||||
{ params: compactParams({ ...query, site_id: siteId }) }
|
||||
)
|
||||
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,
|
||||
total_users: data.data.total_users ?? 0,
|
||||
order_users: data.data.order_users ?? 0,
|
||||
}
|
||||
}
|
||||
|
||||
export async function fetchAdminSiteAnnouncements(
|
||||
siteId: number,
|
||||
query: AdminSiteAnnouncementQuery
|
||||
) {
|
||||
const { data } = await adminClient.get<ApiResponse<Partial<AdminSiteAnnouncementPage>>>(
|
||||
'/admin/distribution/announcements',
|
||||
{ params: compactParams({ ...query, site_id: siteId }) }
|
||||
)
|
||||
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 createAdminSiteAnnouncement(
|
||||
siteId: number,
|
||||
payload: AdminSiteAnnouncementPayload
|
||||
) {
|
||||
const { data } = await adminClient.post<ApiResponse<AdminSiteAnnouncement>>(
|
||||
'/admin/distribution/announcements',
|
||||
payload,
|
||||
{ params: { site_id: siteId } }
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function updateAdminSiteAnnouncement(
|
||||
siteId: number,
|
||||
id: number,
|
||||
payload: AdminSiteAnnouncementPayload
|
||||
) {
|
||||
const { data } = await adminClient.put<ApiResponse<AdminSiteAnnouncement>>(
|
||||
`/admin/distribution/announcements/${id}`,
|
||||
payload,
|
||||
{ params: { site_id: siteId } }
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function publishAdminSiteAnnouncement(siteId: number, id: number) {
|
||||
const { data } = await adminClient.post<ApiResponse<AdminSiteAnnouncement>>(
|
||||
`/admin/distribution/announcements/${id}/publish`,
|
||||
{},
|
||||
{ params: { site_id: siteId } }
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function archiveAdminSiteAnnouncement(siteId: number, id: number) {
|
||||
const { data } = await adminClient.post<ApiResponse<AdminSiteAnnouncement>>(
|
||||
`/admin/distribution/announcements/${id}/archive`,
|
||||
{},
|
||||
{ params: { site_id: siteId } }
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function unarchiveAdminSiteAnnouncement(siteId: number, id: number) {
|
||||
const { data } = await adminClient.post<ApiResponse<AdminSiteAnnouncement>>(
|
||||
`/admin/distribution/announcements/${id}/unarchive`,
|
||||
{},
|
||||
{ params: { site_id: siteId } }
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function deleteAdminSiteAnnouncement(siteId: number, id: number) {
|
||||
await adminClient.delete(`/admin/distribution/announcements/${id}`, {
|
||||
params: { site_id: siteId },
|
||||
})
|
||||
}
|
||||
|
||||
export async function fetchAdminReceivedListings(
|
||||
siteId: number,
|
||||
query: AdminReceivedListingQuery
|
||||
) {
|
||||
const { data } = await adminClient.get<ApiResponse<Partial<AdminReceivedListingPage>>>(
|
||||
'/admin/distribution/received-listings',
|
||||
{ params: compactParams({ ...query, site_id: siteId }) }
|
||||
)
|
||||
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 updateAdminReceivedListingStatus(
|
||||
listingId: number,
|
||||
status: 'published' | 'offline'
|
||||
) {
|
||||
await adminClient.put(`/admin/distribution/received-listings/${listingId}/status`, { status })
|
||||
}
|
||||
|
||||
export async function fetchAdminAccountDisplays(siteId: number, status?: string) {
|
||||
const { data } = await adminClient.get<ApiResponse<{ items?: AdminAccountDisplay[] }>>(
|
||||
'/admin/distribution/accounts',
|
||||
{ params: compactParams({ site_id: siteId, status }) }
|
||||
)
|
||||
return data.data.items ?? []
|
||||
}
|
||||
|
||||
export async function updateAdminAccountDisplay(
|
||||
id: number,
|
||||
displayStatus: 'enabled' | 'disabled'
|
||||
) {
|
||||
const { data } = await adminClient.put<ApiResponse<AdminAccountDisplay>>(
|
||||
`/admin/distribution/accounts/${id}/display`,
|
||||
{ display_status: displayStatus }
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function updateAdminAccountMarkup(id: number, shelfRatioDelta: number) {
|
||||
const { data } = await adminClient.put<ApiResponse<AdminAccountDisplay>>(
|
||||
`/admin/distribution/accounts/${id}/markup`,
|
||||
{ shelf_ratio_delta: shelfRatioDelta }
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function batchUpdateAdminAccountDisplays(
|
||||
siteId: number,
|
||||
displayIds: number[],
|
||||
targetStatus: 'enabled' | 'disabled'
|
||||
) {
|
||||
await adminClient.post(
|
||||
'/admin/distribution/accounts/batch-display',
|
||||
{
|
||||
display_ids: displayIds,
|
||||
target_status: targetStatus,
|
||||
},
|
||||
{ params: { site_id: siteId } }
|
||||
)
|
||||
}
|
||||
|
||||
export async function batchUpdateAdminAccountMarkup(
|
||||
siteId: number,
|
||||
displayIds: number[],
|
||||
shelfRatioDelta: number
|
||||
) {
|
||||
await adminClient.post(
|
||||
'/admin/distribution/accounts/batch-markup',
|
||||
{
|
||||
display_ids: displayIds,
|
||||
shelf_ratio_delta: shelfRatioDelta,
|
||||
},
|
||||
{ params: { site_id: siteId } }
|
||||
)
|
||||
}
|
||||
|
||||
export async function fetchAdminPaymentChannels(siteId: number) {
|
||||
const { data } = await adminClient.get<ApiResponse<{ items?: AdminPaymentChannel[] }>>(
|
||||
'/admin/distribution/payment-channels',
|
||||
{ params: { site_id: siteId } }
|
||||
)
|
||||
return data.data.items ?? []
|
||||
}
|
||||
|
||||
export async function bindAdminPaymentChannel(
|
||||
siteId: number,
|
||||
configId: number,
|
||||
priority: number
|
||||
) {
|
||||
const { data } = await adminClient.post<ApiResponse<AdminPaymentChannel>>(
|
||||
'/admin/distribution/payment-channels',
|
||||
{ config_id: configId, priority },
|
||||
{ params: { site_id: siteId } }
|
||||
)
|
||||
return data.data
|
||||
}
|
||||
|
||||
export async function unbindAdminPaymentChannel(id: number) {
|
||||
await adminClient.delete(`/admin/distribution/payment-channels/${id}`)
|
||||
}
|
||||
|
||||
export async function fetchAdminPaymentConfigOptions() {
|
||||
const { data } = await adminClient.get<
|
||||
ApiResponse<{ items?: AdminPaymentConfigOption[] }>
|
||||
>('/admin/payment-configs', { params: { page: 1, page_size: 100 } })
|
||||
return data.data.items ?? []
|
||||
}
|
||||
|
||||
export async function fetchFinanceDisbursements(query: FinanceDisbursementQuery) {
|
||||
const { data } = await adminClient.get<ApiResponse<Partial<FinanceDisbursementPage>>>(
|
||||
'/admin/finance/disbursements',
|
||||
|
||||
Reference in New Issue
Block a user