完善接单平台上传与物品规则

This commit is contained in:
yml2213
2026-07-25 15:56:18 +08:00
parent f6d3f00f21
commit a2587eda01
40 changed files with 4978 additions and 1008 deletions
@@ -1,6 +1,8 @@
import { apiGet, apiPost } from '@/lib/http'
import type {
WorkCategory,
WorkOrder,
WorkProductRule,
WorkerLevel,
WorkerListResponse,
WorkerUser,
@@ -16,7 +18,27 @@ export function fetchAdminWorkerPlatformSummary() {
}
export function fetchAdminWorkerLevels() {
return apiGet<{ items: WorkerLevel[] }>('/api/v1/admin/worker-platform/levels')
return apiGet<{ items: WorkerLevel[] }>(
'/api/v1/admin/worker-platform/levels',
)
}
export function fetchAdminWorkCategories() {
return apiGet<{ items: WorkCategory[] }>(
'/api/v1/admin/worker-platform/categories',
)
}
export function saveAdminWorkCategory(payload: {
categoryKey: string
name: string
sortOrder?: number
status?: string
}) {
return apiPost<{ category: WorkCategory }>(
'/api/v1/admin/worker-platform/categories',
payload,
)
}
export function saveAdminWorkerLevel(payload: {
@@ -25,18 +47,57 @@ export function saveAdminWorkerLevel(payload: {
depositFreeAmount?: number
maxActiveOrders?: number
}) {
return apiPost<{ level: WorkerLevel }>('/api/v1/admin/worker-platform/levels', payload)
return apiPost<{ level: WorkerLevel }>(
'/api/v1/admin/worker-platform/levels',
payload,
)
}
export function fetchAdminWorkerUsers(params?: Record<string, unknown>) {
return apiGet<WorkerListResponse<WorkerUser>>('/api/v1/admin/worker-platform/workers', params)
return apiGet<WorkerListResponse<WorkerUser>>(
'/api/v1/admin/worker-platform/workers',
params,
)
}
export function fetchAdminWorkProductRules(params?: Record<string, unknown>) {
return apiGet<{ items: WorkProductRule[] }>(
'/api/v1/admin/worker-platform/product-rules',
params,
)
}
export function saveAdminWorkProductRule(payload: {
ruleKey: string
provider?: string
platform?: string
shopId?: string
skuCode?: string
productName?: string
matchType?: string
categoryId?: number
enabled?: boolean
autoCreate?: boolean
rewardAmount?: number
requiredDepositAmount?: number
depositThresholdAmount?: number
fieldsText?: string
sortOrder?: number
}) {
return apiPost<{ rule: WorkProductRule }>(
'/api/v1/admin/worker-platform/product-rules',
payload,
)
}
export function reviewAdminWorkerUser(
workerId: number,
payload: { status: string; reviewNote?: string; levelId?: number },
) {
return apiPost<{ worker: WorkerUser }>(`/api/v1/admin/worker-platform/workers/${workerId}/review`, payload)
return apiPost<{ worker: WorkerUser }>(
`/api/v1/admin/worker-platform/workers/${workerId}/review`,
payload,
)
}
export function creditAdminWorkerWallet(
@@ -50,7 +111,10 @@ export function creditAdminWorkerWallet(
}
export function fetchAdminWorkOrders(params?: Record<string, unknown>) {
return apiGet<WorkerListResponse<WorkOrder>>('/api/v1/admin/worker-platform/orders', params)
return apiGet<WorkerListResponse<WorkOrder>>(
'/api/v1/admin/worker-platform/orders',
params,
)
}
export function createAdminMockWorkOrder(payload: {
@@ -59,17 +123,49 @@ export function createAdminMockWorkOrder(payload: {
rewardAmount?: number
materialComplete?: boolean
}) {
return apiPost<{ order: WorkOrder }>('/api/v1/admin/worker-platform/orders/mock', payload)
return apiPost<{ order: WorkOrder }>(
'/api/v1/admin/worker-platform/orders/mock',
payload,
)
}
export function syncAdminWorkerOrdersFromSource(payload: {
platformOrderId?: string
orderId?: number
}) {
return apiPost<{
created: WorkOrder[]
skipped: Array<{ orderItemId: number; reason: string }>
createdCount: number
skippedCount: number
}>('/api/v1/admin/worker-platform/source-orders/sync', payload)
}
export function submitAdminWorkOrderMaterial(
workOrderId: number,
fields: Record<string, string>,
) {
return apiPost<{ order: WorkOrder; complete: boolean }>(
`/api/v1/admin/worker-platform/orders/${workOrderId}/material`,
{ fields },
)
}
export function publishAdminWorkOrder(workOrderId: number) {
return apiPost<{ order: WorkOrder }>(`/api/v1/admin/worker-platform/orders/${workOrderId}/publish`)
return apiPost<{ order: WorkOrder }>(
`/api/v1/admin/worker-platform/orders/${workOrderId}/publish`,
)
}
export function markAdminWorkOrderProblem(workOrderId: number, note: string) {
return apiPost<{ order: WorkOrder }>(`/api/v1/admin/worker-platform/orders/${workOrderId}/problem`, { note })
return apiPost<{ order: WorkOrder }>(
`/api/v1/admin/worker-platform/orders/${workOrderId}/problem`,
{ note },
)
}
export function acceptAdminWorkOrder(workOrderId: number) {
return apiPost<{ order: WorkOrder }>(`/api/v1/admin/worker-platform/orders/${workOrderId}/accept`)
return apiPost<{ order: WorkOrder }>(
`/api/v1/admin/worker-platform/orders/${workOrderId}/accept`,
)
}
+22
View File
@@ -0,0 +1,22 @@
import { apiPostForm } from '@/lib/http'
import type { UploadedFile } from '@/types/worker-platform'
import { optimizeImageForUpload } from '@/utils/image-upload'
type UploadScope = 'admin' | 'worker'
export async function uploadFile(
file: File,
scene: string,
scope: UploadScope,
) {
const uploadTarget = await optimizeImageForUpload(file, scene)
const form = new FormData()
form.append('file', uploadTarget)
form.append('scene', scene)
const endpoint =
scope === 'admin'
? '/api/v1/admin/files/upload'
: '/api/v1/worker/files/upload'
const response = await apiPostForm<{ file: UploadedFile }>(endpoint, form)
return response.data.file
}
+33 -9
View File
@@ -1,6 +1,7 @@
import { apiGet, apiPost } from '@/lib/http'
import type {
CollectField,
UploadedFile,
WorkOrder,
WorkerListResponse,
WorkerLoginResponse,
@@ -13,7 +14,10 @@ export function registerWorker(payload: {
displayName?: string
phone?: string
}) {
return apiPost<{ worker: WorkerUser; reviewRequired: boolean }>('/api/v1/worker/auth/register', payload)
return apiPost<{ worker: WorkerUser; reviewRequired: boolean }>(
'/api/v1/worker/auth/register',
payload,
)
}
export function loginWorker(payload: { username: string; password: string }) {
@@ -21,7 +25,11 @@ export function loginWorker(payload: { username: string; password: string }) {
}
export function fetchWorkerSession() {
return apiGet<{ authenticated: boolean; expiresAt: string; worker: WorkerUser }>('/api/v1/worker/auth/session')
return apiGet<{
authenticated: boolean
expiresAt: string
worker: WorkerUser
}>('/api/v1/worker/auth/session')
}
export function logoutWorker() {
@@ -29,15 +37,22 @@ export function logoutWorker() {
}
export function fetchWorkerProfile() {
return apiGet<{ worker: WorkerUser; permissions: Record<string, unknown> }>('/api/v1/worker/profile')
return apiGet<{ worker: WorkerUser; permissions: Record<string, unknown> }>(
'/api/v1/worker/profile',
)
}
export function fetchWorkerHallOrders(params?: Record<string, unknown>) {
return apiGet<WorkerListResponse<WorkOrder>>('/api/v1/worker/hall/orders', params)
return apiGet<WorkerListResponse<WorkOrder>>(
'/api/v1/worker/hall/orders',
params,
)
}
export function grabWorkerOrder(workOrderId: number) {
return apiPost<{ order: WorkOrder }>(`/api/v1/worker/hall/orders/${workOrderId}/grab`)
return apiPost<{ order: WorkOrder }>(
`/api/v1/worker/hall/orders/${workOrderId}/grab`,
)
}
export function fetchWorkerMyOrders(params?: Record<string, unknown>) {
@@ -46,14 +61,20 @@ export function fetchWorkerMyOrders(params?: Record<string, unknown>) {
export function submitWorkerAcceptance(
workOrderId: number,
payload: { note?: string; imageUrls?: string[] },
payload: { note?: string; imageUrls?: string[]; files?: UploadedFile[] },
) {
return apiPost<{ order: WorkOrder }>(`/api/v1/worker/orders/${workOrderId}/submit-acceptance`, payload)
return apiPost<{ order: WorkOrder }>(
`/api/v1/worker/orders/${workOrderId}/submit-acceptance`,
payload,
)
}
export function lookupCollectOrder(orderNo: string) {
return apiPost<{
order: Pick<WorkOrder, 'workOrderNo' | 'platformOrderId' | 'productName' | 'status'>
order: Pick<
WorkOrder,
'workOrderNo' | 'platformOrderId' | 'productName' | 'status'
>
fields: CollectField[]
}>('/api/v1/collect/lookup', { orderNo })
}
@@ -62,5 +83,8 @@ export function submitCollectOrder(payload: {
orderNo: string
fields: Record<string, string>
}) {
return apiPost<{ complete: boolean; order: Record<string, unknown> }>('/api/v1/collect/submit', payload)
return apiPost<{ complete: boolean; order: Record<string, unknown> }>(
'/api/v1/collect/submit',
payload,
)
}