完善接单平台上传与物品规则
This commit is contained in:
@@ -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`,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user