fix(worker-platform): 修复对已冻结打手调级时误报冻结原因必填的问题
- 做了什么: 1. 后端 reviewAdminWorkerUser 中优化 freezeReason 校验条件:区分是否为新变为 rejected 状态,若账号原本已处于冻结态且本次仅调整等级未变动状态,直接沿用已有冻结原因,不再强制要求传 freezeReason; 2. 前端 submitLevel 在提交调级时补充传递打手既有的 freezeReason; 3. 后端新增对应测试用例确保后续回归。 - 为什么: 当打手处于冻结状态(rejected)时,管理员对其执行调级操作因未携带 freezeReason 触发了冻结原因校验错误,导致调级失败。 - 验证方式: 运行 npm run check(671 项测试全绿,类型与构建检查通过)。
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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 必填错误',
|
||||
)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user