feat: 完善审批退回流程与报销申请关联

后端优化报销单访问策略和常量定义,增强退回原因和审批状态
流转,前端完善退回对话框和审批交互组件,新增报销申请关联
模型,优化文档中心行数据和审批收件箱工具函数,增强引导
流程和会话模型,补充单元测试覆盖。
This commit is contained in:
caoxiaozhu
2026-05-27 14:35:17 +08:00
parent 7d32eae74e
commit cbb98f4469
30 changed files with 1794 additions and 250 deletions

View File

@@ -182,21 +182,26 @@
<span><i class="mdi mdi-account-tie-outline"></i>领导意见</span>
<strong v-if="leaderApprovalReadonlyMeta">{{ leaderApprovalReadonlyMeta }}</strong>
</div>
<div v-if="showApplicationLeaderOpinionInput" class="leader-approval-card inline-leader-opinion">
<textarea
v-model="leaderOpinion"
maxlength="500"
:required="requiresApprovalOpinion"
:placeholder="approvalOpinionPlaceholder"
:aria-label="approvalOpinionTitle"
></textarea>
<div class="leader-opinion-meta">
<span>{{ approvalOpinionHint }}</span>
<strong>{{ leaderOpinion.length }}/500</strong>
</div>
</div>
<div v-else class="detail-note readonly application-leader-opinion-display">
<p>{{ leaderApprovalReadonlyText }}</p>
<div v-if="hasLeaderApprovalEvents" class="application-leader-opinion-timeline" aria-label="领导批复事件流">
<article
v-for="event in leaderApprovalEvents"
:key="event.id"
class="application-leader-opinion-event"
:class="event.tone"
>
<div class="application-leader-opinion-event-head">
<span>
<i :class="event.type === 'returned' ? 'mdi mdi-arrow-u-left-top' : 'mdi mdi-check-circle-outline'"></i>
{{ event.title }}
</span>
<time v-if="event.time">{{ event.time }}</time>
</div>
<p>{{ event.opinion }}</p>
<footer>
<span>{{ event.operator }}</span>
<span v-if="event.returnCount"> {{ event.returnCount }} 次退回</span>
</footer>
</article>
</div>
</div>
@@ -475,20 +480,6 @@
</div>
</article>
<article v-if="showLeaderApprovalPanel" class="detail-card panel leader-approval-card">
<h3>{{ approvalOpinionTitle }}</h3>
<textarea
v-model="leaderOpinion"
maxlength="500"
:required="requiresApprovalOpinion"
:placeholder="approvalOpinionPlaceholder"
:aria-label="approvalOpinionTitle"
></textarea>
<div class="leader-opinion-meta">
<span>{{ approvalOpinionHint }}</span>
<strong>{{ leaderOpinion.length }}/500</strong>
</div>
</article>
</section>
</div>
</div>
@@ -774,7 +765,10 @@
:summary-label="approvalConfirmSummaryLabel"
:next-stage="approvalNextStage"
:opinion-title="approvalOpinionTitle"
:opinion="leaderOpinion"
v-model:opinion="leaderOpinion"
:opinion-placeholder="approvalOpinionPlaceholder"
:opinion-hint="approvalOpinionHint"
:opinion-required="requiresApprovalOpinion"
@close="closeApproveConfirmDialog"
@confirm="confirmApproveRequest"
/>
@@ -784,6 +778,7 @@
:title="`确认退回 ${request.id} 吗?`"
:description="returnDialogDescription"
:busy="returnBusy"
:application="isApplicationDocument"
@close="closeReturnDialog"
@confirm="confirmReturnRequest"
/>