fix: 优化报销创建页面样式与洞察面板交互

修复侧边栏和审计视图样式细节,完善差旅报销洞察面板和消息
组件布局,优化报销创建页面会话管理和流程状态持久化,增强
申请预览工具函数和导航图标,补充单元测试。
This commit is contained in:
caoxiaozhu
2026-05-27 10:32:08 +08:00
parent 2dcc72102d
commit b1a9c8a194
21 changed files with 922 additions and 148 deletions

View File

@@ -145,12 +145,18 @@
</button>
</div>
<div v-if="ui.flowSteps.length" class="review-flow-list">
<TransitionGroup
v-if="(ui.visibleFlowSteps || ui.flowSteps).length"
name="flow-step-reveal"
tag="div"
class="review-flow-list"
>
<article
v-for="(step, index) in ui.flowSteps"
v-for="(step, index) in (ui.visibleFlowSteps || ui.flowSteps)"
:key="step.key"
class="flow-step-item"
:class="step.status"
:style="resolveFlowStepStyle(index)"
>
<div class="flow-step-rail">
<span>{{ index + 1 }}</span>
@@ -160,7 +166,6 @@
<header>
<strong>{{ step.title }}</strong>
<div class="flow-step-side">
<span class="flow-step-status" :class="step.status">{{ ui.resolveFlowStepStatusLabel(step) }}</span>
<time>{{ ui.formatFlowStepDuration(step) }}</time>
</div>
</header>
@@ -169,7 +174,7 @@
<p v-if="step.error" class="flow-step-error">{{ step.error }}</p>
</div>
</article>
</div>
</TransitionGroup>
<div v-else class="flow-empty-state compact">
<i class="mdi mdi-timeline-question-outline"></i>
@@ -349,12 +354,18 @@
</button>
</div>
<div v-if="ui.flowSteps.length" class="review-flow-list">
<TransitionGroup
v-if="(ui.visibleFlowSteps || ui.flowSteps).length"
name="flow-step-reveal"
tag="div"
class="review-flow-list"
>
<article
v-for="(step, index) in ui.flowSteps"
v-for="(step, index) in (ui.visibleFlowSteps || ui.flowSteps)"
:key="step.key"
class="flow-step-item"
:class="step.status"
:style="resolveFlowStepStyle(index)"
>
<div class="flow-step-rail">
<span>{{ index + 1 }}</span>
@@ -364,7 +375,6 @@
<header>
<strong>{{ step.title }}</strong>
<div class="flow-step-side">
<span class="flow-step-status" :class="step.status">{{ ui.resolveFlowStepStatusLabel(step) }}</span>
<time>{{ ui.formatFlowStepDuration(step) }}</time>
</div>
</header>
@@ -373,7 +383,7 @@
<p v-if="step.error" class="flow-step-error">{{ step.error }}</p>
</div>
</article>
</div>
</TransitionGroup>
<div v-else class="flow-empty-state compact">
<i class="mdi mdi-timeline-question-outline"></i>
@@ -616,6 +626,13 @@ export default {
type: Object,
required: true
}
},
methods: {
resolveFlowStepStyle(index) {
return {
transitionDelay: `${Math.min(Number(index) || 0, 5) * 70}ms`
}
}
}
}
</script>

View File

@@ -76,7 +76,7 @@
<EnterpriseSelect
v-else-if="ui.isApplicationPreviewEditing(message, row.key)"
v-model="ui.applicationPreviewEditor.draftValue"
class="application-preview-input application-preview-select"
class="application-preview-select"
:options="ui.resolveApplicationPreviewEditorOptions(row.key)"
clearable
:teleported="false"
@@ -105,7 +105,27 @@
</div>
<div
v-if="message.role === 'assistant' && message.applicationPreview && ui.buildApplicationPreviewFooterText(message)"
v-if="message.role === 'assistant' && message.applicationPreview && ui.resolveApplicationPreviewMissingFields(message)?.length"
class="application-preview-footer application-preview-footer-missing"
aria-live="polite"
>
<span class="application-preview-missing-prefix">当前还需要补充</span>
<span class="application-preview-missing-list">
<template
v-for="(field, index) in ui.resolveApplicationPreviewMissingFields(message)"
:key="`${message.id}-missing-${field}`"
>
<span class="application-preview-missing-chip">{{ field }}</span>
<span
v-if="index < ui.resolveApplicationPreviewMissingFields(message).length - 1"
class="application-preview-missing-separator"
></span>
</template>
</span>
<span class="application-preview-missing-suffix">补齐后我再帮您提交申请</span>
</div>
<div
v-else-if="message.role === 'assistant' && message.applicationPreview && ui.buildApplicationPreviewFooterText(message)"
class="application-preview-footer message-answer-content message-answer-markdown"
v-html="ui.renderMarkdown(ui.buildApplicationPreviewFooterText(message))"
@click="ui.handleAssistantMarkdownClick($event, message)"