feat: 新增归档中心页面并完善知识库与报销查询能力

新增前端归档中心视图及相关工具函数,扩充知识库文档分类和
提取器支持多种格式,增强编排器报销查询的多维度检索,优
化本体规则和用户代理审核消息,前端完善报销创建和审批详
情交互细节,补充单元测试覆盖。
This commit is contained in:
caoxiaozhu
2026-05-22 16:00:19 +08:00
parent 1f15699013
commit 88ff04bef8
120 changed files with 6236 additions and 643 deletions

View File

@@ -97,20 +97,11 @@
</div>
<div v-if="canEditDetailNote" class="detail-note-editor">
<textarea
v-model="detailNoteEditor"
v-model="detailNoteEditorView"
maxlength="500"
placeholder="例如:去北京客户现场出差,拜访 XX 客户并处理项目验收事项"
aria-label="附加说明"
></textarea>
<div v-if="detailNoteTags.length" class="detail-note-tag-list" aria-label="附加说明风险标签">
<span
v-for="tag in detailNoteTags"
:key="tag"
:class="['risk-note-tag', resolveRiskTagClass(tag)]"
>
{{ tag }}
</span>
</div>
<div class="detail-note-editor-meta">
<span>仅草稿待提交状态可编辑提交后将作为明确说明展示</span>
<div class="detail-note-actions">
@@ -136,15 +127,6 @@
</div>
<div v-else class="detail-note readonly">
<p>{{ detailNote }}</p>
<div v-if="detailNoteTags.length" class="detail-note-tag-list" aria-label="附加说明风险标签">
<span
v-for="tag in detailNoteTags"
:key="tag"
:class="['risk-note-tag', resolveRiskTagClass(tag)]"
>
{{ tag }}
</span>
</div>
</div>
</article>
@@ -178,8 +160,8 @@
<table>
<thead>
<tr>
<th class="col-time">时间</th>
<th class="col-filled-at">填写时间</th>
<th class="col-time">发生时间</th>
<th class="col-type">费用项目</th>
<th class="col-desc">说明</th>
<th class="col-amount">金额</th>
@@ -190,6 +172,10 @@
<tbody>
<template v-for="item in expenseItems" :key="item.id">
<tr :class="{ 'system-generated-row': item.isSystemGenerated }">
<td class="expense-filled-at col-filled-at">
<strong>{{ item.filledAt }}</strong>
<span>条款填写时间</span>
</td>
<td :class="['expense-time col-time', { 'has-major-risk': isMajorExpenseRisk(item) }]">
<i
v-if="isMajorExpenseRisk(item)"
@@ -208,10 +194,6 @@
<span>{{ item.dayLabel }}</span>
</template>
</td>
<td class="expense-filled-at col-filled-at">
<strong>{{ item.filledAt }}</strong>
<span>条款填写时间</span>
</td>
<td class="expense-type col-type">
<template v-if="editingExpenseId === item.id">
<div class="cell-editor">
@@ -405,11 +387,11 @@
</div>
</article>
<article v-if="isEditableRequest" class="detail-card panel validation-card">
<article v-if="showAiAdvicePanel" class="detail-card panel validation-card">
<div class="validation-head">
<div>
<h3>AI建议</h3>
<p>按建议顺序补齐信息或处理风险后再发起审批</p>
<h3>{{ aiAdviceTitle }}</h3>
<p>{{ aiAdviceHint }}</p>
</div>
<span :class="['validation-pill', aiAdvice.tone]">{{ aiAdvice.badge }}</span>
</div>
@@ -434,15 +416,6 @@
<span>{{ card.label }}</span>
<strong>{{ card.title }}</strong>
</div>
<div v-if="card.tags?.length" class="risk-card-tag-list" aria-label="风险标签">
<span
v-for="tag in card.tags"
:key="tag"
:class="['risk-note-tag', resolveRiskTagClass(tag)]"
>
{{ tag }}
</span>
</div>
<p class="risk-advice-point">{{ card.risk }}</p>
<div class="risk-advice-meta">
<div>
@@ -733,15 +706,6 @@
<strong>{{ currentSubmitRiskWarning.title }}</strong>
</div>
<p>{{ currentSubmitRiskWarning.risk }}</p>
<div class="risk-card-tag-list" aria-label="风险标签">
<span
v-for="tag in currentSubmitRiskWarning.tags"
:key="tag"
:class="['risk-note-tag', resolveRiskTagClass(tag)]"
>
{{ tag }}
</span>
</div>
<textarea
v-model="riskOverrideReasons[currentSubmitRiskWarning.id]"
maxlength="160"