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

@@ -60,7 +60,7 @@
max-width: min(100%, 760px);
padding: 12px 14px;
border: 1px solid #d8e4f0;
border-radius: 14px;
border-radius: 4px;
background: #ffffff;
color: #24324a;
font-size: var(--wb-fs-bubble, 13px);
@@ -182,11 +182,54 @@
max-width: min(100%, 1080px);
}
.message-feedback-bubble {
grid-column: 2;
justify-self: start;
max-width: min(100%, 420px);
.message-action-toolbar {
display: inline-flex;
align-items: center;
gap: 4px;
margin-top: -2px;
color: #728197;
}
.message-action-btn {
width: 30px;
height: 28px;
display: inline-grid;
place-items: center;
border: 1px solid transparent;
border-radius: 4px;
background: transparent;
color: inherit;
cursor: pointer;
transition:
color 160ms ease,
background 160ms ease,
border-color 160ms ease;
}
.message-action-btn i {
font-size: 18px;
line-height: 1;
}
.message-action-btn:hover,
.message-action-btn:focus-visible {
color: #245f90;
background: #eef6fb;
border-color: #c9ddea;
outline: none;
}
.message-action-btn.active {
color: #1d6f9f;
background: #e8f4fb;
border-color: #bcd8e8;
}
.message-action-btn:disabled {
cursor: not-allowed;
color: #b7c2cf;
background: transparent;
border-color: transparent;
}
.message-bubble-review-risk-low,
@@ -482,7 +525,7 @@
margin: 10px 0 12px;
overflow-x: auto;
border: 1px solid #dbe4ee;
border-radius: 10px;
border-radius: 4px;
background: #ffffff;
box-shadow: 0 8px 20px rgba(15, 23, 42, 0.05);
}
@@ -566,7 +609,7 @@
align-items: center;
gap: 6px;
padding: 0 12px;
border-radius: 8px;
border-radius: 4px;
font-size: var(--wb-fs-chip, 12px);
font-weight: 750;
}
@@ -606,6 +649,44 @@
gap: 8px;
}
.structured-card-reveal-enter-active {
transition:
opacity 220ms cubic-bezier(0.2, 0, 0, 1),
transform 240ms cubic-bezier(0.22, 1, 0.36, 1),
clip-path 240ms cubic-bezier(0.22, 1, 0.36, 1);
transform-origin: top left;
will-change: opacity, transform, clip-path;
}
.structured-card-reveal-leave-active {
transition:
opacity 140ms ease,
transform 140ms ease;
transform-origin: top left;
}
.structured-card-reveal-enter-from {
opacity: 0;
transform: translateY(8px) scale(0.985);
clip-path: inset(0 0 14px 0);
}
.structured-card-reveal-enter-to {
opacity: 1;
transform: translateY(0) scale(1);
clip-path: inset(0 0 0 0);
}
.structured-card-reveal-leave-from {
opacity: 1;
transform: translateY(0);
}
.structured-card-reveal-leave-to {
opacity: 0;
transform: translateY(4px);
}
.message-suggested-action-btn {
height: 100%;
min-height: 54px;
@@ -614,16 +695,32 @@
align-items: center;
gap: 10px;
padding: 10px 12px;
border-radius: 10px;
border-radius: 4px;
text-align: left;
}
.structured-card-reveal-enter-active .message-suggested-action-btn {
animation: structured-card-item-reveal 260ms cubic-bezier(0.22, 1, 0.36, 1) both;
}
.structured-card-reveal-enter-active .message-suggested-action-btn:nth-child(2) {
animation-delay: 45ms;
}
.structured-card-reveal-enter-active .message-suggested-action-btn:nth-child(3) {
animation-delay: 90ms;
}
.structured-card-reveal-enter-active .message-suggested-action-btn:nth-child(n + 4) {
animation-delay: 120ms;
}
.message-suggested-action-icon {
width: 30px;
height: 30px;
display: grid;
place-items: center;
border-radius: 8px;
border-radius: 4px;
background: #eff6ff;
color: var(--theme-primary, #3a7ca5);
}
@@ -651,7 +748,7 @@
margin-top: 12px;
padding: 12px;
border: 1px solid #e2e8f0;
border-radius: 12px;
border-radius: 4px;
background: #f8fbff;
}
@@ -670,12 +767,17 @@
padding: 0;
overflow: hidden;
border: 1px solid #d7e4f2;
border-radius: 8px;
border-radius: 4px;
background: #ffffff;
color: #334155;
font-size: var(--wb-fs-bubble, 13px);
}
.application-preview-shell {
min-width: 0;
display: grid;
}
.application-preview-row {
position: relative;
display: grid;
@@ -684,6 +786,30 @@
border-top: 1px solid #e6edf5;
}
.structured-card-reveal-enter-active .application-preview-row {
animation: structured-card-item-reveal 260ms cubic-bezier(0.22, 1, 0.36, 1) both;
}
.structured-card-reveal-enter-active .application-preview-row:nth-child(2) {
animation-delay: 35ms;
}
.structured-card-reveal-enter-active .application-preview-row:nth-child(3) {
animation-delay: 70ms;
}
.structured-card-reveal-enter-active .application-preview-row:nth-child(4) {
animation-delay: 105ms;
}
.structured-card-reveal-enter-active .application-preview-row:nth-child(5) {
animation-delay: 140ms;
}
.structured-card-reveal-enter-active .application-preview-row:nth-child(n + 6) {
animation-delay: 165ms;
}
.application-preview-row.editable {
cursor: pointer;
}
@@ -786,7 +912,7 @@
height: 30px;
padding: 0 9px;
border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.48);
border-radius: 6px;
border-radius: 4px;
background: #ffffff;
color: #0f172a;
font: inherit;
@@ -809,7 +935,7 @@
display: inline-grid;
place-items: center;
border: 1px solid transparent;
border-radius: 6px;
border-radius: 4px;
background: var(--theme-primary-soft, #eaf4fa);
color: var(--theme-primary-active, #255b7d);
cursor: pointer;
@@ -903,7 +1029,7 @@
min-height: 22px;
padding: 0 7px;
border: 0;
border-radius: 6px;
border-radius: 4px;
background: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.1);
color: var(--theme-primary-active, #255b7d);
font-weight: 880;
@@ -914,6 +1040,17 @@
font-weight: 820;
}
@keyframes structured-card-item-reveal {
from {
opacity: 0;
transform: translateY(6px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.expense-query-record-list,
.message-citation-list {
display: grid;
@@ -926,7 +1063,7 @@
grid-template-columns: minmax(0, 1fr) auto;
gap: 10px;
padding: 10px;
border-radius: 10px;
border-radius: 4px;
text-align: left;
}
@@ -1054,7 +1191,7 @@
.message-bubble {
max-width: 100%;
border-radius: 12px;
border-radius: 4px;
}
.steward-task-missing-list li {
@@ -1062,3 +1199,15 @@
gap: 3px;
}
}
@media (prefers-reduced-motion: reduce) {
.structured-card-reveal-enter-active,
.structured-card-reveal-leave-active {
transition: none;
}
.structured-card-reveal-enter-active .application-preview-row,
.structured-card-reveal-enter-active .message-suggested-action-btn {
animation: none;
}
}