diff --git a/apps/backend/src/routes/worker.ts b/apps/backend/src/routes/worker.ts index afd8a880..66927df9 100644 --- a/apps/backend/src/routes/worker.ts +++ b/apps/backend/src/routes/worker.ts @@ -4,7 +4,6 @@ import { createRateLimitMiddleware, getBodyFieldRateLimitKey } from '../middlewa import { uploadSingleFile } from './file-upload.js' import { uploadFileAsset } from '../services/file-storage/file-storage-service.js' import { - cancelWorkerOrder, changeWorkerPassword, createWorkerRechargeRequest, createWorkerWithdrawRequest, @@ -284,19 +283,6 @@ router.post( ), ) -router.post( - '/orders/:workOrderId/cancel', - requireActiveWorker, - createRouteHandler( - (req) => cancelWorkerOrder(String(req.params.workOrderId || ''), getRequiredWorkerSession(req)), - { - successMessage: '已取消接单', - errorMessage: '取消接单失败', - scope: '[worker/orders/:workOrderId/cancel]', - }, - ), -) - router.use((req, res) => { res.status(404).json(buildNotFoundPayload(req)) }) diff --git a/apps/backend/src/services/worker-platform/worker-finance-config-service.ts b/apps/backend/src/services/worker-platform/worker-finance-config-service.ts index 67129565..d1daf27b 100644 --- a/apps/backend/src/services/worker-platform/worker-finance-config-service.ts +++ b/apps/backend/src/services/worker-platform/worker-finance-config-service.ts @@ -17,6 +17,9 @@ export type WorkerFinanceConfig = { qrCodeImage: UploadedFileDto | null instructions: string } + adminContact: { + wechatQrCodeImage: UploadedFileDto | null + } withdraw: { enabled: boolean instructions: string @@ -44,6 +47,11 @@ export async function saveWorkerFinanceConfig(rawValue: unknown): Promise= WORKER_CANCEL_LIMIT_PER_WINDOW) { - throw createHttpError( - `30 天内取消接单已达 ${WORKER_CANCEL_LIMIT_PER_WINDOW} 次上限,请谨慎接单`, - { - statusCode: 409, - errorCode: 'worker_cancel_limit_reached', - }, - ) - } - const result = await cancelWorkerWorkOrder({ - workOrderId: Number(workOrderId), - workerId: Number(worker.id), - now, - }) - if (result.failureReason === 'work_order_owner_required') { - throw createHttpError('只能取消自己接的订单', { - statusCode: 403, - errorCode: 'work_order_owner_required', - }) - } - if (!result.order) { - throw createHttpError('当前订单状态不能取消,仅进行中的订单可取消', { - statusCode: 409, - errorCode: 'work_order_cancel_status_invalid', - }) - } - return { - order: mapWorkOrderForWorker( - result.order, - resolveWorkerPermissions(await getRequiredWorker(session.workerId)), - ), - } -} - export async function submitWorkerOrderAcceptance( workOrderId: number | string, payload: JsonObject = {}, diff --git a/apps/frontend/src/pages/admin/panels/FinancePanel.tsx b/apps/frontend/src/pages/admin/panels/FinancePanel.tsx index 8938c294..1c6dc21a 100644 --- a/apps/frontend/src/pages/admin/panels/FinancePanel.tsx +++ b/apps/frontend/src/pages/admin/panels/FinancePanel.tsx @@ -92,6 +92,9 @@ type FinanceConfigFormValues = { qrCodeImageList?: UploadedFile[] instructions?: string } + adminContact?: { + wechatQrCodeImageList?: UploadedFile[] + } withdraw?: { enabled?: boolean instructions?: string @@ -177,6 +180,9 @@ export default function FinancePanel() { qrCodeImage: values.recharge?.qrCodeImageList?.[0] || null, instructions: String(values.recharge?.instructions || '').trim(), }, + adminContact: { + wechatQrCodeImage: values.adminContact?.wechatQrCodeImageList?.[0] || null, + }, withdraw: { enabled: values.withdraw?.enabled !== false, instructions: String(values.withdraw?.instructions || '').trim(), @@ -371,6 +377,15 @@ export default function FinancePanel() { + + + + + + { - try { - await cancelWorkerOrder(order.workOrderId) - message.success('已取消接单,押金已退还') - await refreshAll() - } catch (error) { - message.error(error instanceof Error ? error.message : '取消接单失败') - } - }, - }) - } - const columns: TableColumnsType = [ { title: '订单信息', @@ -464,11 +443,6 @@ export default function WorkerOrdersPage() { ) : null} - {canCancelOrder(row) ? ( - - ) : null} ), }, @@ -596,11 +570,6 @@ export default function WorkerOrdersPage() { {formatStatus(detailOrder.status)} - {canCancelOrder(detailOrder) ? ( - - ) : null} {canEditAcceptanceImages(detailOrder) ? (