feat(ai): issue verified application preview decisions

This commit is contained in:
caoxiaozhu
2026-07-14 14:37:53 +08:00
parent a662cfe6c3
commit 5b24630710
32 changed files with 1976 additions and 217 deletions

View File

@@ -13,6 +13,8 @@ import { fetchExpenseClaims } from '../../services/reimbursements.js'
import {
AI_APPLICATION_ACTION_SAVE_DRAFT,
AI_APPLICATION_ACTION_SUBMIT,
createAiApplicationRequestId,
registerAiApplicationPreviewDecision,
runAiApplicationPreviewAction
} from '../../services/aiApplicationPreviewActions.js'
import {
@@ -374,9 +376,20 @@ export function useWorkbenchAiApplicationPreviewFlow({
return false
}
const normalizedPreview = normalizeApplicationPreview(targetMessage.applicationPreview)
let normalizedPreview = normalizeApplicationPreview(targetMessage.applicationPreview)
const isSubmit = actionType === AI_APPLICATION_ACTION_SUBMIT
const userText = String(options.userText || (isSubmit ? '直接提交' : '保存草稿')).trim()
const actionRequestId = String(
normalizedPreview.decisionActionRequestId || createAiApplicationRequestId('action')
).trim()
if (normalizedPreview.decisionId) {
normalizedPreview = normalizeApplicationPreview({
...normalizedPreview,
decisionActionRequestId: actionRequestId
})
targetMessage.applicationPreview = normalizedPreview
persistCurrentConversation()
}
if (isSubmit && !normalizedPreview.readyToSubmit) {
if (!options.skipUserMessage) {
@@ -454,12 +467,27 @@ export function useWorkbenchAiApplicationPreviewFlow({
applicationPreview: normalizedPreview,
currentUser: currentUser.value || {},
conversationId: conversationId.value,
draftPayload: targetMessage.draftPayload || options.draftPayload || null
draftPayload: targetMessage.draftPayload || options.draftPayload || null,
requestId: actionRequestId
})
const draftPayload = extractInlineApplicationDraftPayload(payload)
if (draftPayload) {
targetMessage.draftPayload = draftPayload
}
const nextDecisionId = String(payload?.result?.decision_id || '').trim()
targetMessage.applicationPreview = normalizeApplicationPreview({
...(targetMessage.applicationPreview || normalizedPreview),
...(nextDecisionId
? {
decisionId: nextDecisionId,
decisionExpiresAt: String(payload?.result?.decision_expires_at || '').trim(),
decisionTrackingStatus: 'registered'
}
: {
decisionTrackingStatus: normalizedPreview.decisionId ? 'consumed' : 'legacy'
}),
decisionActionRequestId: ''
})
targetMessage.suggestedActions = []
const detailActions = buildInlineApplicationDetailAction(draftPayload)
const nextTaskAction = buildApplicationPreviewNextTaskAction(targetMessage)
@@ -598,11 +626,26 @@ export function useWorkbenchAiApplicationPreviewFlow({
ontologyFields: options.ontologyFields
})
)
const content = buildLocalApplicationPreviewMessage(preview)
let registeredPreview = preview
try {
registeredPreview = await registerAiApplicationPreviewDecision({
applicationPreview: preview,
conversationId: conversationId.value,
message: previewSourceText,
requestId: createAiApplicationRequestId('preview')
})
} catch (error) {
console.warn('Application preview decision registration failed:', error)
registeredPreview = normalizeApplicationPreview({
...preview,
decisionTrackingStatus: 'degraded'
})
}
const content = buildLocalApplicationPreviewMessage(registeredPreview)
const previewMessage = createInlineMessage('assistant', content, {
id: pendingMessage.id,
applicationPreview: preview,
suggestedActions: buildInlineApplicationPreviewSuggestedActions(preview),
applicationPreview: registeredPreview,
suggestedActions: buildInlineApplicationPreviewSuggestedActions(registeredPreview),
requestedSubmit: Boolean(options.requestedSubmit),
submitRequiresConfirmation: Boolean(options.submitRequiresConfirmation),
stewardRemainingTasks: Array.isArray(options.stewardRemainingTasks) ? options.stewardRemainingTasks : [],