fix(web): 孤儿申请预览消息触发重新生成可编辑表格

useWorkbenchAiApplicationPreviewFlow 识别仅含表格文案但缺 applicationPreview 载荷的孤儿消息,触发重新生成可编辑表格并提示用户,避免提交动作静默失败。
This commit is contained in:
caoxiaozhu
2026-06-23 09:43:29 +08:00
parent f17098aa58
commit 1f40ce3df3

View File

@@ -203,6 +203,19 @@ export function useWorkbenchAiApplicationPreviewFlow({
.find((message) => message.role === 'assistant' && message.applicationPreview) .find((message) => message.role === 'assistant' && message.applicationPreview)
} }
function isOrphanInlineApplicationPreviewMessage(message = {}) {
if (message?.applicationPreview || message?.role !== 'assistant') {
return false
}
return /下方表格|申请核对表|点击对应行即可直接编辑/.test(String(message.content || message.text || ''))
}
function resolveLatestOrphanApplicationPreviewMessage() {
return [...conversationMessages.value]
.reverse()
.find((message) => isOrphanInlineApplicationPreviewMessage(message))
}
function requestInlineApplicationSubmitConfirmation(targetMessage, options = {}) { function requestInlineApplicationSubmitConfirmation(targetMessage, options = {}) {
applicationSubmitConfirmContext.value = { applicationSubmitConfirmContext.value = {
messageId: String(targetMessage?.id || '').trim(), messageId: String(targetMessage?.id || '').trim(),
@@ -434,9 +447,22 @@ export function useWorkbenchAiApplicationPreviewFlow({
return true return true
} }
const actionType = resolveInlineApplicationPreviewActionFromText(prompt) const actionType = resolveInlineApplicationPreviewActionFromText(prompt)
if (!actionType || !resolveLatestApplicationPreviewMessage()) { if (!actionType) {
return false return false
} }
if (!resolveLatestApplicationPreviewMessage()) {
const orphanPreviewMessage = resolveLatestOrphanApplicationPreviewMessage()
if (!orphanPreviewMessage) {
return false
}
const previewSourceText = resolveLatestInlineUserPrompt()
pushInlineApplicationActionUserMessage(prompt)
toast('当前申请核对表状态不完整,我先重新生成可编辑表格。')
void startAiApplicationPreview('travel', '差旅费', previewSourceText, {
pushUserMessage: false
})
return true
}
void executeInlineApplicationPreviewAction(actionType, null, { userText: prompt }) void executeInlineApplicationPreviewAction(actionType, null, { userText: prompt })
return true return true
} }