fix(api): 修正 POST 请求体丢失致 def/save 报 body missing
build / build (push) Successful in 3m17s

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 参有效。
This commit is contained in:
chenxing
2026-09-15 19:04:46 +08:00
parent 2969d235e4
commit 670988816c
2 changed files with 13 additions and 2 deletions
+12 -2
View File
@@ -11,8 +11,10 @@ function get<T = any>(url: string, params?: Record<string, any>): Method<T> {
return new Method<T>("GET", alovaInstance, url, { params }); return new Method<T>("GET", alovaInstance, url, { params });
} }
// alova 的请求体是 Method 构造的第 5 个参数(instance.data),不是 config 上的键:
// 写进 config 的 body/data 都会被适配器忽略,POST 将发出空 body。
function post<T = any>(url: string, body?: any): Method<T> { function post<T = any>(url: string, body?: any): Method<T> {
return new Method<T>("POST", alovaInstance, url, { body: body ?? {} }); return new Method<T>("POST", alovaInstance, url, {}, body);
} }
/** 状态枚举(后端 FlwEnums 口径) */ /** 状态枚举(后端 FlwEnums 口径) */
@@ -82,7 +84,7 @@ class FlowApi {
defGet(id: number | string) { defGet(id: number | string) {
return get(`${ROOT}/admin/def/get`, { id }); 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); return post(`${ROOT}/admin/def/save`, body);
} }
defPublish(id: number | string) { defPublish(id: number | string) {
@@ -129,6 +131,14 @@ class FlowApi {
callbackDead(params: { page?: number; size?: number }) { callbackDead(params: { page?: number; size?: number }) {
return get(`${ROOT}/admin/callback/dead`, params); 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[]) { callbackRepush(ids: number[]) {
return post(`${ROOT}/admin/callback/repush`, ids); return post(`${ROOT}/admin/callback/repush`, ids);
} }
+1
View File
@@ -95,6 +95,7 @@ async function onSave() {
code: form.value.code, code: form.value.code,
name: form.value.name, name: form.value.name,
contentJson: form.value.contentJson, contentJson: form.value.contentJson,
baseGuid: form.value.baseGuid,
}).send(); }).send();
Message.success("已保存"); Message.success("已保存");
editVisible.value = false; editVisible.value = false;