feat: 数字员工财务报告体系与定时提醒及看板快照调度

- 新增数字员工财务报告生成、邮件投递与渲染调度器
- 引入员工画像扫描调度与定时提醒任务
- 完善财务看板快照、排行口径与部门人员占比计算
- 优化数字员工工作看板仪表盘与技能目录
- 增强前端总览页图表、工作台摘要与顶部导航栏交互
- 新增差旅申请规划推动提醒与报销创建会话状态管理
- 补充财务报告、看板调度、数字员工工作记录测试覆盖
This commit is contained in:
caoxiaozhu
2026-06-03 09:25:23 +08:00
parent 0c74b4ab4a
commit 15006a05a7
114 changed files with 7356 additions and 650 deletions

View File

@@ -99,7 +99,6 @@
:current-page="currentPage"
:page-size="pageSize"
:page-size-options="pageSizeOptions"
:pages="pages"
:show-page-size="showPageSize"
:summary="summary"
:total="total"
@@ -139,10 +138,6 @@ const props = defineProps({
default: () => []
},
panel: { type: Boolean, default: true },
pages: {
type: Array,
default: () => []
},
retryLabel: { type: String, default: '重新加载' },
searchable: { type: Boolean, default: false },
searchPlaceholder: { type: String, default: '搜索' },

View File

@@ -78,10 +78,6 @@ const props = defineProps({
type: Array,
default: () => []
},
pages: {
type: Array,
default: () => []
},
showPageSize: { type: Boolean, default: true },
summary: { type: String, default: '' },
total: { type: Number, default: 0 },
@@ -106,7 +102,7 @@ const summaryText = computed(() => {
return props.summary
}
return `${props.total} 条,当前第 ${props.currentPage}`
return `${props.total} 条,当前第 ${props.currentPage} / ${props.totalPages}`
})
function setPage(page) {
@@ -142,3 +138,140 @@ watch(
}
)
</script>
<style scoped>
.list-foot.enterprise-pagination {
display: grid;
grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
align-items: center;
gap: 16px;
margin-top: 12px;
}
.enterprise-pagination .page-summary {
min-width: 0;
color: #64748b;
font-size: 14px;
font-weight: 650;
}
.enterprise-pagination .pager {
display: inline-flex;
justify-content: center;
gap: 6px;
padding: 4px;
border: 1px solid #e2e8f0;
border-radius: 4px;
background: #f8fafc;
}
.enterprise-pagination .pager button {
width: 32px;
height: 32px;
padding: 0;
border: 0;
border-radius: 3px;
background: transparent;
color: #334155;
font-size: 14px;
font-weight: 800;
transition: background 160ms ease, color 160ms ease, box-shadow 160ms ease;
}
.enterprise-pagination .pager button:hover:not(.active) {
background: #fff;
color: var(--theme-primary-active);
box-shadow: 0 1px 4px rgba(15, 23, 42, 0.08);
}
.enterprise-pagination .pager button.active {
background: var(--theme-primary);
color: #fff;
box-shadow: 0 8px 16px var(--theme-primary-shadow);
}
.enterprise-pagination .pager button:disabled {
color: #cbd5e1;
cursor: not-allowed;
box-shadow: none;
}
.enterprise-pagination .page-ellipsis {
width: 28px;
height: 32px;
display: inline-flex;
align-items: center;
justify-content: center;
color: #64748b;
font-size: 13px;
font-weight: 850;
}
.enterprise-pagination .page-tools {
justify-self: end;
display: inline-flex;
align-items: center;
gap: 10px;
min-width: 0;
}
.enterprise-pagination .page-size-select {
width: 112px;
}
.enterprise-pagination .page-jump {
display: inline-flex;
align-items: center;
gap: 6px;
color: #64748b;
font-size: 13px;
font-weight: 700;
white-space: nowrap;
}
.enterprise-pagination .page-jump input {
width: 54px;
height: 32px;
padding: 0 8px;
border: 1px solid #d7e0ea;
border-radius: 4px;
background: #fff;
color: #0f172a;
font-size: 13px;
font-weight: 800;
text-align: center;
transition: border-color 160ms ease, box-shadow 160ms ease;
}
.enterprise-pagination .page-jump input:focus {
border-color: var(--theme-primary);
box-shadow: 0 0 0 3px var(--theme-focus-ring);
outline: none;
}
@media (max-width: 760px) {
.list-foot.enterprise-pagination {
grid-template-columns: 1fr;
justify-items: stretch;
}
.enterprise-pagination .pager {
width: 100%;
max-width: 100%;
justify-content: flex-start;
overflow-x: auto;
scrollbar-width: thin;
}
.enterprise-pagination .pager button,
.enterprise-pagination .page-ellipsis {
flex: 0 0 auto;
}
.enterprise-pagination .page-tools {
justify-self: stretch;
justify-content: space-between;
flex-wrap: wrap;
}
}
</style>