From 670988816ce07e4ae03d548e4fd1dfc9cec01a94 Mon Sep 17 00:00:00 2001 From: chenxing Date: Tue, 15 Sep 2026 19:04:46 +0800 Subject: [PATCH] =?UTF-8?q?fix(api):=20=E4=BF=AE=E6=AD=A3=20POST=20?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E4=BD=93=E4=B8=A2=E5=A4=B1=E8=87=B4=20def/sa?= =?UTF-8?q?ve=20=E6=8A=A5=20body=20missing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit alova 的 Method 请求体是构造函数第 5 个参数(instance.data),不是 config 上的键。 原 post() 把 body 塞进 config,被适配器静默忽略,POST 恒发空 body, 后端 @RequestBody 直接抛 HttpMessageNotReadableException: Required request body is missing。 受影响的接口(同一 helper): - def/save、map/save、callback/repush:一律 400 Required request body is missing - task/reject:opinion 送不到,而 FlowTaskService 强制要求非空,拒绝必然失败 - task/approve:请求成功但审批意见被静默丢弃 同时: - Defs.vue 保存时回传 baseGuid,否则「升版本」会另起流程线而非同线升版本 - 补上调用方已在使用但 FlowApi 未定义的 callbackHung / callbackMarkDead 验证:本地后端实测 def/save 带 body 返回 code=0(新建草稿、编辑草稿、 baseGuid 升版本 version+1 且 flowGuid 不变);alova 运行时对照确认 config.body 与 config.data 均发不出 body,仅第 5 参有效。 --- src/api/module/flow.ts | 14 ++++++++++++-- src/views/flow/admin/Defs.vue | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/api/module/flow.ts b/src/api/module/flow.ts index a2de2c3..50b70f7 100644 --- a/src/api/module/flow.ts +++ b/src/api/module/flow.ts @@ -11,8 +11,10 @@ function get(url: string, params?: Record): Method { return new Method("GET", alovaInstance, url, { params }); } +// alova 的请求体是 Method 构造的第 5 个参数(instance.data),不是 config 上的键: +// 写进 config 的 body/data 都会被适配器忽略,POST 将发出空 body。 function post(url: string, body?: any): Method { - return new Method("POST", alovaInstance, url, { body: body ?? {} }); + return new Method("POST", alovaInstance, url, {}, body); } /** 状态枚举(后端 FlwEnums 口径) */ @@ -82,7 +84,7 @@ class FlowApi { defGet(id: number | string) { return get(`${ROOT}/admin/def/get`, { id }); } - defSave(body: { id?: number; code: string; name: string; contentJson: string }) { + defSave(body: { id?: number; code: string; name: string; contentJson: string; baseGuid?: string }) { return post(`${ROOT}/admin/def/save`, body); } defPublish(id: number | string) { @@ -129,6 +131,14 @@ class FlowApi { callbackDead(params: { page?: number; size?: number }) { return get(`${ROOT}/admin/callback/dead`, params); } + /** 挂起列表(待推且重试达阈值) */ + callbackHung(params: { page?: number; size?: number }) { + return get(`${ROOT}/admin/callback/hung`, params); + } + /** 手工标记死信(标记后可 repush 复活) */ + callbackMarkDead(id: number | string) { + return post(`${ROOT}/admin/callback/markDead/${id}`); + } callbackRepush(ids: number[]) { return post(`${ROOT}/admin/callback/repush`, ids); } diff --git a/src/views/flow/admin/Defs.vue b/src/views/flow/admin/Defs.vue index 37d0294..6d0ca0f 100644 --- a/src/views/flow/admin/Defs.vue +++ b/src/views/flow/admin/Defs.vue @@ -95,6 +95,7 @@ async function onSave() { code: form.value.code, name: form.value.name, contentJson: form.value.contentJson, + baseGuid: form.value.baseGuid, }).send(); Message.success("已保存"); editVisible.value = false;