feat: 小财管家意图规划与报销提交编排增强

- 完善管家意图识别、模型计划构建与规划器调度
- 重构差旅报销提交编排器与管家计划流程前端交互
- 优化报销消息项样式与文档中心视图
- 新增小财管家与附件上传风险前置复核设计文档
- 补充管家规划器与文档中心测试覆盖
This commit is contained in:
caoxiaozhu
2026-06-04 14:25:14 +08:00
parent 1cbf3fee44
commit f60cebadb8
19 changed files with 2337 additions and 196 deletions

View File

@@ -1,7 +1,7 @@
<template>
<article
class="message-row"
:class="message.role"
:class="[message.role, { 'has-steward-plan': message.stewardPlan }]"
>
<span class="message-avatar">
<img
@@ -31,7 +31,7 @@
:key="`${message.id}-${event.eventId}`"
>
<strong>{{ event.title }}</strong>
<span>{{ event.content }}</span>
<span :class="{ 'typing': event.status === 'running' }">{{ event.content }}</span>
</li>
</ol>
<p v-else class="steward-intent-empty">正在建立任务上下文...</p>
@@ -62,7 +62,14 @@
<div
v-else-if="message.text && message.role === 'assistant'"
class="message-answer-content message-answer-markdown"
:class="[
'message-answer-content',
'message-answer-markdown',
{
'steward-plan-markdown': message.stewardPlan,
'steward-plan-typing': message.stewardPlan?.streamStatus === 'typing'
}
]"
v-html="ui.renderMarkdown(message.text)"
@click="ui.handleAssistantMarkdownClick($event, message)"
></div>
@@ -73,7 +80,7 @@
/>
<div
v-if="message.role === 'assistant' && message.stewardPlan && message.stewardPlan.streamStatus !== 'streaming'"
v-if="message.role === 'assistant' && message.stewardPlan && message.stewardPlan.streamStatus !== 'streaming' && !message.stewardPlan.initialSummaryOnly"
class="steward-plan-block"
role="group"
aria-label="小财管家任务计划"
@@ -84,16 +91,32 @@
:key="`${message.id}-${task.taskId}`"
class="steward-task-card"
>
<header>
<span>{{ task.taskTypeLabel }}</span>
<small>{{ task.assignedAgentLabel }}</small>
<header class="steward-task-header">
<span class="steward-task-type">{{ task.taskTypeLabel }}</span>
<span class="steward-task-agent">{{ task.assignedAgentLabel }}</span>
</header>
<strong>{{ task.title }}</strong>
<p>{{ task.summary }}</p>
<div class="steward-task-body">
<strong class="steward-task-title">{{ task.title }}</strong>
<p class="steward-task-summary">{{ task.summary }}</p>
</div>
<div class="steward-task-meta">
<span>置信度 {{ Math.round((task.confidence || 0) * 100) }}%</span>
<span v-if="task.missingFields?.length">待补充 {{ task.missingFields.join('') }}</span>
<span v-else>字段已齐备</span>
<span v-if="!ui.resolveStewardMissingFieldItems(task).length">信息已基本齐备</span>
</div>
<div
v-if="ui.resolveStewardMissingFieldItems(task).length"
class="steward-task-missing"
>
<span class="steward-task-missing-label">还需要补充</span>
<ul class="steward-task-missing-list">
<li
v-for="field in ui.resolveStewardMissingFieldItems(task)"
:key="`${task.taskId}-missing-${field.key}`"
>
<strong>{{ field.label }}</strong>
<small v-if="field.hint">{{ field.hint }}</small>
</li>
</ul>
</div>
</article>
</div>