feat: 报销审批流重构与管家计划全链路贯通

- 重构报销状态注册表、审批流路由与平台风险标记
- 完善管家意图规划器与模型计划构建器全链路
- 新增 OCR Worker 脚本、数据库会话管理与通知状态
- 优化文档中心、日志视图、预算中心与员工管理交互
- 增强工作台摘要、图标资源与全局主题样式
- 补充审批路由、状态注册、OCR 服务与管家规划器测试覆盖
This commit is contained in:
caoxiaozhu
2026-06-06 17:19:07 +08:00
parent f60cebadb8
commit e124e4bbcb
162 changed files with 9161 additions and 1941 deletions

View File

@@ -39,13 +39,15 @@ const iconStyle = computed(() => iconMeta.value.style)
.workbench-list-icon__halo {
position: absolute;
top: 8px;
bottom: 8px;
left: 0;
width: 3px;
inset: 6px auto 6px -2px;
width: 4px;
border-radius: 2px;
background: color-mix(in srgb, var(--icon-color, var(--theme-primary)) 78%, #ffffff);
opacity: 0.72;
background: linear-gradient(
180deg,
color-mix(in srgb, var(--icon-color, var(--theme-primary)) 78%, #ffffff),
color-mix(in srgb, var(--icon-color, var(--theme-primary)) 28%, #ffffff)
);
opacity: 0.88;
}
.workbench-list-icon__panel {
@@ -57,18 +59,20 @@ const iconStyle = computed(() => iconMeta.value.style)
place-items: center;
overflow: hidden;
border-radius: 4px;
border: 1px solid color-mix(in srgb, var(--icon-color, var(--theme-primary)) 22%, var(--line, #e2e8f0));
border: 1px solid color-mix(in srgb, var(--icon-color, var(--theme-primary)) 24%, var(--line, #e2e8f0));
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.82), rgba(255, 255, 255, 0.44)),
radial-gradient(circle at 30% 20%, rgba(255, 255, 255, 0.98), rgba(255, 255, 255, 0) 48%),
linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(255, 255, 255, 0.52)),
linear-gradient(
135deg,
color-mix(in srgb, var(--icon-accent, var(--theme-primary-soft)) 64%, #fff) 0%,
#fff 52%,
color-mix(in srgb, var(--icon-color, var(--theme-primary)) 8%, var(--surface-soft, #f8fafc)) 100%
color-mix(in srgb, var(--icon-accent, var(--theme-primary-soft)) 72%, #fff) 0%,
#fff 46%,
color-mix(in srgb, var(--icon-color, var(--theme-primary)) 12%, var(--surface-soft, #f8fafc)) 100%
);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.9),
0 1px 2px rgba(15, 23, 42, 0.045);
inset 0 -1px 0 color-mix(in srgb, var(--icon-color, var(--theme-primary)) 8%, rgba(255, 255, 255, 0.9)),
0 8px 18px rgba(15, 23, 42, 0.055);
}
.workbench-list-icon__shine {
@@ -95,10 +99,37 @@ const iconStyle = computed(() => iconMeta.value.style)
}
.workbench-list-icon--outline .workbench-list-icon__art :deep(.workbench-heroicon) {
stroke-width: 1.65;
stroke-width: 1.55;
}
.workbench-list-icon__art :deep(.icon-fill) {
fill: currentColor;
stroke: none;
opacity: 0.09;
}
.workbench-list-icon__art :deep(.icon-accent) {
opacity: 0.36;
}
.workbench-list-icon__art :deep(.icon-muted) {
opacity: 0.62;
}
.workbench-list-icon--solid .workbench-list-icon__art :deep(.workbench-heroicon path) {
opacity: 0.96;
}
.workbench-list-icon__art :deep(.workbench-image-icon) {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 44px;
height: 44px;
max-width: none;
object-fit: contain;
display: block;
filter: drop-shadow(0 4px 8px rgba(15, 23, 42, 0.15));
}
</style>