diff --git a/apps/backend/src/services/worker-platform/admin-worker-user-service.ts b/apps/backend/src/services/worker-platform/admin-worker-user-service.ts index 40436a95..6f72a268 100644 --- a/apps/backend/src/services/worker-platform/admin-worker-user-service.ts +++ b/apps/backend/src/services/worker-platform/admin-worker-user-service.ts @@ -77,10 +77,17 @@ export async function reviewAdminWorkerUser( operatorUsername: string = '', ) { const worker = await getRequiredWorker(workerId) - const status = normalizeReviewStatus(payload.status) + const status = + payload.status !== undefined && payload.status !== null + ? normalizeReviewStatus(payload.status) + : worker.status + const isNewlyRejected = status === 'rejected' && worker.status !== 'rejected' + const rawFreezeReason = payload.freezeReason ?? payload.freeze_reason const freezeReason = status === 'rejected' - ? normalizeWorkerFreezeReason(payload.freezeReason ?? payload.freeze_reason) + ? isNewlyRejected || rawFreezeReason !== undefined + ? normalizeWorkerFreezeReason(rawFreezeReason ?? worker.frozen_reason) + : worker.frozen_reason || '' : worker.frozen_reason || '' const workerType = normalizeWorkerType(payload.workerType ?? payload.worker_type) const requestedLevelId = normalizeOptionalId(payload.levelId) diff --git a/apps/backend/src/services/worker-platform/worker-platform-service.test.ts b/apps/backend/src/services/worker-platform/worker-platform-service.test.ts index 5fbe6543..428f1e23 100644 --- a/apps/backend/src/services/worker-platform/worker-platform-service.test.ts +++ b/apps/backend/src/services/worker-platform/worker-platform-service.test.ts @@ -3050,3 +3050,12 @@ test('接单排行榜必须有短缓存(单次全表聚合 277MB/742ms,独 '排行榜缓存键必须包含 workerId 与 period', ) }) + +test('已冻结打手调级或变更资料不应因未传 freezeReason 报错', async () => { + const { readFile } = await import('node:fs/promises') + const src = await readFile(new URL('./admin-worker-user-service.ts', import.meta.url), 'utf8') + assert.ok( + src.includes('isNewlyRejected'), + '必须区分是否为新冻结,防止已冻结账号调级时抛出 freeze_reason 必填错误', + ) +}) diff --git a/apps/frontend/src/pages/admin/panels/WorkersPanel.tsx b/apps/frontend/src/pages/admin/panels/WorkersPanel.tsx index 9d245f67..1c46aea6 100644 --- a/apps/frontend/src/pages/admin/panels/WorkersPanel.tsx +++ b/apps/frontend/src/pages/admin/panels/WorkersPanel.tsx @@ -405,6 +405,7 @@ export default function WorkersPanel() { status: levelWorker.status, levelId: Number(values.levelId || 0), reviewNote: levelWorker.reviewNote, + freezeReason: levelWorker.freezeReason, isLevelLocked: Boolean(values.isLevelLocked), levelLockedReason: values.levelLockedReason?.trim() || undefined, })