From 43c3ff860ce577e5dbc934428e6c3c71d8ac5a19 Mon Sep 17 00:00:00 2001 From: caoxiaozhu Date: Fri, 26 Jun 2026 11:40:44 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20steward=20plan=20=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E7=9B=B4=E6=8E=A5=E6=8B=89=E8=B5=B7=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E9=A2=84=E8=A7=88,=E4=B8=8D=E4=B8=A2=E5=A4=B1=20remai?= =?UTF-8?q?ning=20tasks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:steward plan 的'确认创建申请单'按钮 action_type 是 ASSISTANT_SCOPE_ACTION_SWITCH,handleInlineSuggestedAction 没有匹配分支, 落到 startInlineConversation 重新发起对话,steward_remaining_tasks 完全丢失。 修复:当 payload 有 steward_current_task + session_type=application + task_type=expense_application 时,直接调 startAiApplicationPreviewFromAction (会透传 steward_remaining_tasks 到申请预览 message),不走 startInlineConversation。 这样保存草稿成功后,targetMessage 上有 stewardRemainingTasks, buildApplicationPreviewNextTaskAction 能生成'继续处理费用报销'按钮。 --- .../workbenchAiMode/useWorkbenchAiActionRouter.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/web/src/composables/workbenchAiMode/useWorkbenchAiActionRouter.js b/web/src/composables/workbenchAiMode/useWorkbenchAiActionRouter.js index 3322913..c91b57f 100644 --- a/web/src/composables/workbenchAiMode/useWorkbenchAiActionRouter.js +++ b/web/src/composables/workbenchAiMode/useWorkbenchAiActionRouter.js @@ -114,6 +114,17 @@ export function useWorkbenchAiActionRouter({ void expenseFlow.startAiApplicationPreviewFromAction(actionPayload) return } + // steward plan 的"确认创建申请单"按钮:payload 有 steward_current_task + session_type=application, + // 直接拉起申请预览(带 remaining tasks),不走 startInlineConversation(会丢失 steward 上下文) + if ( + actionPayload.steward_current_task + && String(actionPayload.session_type || '').trim() === 'application' + && String(actionPayload.steward_current_task.task_type || '').trim() === 'expense_application' + ) { + aiExpenseDraft.value = null + void expenseFlow.startAiApplicationPreviewFromAction(actionPayload) + return + } if (actionType === 'select_expense_type') { const expenseType = String(action?.payload?.expense_type || '').trim() const expenseTypeLabel = String(action?.payload?.expense_type_label || action?.label || '').trim()