feat: 报销预审会话状态管理与工作台交互增强

- 新增差旅报销会话状态管理与对话模型重构
- 增强风险观测服务与运行时聊天上下文作用域
- 优化工作台图标资源、助理意图识别与摘要工具
- 完善报销创建视图样式与差旅详情页标准调整交互
- 补充风险观测、运行时聊天与报销端点测试覆盖
This commit is contained in:
caoxiaozhu
2026-06-04 11:03:29 +08:00
parent 87da5df91b
commit 1cbf3fee44
60 changed files with 4156 additions and 393 deletions

View File

@@ -184,6 +184,14 @@
<i class="mdi mdi-loading mdi-spin"></i>
<span>{{ smartEntryRecognitionText }}</span>
</div>
<div v-if="standardAdjustmentBusy" class="expense-recognition-banner standard-adjustment-banner">
<i class="mdi mdi-loading mdi-spin"></i>
<span>正在重新测算费用请稍候明细和合计会在后台完成后自动更新</span>
</div>
<div v-if="submitBusy" class="expense-recognition-banner submit-progress-banner">
<i class="mdi mdi-loading mdi-spin"></i>
<span>正在提交审批请稍候系统正在完成自动检测预算占用和审批流转</span>
</div>
<table>
<thead>
<tr>
@@ -280,7 +288,10 @@
<template v-else>
<div v-if="item.hasStandardAdjustment" class="expense-adjusted-amount">
<span class="expense-original-amount">{{ item.originalAmountDisplay || item.amount }}</span>
<strong class="expense-reimbursable-amount">{{ item.reimbursableAmountDisplay }}</strong>
<strong class="expense-reimbursable-amount">
<span class="expense-reimbursable-label">职级测算</span>
{{ item.reimbursableAmountDisplay }}
</strong>
<em v-if="item.employeeAbsorbedAmountDisplay">自担 {{ item.employeeAbsorbedAmountDisplay }}</em>
</div>
<strong v-else>{{ item.amount }}</strong>
@@ -754,6 +765,7 @@
:open="submitConfirmDialogOpen"
badge="提交确认"
badge-tone="warning"
size="review"
:title="`确认提交 ${request.id} 吗?`"
:description="submitConfirmDescription"
cancel-text="返回核对"
@@ -788,8 +800,9 @@
:open="riskOverrideDialogOpen"
badge="异常说明"
badge-tone="danger"
size="review"
:title="`当前存在 ${submitRiskWarnings.length} 条需说明的风险`"
description="请先补充异常说明后提交领导审批;也可以不填写说明,选择按职级最高可报销金额重新计算。"
description="请回到费用明细的异常说明列补充原因后再提交;如果不补充说明,选择按职级最高可报销金额重新计算。"
cancel-text="返回整改"
confirm-text="按职级标准重算"
busy-text="处理中..."
@@ -827,27 +840,10 @@
<strong>{{ currentSubmitRiskWarning.title }}</strong>
</div>
<p>{{ currentSubmitRiskWarning.risk }}</p>
<textarea
v-model="riskOverrideReasons[currentSubmitRiskWarning.id]"
class="risk-note-editor-textarea"
rows="1"
maxlength="160"
placeholder="请说明原因,例如客户指定酒店、会议高峰、协议酒店满房等"
aria-label="异常说明"
@input="resizeExpenseNoteInput"
@keydown.enter="resizeExpenseNoteInput"
></textarea>
</article>
<div class="risk-override-submit-row">
<button
class="risk-override-save-btn"
type="button"
:disabled="riskOverrideBusy"
@click="confirmRiskOverrideReasons"
>
保存说明并继续提交
</button>
<span>不填写说明时系统会按职级最高报销标准重算金额</span>
<div class="risk-override-guidance">
<strong>请在费用明细的异常说明列补充原因后再提交</strong>
<span>如果不补充说明可直接选择按职级标准重算超出标准的部分由员工自担</span>
</div>
</div>
</ConfirmDialog>