diff --git a/pages/picking/picking.vue b/pages/picking/picking.vue index 9ff9360..0ee5978 100644 --- a/pages/picking/picking.vue +++ b/pages/picking/picking.vue @@ -651,6 +651,14 @@ isTaskConflict(error) { return String(error?.code || '') === 'A0409' || Number(error?.statusCode) === 409 }, + remoteFailureMessage(error, fallback = '操作失败') { + const raw = String(error?.message || '').trim() + const message = /^internal server error$/i.test(raw) + ? '服务端处理异常,请联系管理员' + : (raw || fallback) + const reference = String(error?.requestId || error?.traceId || '').trim() + return reference ? `${message}(请求编号:${reference})` : message + }, async refreshAfterTaskConflict(message) { const requestedTaskId = this.remoteTaskId || this.currentBox.taskId this.submitId = '' @@ -1405,7 +1413,8 @@ await this.refreshAfterTaskConflict(error.message || '订舱、装柜关联或证据状态已变化,请刷新后重试') return } - this.remoteError = error.network ? '网络失败,装柜完成未提交' : (error.message || '装柜完成失败') + this.debugSubmit('complete.error', { message: error.message || '', code: error.code || '', statusCode: error.statusCode || '', requestIdFromServer: error.requestId || '', traceId: error.traceId || '' }) + this.remoteError = error.network ? '网络失败,装柜完成未提交' : this.remoteFailureMessage(error, '装柜完成失败') this.showToast('装柜完成失败', 'error') } finally { diff --git a/tests/picking-evidence-stage.test.mjs b/tests/picking-evidence-stage.test.mjs index 313a40a..f04b8b8 100644 --- a/tests/picking-evidence-stage.test.mjs +++ b/tests/picking-evidence-stage.test.mjs @@ -243,3 +243,12 @@ test('picking mutations stay closed until the canonical task has been claimed', assert.match(body, /if \(!this\.requirePickingOperation\(\)\) return/, `${method} should wait for claim`) } }) + +test('completion shows a Chinese server failure with a request correlation id', () => { + assert.match(page, /remoteFailureMessage\(error, fallback = '操作失败'\)/) + assert.match(page, /\^internal server error\$\/i/) + assert.match(page, /服务端处理异常,请联系管理员/) + assert.match(page, /请求编号/) + assert.match(page, /requestIdFromServer: error\.requestId/) + assert.match(page, /this\.remoteFailureMessage\(error, '装柜完成失败'\)/) +})