feat: 引入 ECharts 统一图表并完善员工画像标签分页

后端优化员工行为画像服务和辅助函数,完善系统设置模型和
配置持久化,前端引入 ECharts 替换所有图表组件实现统一
渲染,新增员工画像标签分页器和数字员工工作记录组件,优
化工作台响应式布局和登录页过渡动画,完善预算中心和数字
员工页面样式细节。
This commit is contained in:
caoxiaozhu
2026-05-28 16:24:59 +08:00
parent 8a4a777be7
commit e384318046
53 changed files with 4698 additions and 2468 deletions

View File

@@ -38,7 +38,6 @@
</div>
</div>
</div>
<div class="hero-fact-grid">
<div v-for="item in heroFactItems" :key="item.key" class="hero-fact">
<div class="hero-fact-label">
@@ -51,7 +50,6 @@
</div>
</div>
</article>
<article class="progress-card panel">
<div class="progress-block">
<div class="progress-head">
@@ -85,7 +83,6 @@
</div>
</div>
</article>
<div class="detail-grid">
<section class="detail-left">
<article v-if="!isApplicationDocument" class="detail-card panel">
@@ -129,7 +126,6 @@
<p>{{ detailNote }}</p>
</div>
</article>
<article class="detail-card panel">
<div class="detail-card-head">
<div>
@@ -164,7 +160,6 @@
</button>
</div>
</div>
<div v-if="isApplicationDocument" class="application-detail-facts">
<div
v-for="item in applicationDetailFactItems"
@@ -176,12 +171,10 @@
<strong>{{ item.value }}</strong>
</div>
</div>
<TravelRequestBudgetAnalysis
v-if="showBudgetAnalysis"
:claim-id="request.claimId"
/>
<div v-if="showApplicationLeaderOpinion" class="application-leader-opinion">
<div class="application-leader-opinion-head">
<span><i class="mdi mdi-account-tie-outline"></i>领导意见</span>
@@ -209,7 +202,6 @@
</article>
</div>
</div>
<div v-if="!isApplicationDocument" class="detail-expense-table">
<table>
<thead>
@@ -436,7 +428,6 @@
<strong>{{ expenseTotal }}</strong>
</div>
</article>
<article v-if="showAiAdvicePanel" class="detail-card panel validation-card">
<div class="validation-head">
<div>
@@ -484,18 +475,15 @@
</section>
</div>
</article>
<EmployeeProfileRiskCard
v-if="showEmployeeRiskProfile"
:profile="employeeRiskProfile"
:loading="employeeRiskProfileLoading"
:error="employeeRiskProfileError"
/>
</section>
</div>
</div>
<footer class="detail-actions">
<button class="back-action" type="button" @click="emit('backToRequests')">
<i class="mdi mdi-arrow-left"></i>
@@ -558,7 +546,6 @@
</p>
</footer>
</div>
<input
ref="expenseUploadInput"
class="expense-upload-input"
@@ -566,7 +553,6 @@
accept="image/*,.pdf"
@change="handleExpenseFileChange"
/>
<Transition name="shared-confirm">
<div
v-if="attachmentPreviewOpen"
@@ -607,7 +593,6 @@
<i class="mdi mdi-close"></i>
</button>
</div>
<div class="attachment-preview-body">
<div class="attachment-source-pane">
<div v-if="attachmentPreviewLoading" class="attachment-preview-state">
@@ -635,7 +620,6 @@
<span>当前附件暂不支持直接预览</span>
</div>
</div>
<aside class="attachment-insight-pane">
<div class="attachment-insight-head">
<span>识别信息</span>
@@ -683,7 +667,6 @@
</section>
</div>
</Transition>
<ConfirmDialog
:open="submitConfirmDialogOpen"
badge="提交确认"
@@ -718,7 +701,6 @@
</div>
</div>
</ConfirmDialog>
<ConfirmDialog
:open="riskOverrideDialogOpen"
badge="重大风险"
@@ -771,9 +753,7 @@
</article>
</div>
</ConfirmDialog>
<TravelRequestDeleteDialog :open="deleteDialogOpen" :badge="deleteActionLabel" :title="deleteDialogTitle" :description="deleteDialogDescription" :busy="deleteBusy" @close="closeDeleteDialog" @confirm="confirmDeleteRequest" />
<TravelRequestApprovalDialog
:open="approveConfirmDialogOpen"
:badge="approvalConfirmBadge"
@@ -790,7 +770,6 @@
@close="closeApproveConfirmDialog"
@confirm="confirmApproveRequest"
/>
<ConfirmDialog
:open="payConfirmDialogOpen"
badge="付款确认"
@@ -806,20 +785,9 @@
@close="closePayConfirmDialog"
@confirm="confirmPayRequest"
/>
<TravelRequestReturnDialog
:open="returnDialogOpen"
:title="`确认退回 ${request.id} 吗?`"
:description="returnDialogDescription"
:busy="returnBusy"
:application="isApplicationDocument"
@close="closeReturnDialog"
@confirm="confirmReturnRequest"
/>
<TravelRequestReturnDialog :open="returnDialogOpen" :title="`确认退回 ${request.id} 吗?`" :description="returnDialogDescription" :busy="returnBusy" :application="isApplicationDocument" @close="closeReturnDialog" @confirm="confirmReturnRequest" />
</section>
</template>
<script src="./scripts/TravelRequestDetailView.js"></script>
<style scoped src="../assets/styles/views/travel-request-detail-view.css"></style>
<style scoped src="../assets/styles/views/travel-request-detail-view-part2.css"></style>