From 9ed2e0d4fe97ce9c132530803eeb0fe169ae01b3 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Sun, 16 Aug 2026 19:42:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E6=89=8B=E7=AB=AF=E6=B5=81=E8=BD=AC?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=94=B9=E4=B8=BA=E5=90=8E=E5=8F=B0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=BC=80=E5=85=B3=E6=8E=A7=E5=88=B6=EF=BC=8C=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 WORKER_ORDER_TIMELINE_VISIBLE 配置(默认 false):打手端订单详情不展示流转记录 - 打手端 events 接口按开关拦截(关闭时 403) - profile 接口下发 orderTimelineVisible 供前端判断 - 管理端流转记录不受影响,始终可见 --- apps/backend/src/config/defaults.ts | 1 + apps/backend/src/config/env-overrides.ts | 1 + .../services/worker-platform/worker-service.ts | 7 +++++++ apps/backend/src/types/runtime-config.ts | 2 ++ .../src/pages/worker/WorkerOrdersPage.tsx | 18 ++++++++++++++---- apps/frontend/src/types/worker-platform.ts | 2 ++ 6 files changed, 27 insertions(+), 4 deletions(-) diff --git a/apps/backend/src/config/defaults.ts b/apps/backend/src/config/defaults.ts index e4d0cc10..97a00ae6 100644 --- a/apps/backend/src/config/defaults.ts +++ b/apps/backend/src/config/defaults.ts @@ -151,6 +151,7 @@ PfQTPNA++KsXtwRX9M6Re3vkTDRsutIIWKtj8jqhUbbYS3vzS8GJnAWavUFVkR15 cooldownSeconds: 60, dailyLimit: 10, }, + orderTimelineVisible: false, }, } } diff --git a/apps/backend/src/config/env-overrides.ts b/apps/backend/src/config/env-overrides.ts index 4d8b6607..9dafb1e6 100644 --- a/apps/backend/src/config/env-overrides.ts +++ b/apps/backend/src/config/env-overrides.ts @@ -165,6 +165,7 @@ export const ENV_OVERRIDES: readonly EnvOverride[] = [ integerEnv('WORKER_SMS_CODE_TTL_SECONDS', ['worker', 'sms', 'codeTtlSeconds']), integerEnv('WORKER_SMS_COOLDOWN_SECONDS', ['worker', 'sms', 'cooldownSeconds']), integerEnv('WORKER_SMS_DAILY_LIMIT', ['worker', 'sms', 'dailyLimit']), + booleanEnv('WORKER_ORDER_TIMELINE_VISIBLE', ['worker', 'orderTimelineVisible']), integerEnv('KUAISHOU_FEIFEI_TIMEOUT_MS', ['platforms', 'kuaishouFeifei', 'timeoutMs']), stringEnv('KUAISHOU_FEIFEI_NOTIFY_URL', ['platforms', 'kuaishouFeifei', 'notifyUrl']), kuaishouFeifeiProductRulesEnv('KUAISHOU_FEIFEI_PRODUCT_RULES_JSON', [ diff --git a/apps/backend/src/services/worker-platform/worker-service.ts b/apps/backend/src/services/worker-platform/worker-service.ts index e6900ae1..41bc562b 100644 --- a/apps/backend/src/services/worker-platform/worker-service.ts +++ b/apps/backend/src/services/worker-platform/worker-service.ts @@ -528,6 +528,7 @@ export async function getWorkerProfile(session: WorkerSession) { }, levelProgress, financeConfig, + orderTimelineVisible: runtimeConfig.worker.orderTimelineVisible === true, } } @@ -1037,6 +1038,12 @@ export async function listWorkerMyOrders(query: JsonObject = {}, session: Worker export async function getWorkerMyOrderEvents(workOrderId: number | string, session: WorkerSession) { requireActiveWorkerSession(session) + if (runtimeConfig.worker.orderTimelineVisible !== true) { + throw createHttpError('流转记录暂未对打手开放', { + statusCode: 403, + errorCode: 'work_order_events_worker_disabled', + }) + } const workOrder = await getRequiredWorkOrder(workOrderId) const workerId = Number(session.workerId) const sharingShare = await getWorkOrderShare(workOrder.id, workerId) diff --git a/apps/backend/src/types/runtime-config.ts b/apps/backend/src/types/runtime-config.ts index 6473b20f..3731969d 100644 --- a/apps/backend/src/types/runtime-config.ts +++ b/apps/backend/src/types/runtime-config.ts @@ -143,6 +143,8 @@ export type RuntimeConfig = { cooldownSeconds: number dailyLimit: number } + /** 打手端订单详情是否展示流转记录(默认关闭,仅后台可见) */ + orderTimelineVisible: boolean } cors: { allowedOrigins: string[] diff --git a/apps/frontend/src/pages/worker/WorkerOrdersPage.tsx b/apps/frontend/src/pages/worker/WorkerOrdersPage.tsx index b4652c52..bc634b06 100644 --- a/apps/frontend/src/pages/worker/WorkerOrdersPage.tsx +++ b/apps/frontend/src/pages/worker/WorkerOrdersPage.tsx @@ -35,6 +35,7 @@ import ImagePreviewList from '@/components/files/ImagePreviewList' import ImageUpload from '@/components/files/ImageUpload' import { fetchWorkerMyOrders, + fetchWorkerProfile, saveWorkerAcceptanceDraft, saveWorkerOrderNote, submitWorkerAcceptance, @@ -191,6 +192,14 @@ export default function WorkerOrdersPage() { const pagination = ordersQuery.data?.data.pagination const orders = ordersQuery.data?.data.items || [] + // 流转记录对打手是否可见(后台配置开关,默认关闭) + const profileQuery = useQuery({ + queryKey: ['worker-profile'], + queryFn: () => fetchWorkerProfile(), + retry: false, + }) + const orderTimelineVisible = profileQuery.data?.data.orderTimelineVisible === true + const overviewQuery = useQuery({ queryKey: ['worker-my-orders-overview'], queryFn: async () => { @@ -1104,13 +1113,14 @@ export default function WorkerOrdersPage() { ) : null} - - - + {orderTimelineVisible ? ( + + + + ) : null} ) : null} -