feat: 新增员工行为画像算法与费用风险标签体系

后端新增员工行为画像算法模块,支持标签规则引擎和评分计算,
完善员工模型、银行信息、序列化和导入逻辑,优化报销审批流
和工作流常量,增强 Hermes 同步和知识同步能力,前端新增费
用画像详情弹窗、雷达图和风险卡片组件,完善登录页和工作台
样式,优化文档中心和归档中心交互,补充单元测试。
This commit is contained in:
caoxiaozhu
2026-05-28 12:09:49 +08:00
parent 04cd6d0f81
commit 8a4a777be7
96 changed files with 9835 additions and 704 deletions

View File

@@ -288,6 +288,98 @@
color: #dc2626;
}
.topbar-toolset {
display: inline-flex;
align-items: center;
justify-content: flex-end;
gap: 18px;
min-width: 0;
}
.topbar-icon-btn {
position: relative;
width: 34px;
height: 34px;
display: inline-grid;
place-items: center;
padding: 0;
border: 0;
border-radius: 999px;
background: transparent;
color: #111827;
font-size: 23px;
line-height: 1;
transition:
color 160ms var(--ease),
background 160ms var(--ease);
}
.topbar-icon-btn:hover {
background: var(--theme-primary-light-9);
color: var(--theme-primary-active);
}
.notification-badge {
position: absolute;
top: 2px;
right: 1px;
min-width: 13px;
height: 13px;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0 3px;
border: 2px solid #fff;
border-radius: 999px;
background: #ef4444;
color: #fff;
font-size: 8px;
font-weight: 850;
line-height: 1;
box-shadow: 0 5px 10px rgba(239, 68, 68, .22);
}
.company-switcher {
max-width: min(220px, 28vw);
height: 38px;
display: inline-flex;
align-items: center;
gap: 8px;
padding: 0 14px 0 16px;
border: 1px solid #edf1f5;
border-radius: 999px;
background: #fff;
color: #111827;
box-shadow:
0 1px 2px rgba(15, 23, 42, .04),
inset 0 1px 0 rgba(255, 255, 255, .92);
font-size: 13px;
font-weight: 700;
white-space: nowrap;
transition:
border-color 160ms var(--ease),
box-shadow 160ms var(--ease),
color 160ms var(--ease);
}
.company-switcher:hover {
border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), .26);
color: var(--theme-primary-active);
box-shadow: 0 6px 16px rgba(var(--theme-primary-rgb, 58, 124, 165), .08);
}
.company-switcher span {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
}
.company-switcher .mdi {
flex: 0 0 auto;
color: #64748b;
font-size: 16px;
}
.kpi-chip {
display: grid;
grid-template-columns: auto auto;
@@ -370,6 +462,7 @@
.top-actions,
.search-wrap,
.search-wrap.wide,
.topbar-toolset,
.detail-alert-strip,
.month-chip,
.qa-filter,
@@ -381,6 +474,10 @@
justify-content: stretch;
}
.topbar-toolset {
justify-content: flex-end;
}
.range-shell {
flex: 1;
}
@@ -400,6 +497,12 @@
}
}
@media (max-width: 760px) {
.title-group {
padding-right: 56px;
}
}
@media (max-width: 640px) {
.topbar {
gap: 14px;
@@ -427,6 +530,16 @@
white-space: nowrap;
}
.topbar-toolset {
gap: 10px;
}
.company-switcher {
flex: 1 1 auto;
max-width: none;
justify-content: space-between;
}
.range-combo {
display: grid;
gap: 8px;