feat: 增强风险规则生成引擎与预算中心页面

后端拆分风险规则生成为解释器、语义分析、本体对齐等子模块,
优化模板执行和流程图生成,完善员工种子数据和导入逻辑,增强
报销单权限策略和草稿持久化,前端新增预算中心视图和趋势图
组件,重构审计页面和风险规则测试对话框交互,完善文档中心
和报销创建页面细节,补充单元测试覆盖。
This commit is contained in:
caoxiaozhu
2026-05-26 09:15:14 +08:00
parent d0e946cf47
commit 0e861d8fa6
150 changed files with 14953 additions and 4099 deletions

View File

@@ -647,6 +647,10 @@
box-shadow: 0 10px 22px rgba(226, 232, 240, 0.48);
}
.message-bubble-application-preview {
max-width: min(100%, 980px);
}
.message-bubble-review-risk-low {
border-color: rgba(37, 99, 235, 0.72);
background: linear-gradient(180deg, rgba(239, 246, 255, 0.72), rgba(255, 255, 255, 0.96));
@@ -759,6 +763,170 @@
margin: 0;
}
.application-preview-table {
margin-top: 12px;
overflow: hidden;
border: 1px solid #d7e4f2;
border-radius: 8px;
background: #ffffff;
color: #334155;
font-size: var(--wb-fs-bubble);
}
.application-preview-footer {
margin-top: 12px;
color: #334155;
font-size: var(--wb-fs-bubble);
line-height: 1.58;
}
.application-preview-row {
display: grid;
grid-template-columns: 108px minmax(0, 1fr);
min-height: 38px;
border-top: 1px solid #e6edf5;
}
.application-preview-row.editable {
cursor: pointer;
}
.application-preview-row.editable:hover {
background: #f8fbff;
}
.application-preview-row.editable:hover .application-preview-label,
.application-preview-row.editable:hover .application-preview-value {
background: #f8fbff;
}
.application-preview-row.editable.missing:hover .application-preview-value {
background: #fff4e6;
}
.application-preview-row.editable:focus-visible {
position: relative;
z-index: 1;
outline: 2px solid rgba(37, 99, 235, 0.45);
outline-offset: -2px;
}
.application-preview-row:first-child {
border-top: 0;
}
.application-preview-row.head {
min-height: 34px;
background: #f8fafc;
color: #475569;
font-size: var(--wb-fs-caption);
font-weight: 850;
}
.application-preview-row > span {
min-width: 0;
display: flex;
align-items: center;
padding: 8px 12px;
}
.application-preview-label {
border-right: 1px solid #e6edf5;
background: #fbfdff;
color: #64748b;
font-weight: 760;
}
.application-preview-value {
position: relative;
gap: 8px;
color: #0f172a;
font-weight: 650;
}
.application-preview-row.missing .application-preview-value {
background: #fff7ed;
color: #b45309;
}
.application-preview-row.highlight .application-preview-label {
background: #f0fdf4;
color: #047857;
}
.application-preview-row.highlight .application-preview-value {
background: #f7fee7;
color: #166534;
font-weight: 780;
}
.application-preview-row.highlight.missing .application-preview-value {
background: #fff7ed;
color: #b45309;
}
.application-preview-text {
min-width: 0;
overflow-wrap: anywhere;
line-height: 1.45;
}
.application-preview-edit-btn {
flex: 0 0 auto;
width: 24px;
height: 24px;
display: grid;
place-items: center;
border: 1px solid transparent;
border-radius: 6px;
background: #eff6ff;
color: #2563eb;
cursor: pointer;
opacity: 0;
transition: opacity 0.16s ease, border-color 0.16s ease, background 0.16s ease;
}
.application-preview-edit-btn i {
font-size: 14px;
}
.application-preview-row:hover .application-preview-edit-btn,
.application-preview-edit-btn:focus-visible {
opacity: 1;
}
.application-preview-edit-btn:hover:not(:disabled),
.application-preview-edit-btn:focus-visible {
border-color: #bfdbfe;
background: #dbeafe;
}
.application-preview-edit-btn:disabled {
cursor: not-allowed;
opacity: 0.42;
}
.application-preview-input {
width: 100%;
min-width: 0;
height: 30px;
border: 1px solid #93c5fd;
border-radius: 6px;
background: #ffffff;
color: #0f172a;
font: inherit;
font-weight: 650;
line-height: 1.2;
padding: 0 9px;
outline: none;
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
}
.application-preview-select {
cursor: pointer;
appearance: auto;
}
.message-answer-markdown :deep(ul),
.message-answer-markdown :deep(ol) {
margin: 0;