feat: 新增风险图谱算法与系统仪表盘及操作反馈体系

后端新增风险图谱算法模块、风险观察与反馈服务、规则 DSL
校验器和可解释性引擎,完善系统仪表盘和财务仪表盘统计,
优化 agent 运行和编排执行链路,清理旧开发文档,前端新增
系统趋势、负载热力图等多种仪表盘图表组件,完善操作反馈
对话框和工作台日期选择器,优化报销创建和审批详情交互,
补充单元测试覆盖。
This commit is contained in:
caoxiaozhu
2026-05-30 15:46:51 +08:00
parent 4c59941ec6
commit 7989f3a159
314 changed files with 30073 additions and 20626 deletions

View File

@@ -24,7 +24,7 @@
display: flex;
flex-direction: column;
border: 0;
border-radius: 10px;
border-radius: 4px;
background: transparent;
box-shadow: none;
overflow: hidden;
@@ -142,7 +142,7 @@
background: transparent;
box-shadow: none;
border: 0;
border-radius: 10px;
border-radius: 4px;
backdrop-filter: none;
-webkit-backdrop-filter: none;
overflow: hidden;
@@ -179,9 +179,8 @@
display: grid;
grid-template-rows: auto minmax(0, 1fr);
transform: none;
border-radius: 10px;
background:
linear-gradient(180deg, #f8fbff 0%, #edf5ff 100%);
border-radius: 4px;
background: #f6f9fc;
box-shadow:
0 28px 72px rgba(15, 23, 42, 0.22),
0 10px 28px rgba(15, 23, 42, 0.09),
@@ -217,7 +216,7 @@
align-items: center;
justify-content: center;
padding: 0 14px;
border-radius: 999px;
border-radius: 4px;
background: linear-gradient(135deg, var(--theme-primary), var(--theme-primary-active));
color: #fff;
font-size: var(--wb-fs-badge);
@@ -290,7 +289,7 @@
place-items: center;
padding: 0;
border: 1px solid rgba(248, 113, 113, 0.28);
border-radius: 14px;
border-radius: 4px;
flex: none;
}
@@ -342,7 +341,7 @@
padding: 0;
flex: none;
border: 1px solid rgba(193, 204, 216, 0.92);
border-radius: 14px;
border-radius: 4px;
background: rgba(248, 251, 251, 0.94);
color: #475569;
font-size: 16px;
@@ -375,7 +374,7 @@
align-items: center;
justify-content: center;
padding: 0 10px;
border-radius: 999px;
border-radius: 4px;
background: #f1f5f9;
color: #64748b;
font-size: 11px;
@@ -405,7 +404,7 @@
place-items: center;
padding: 0;
border: 1px solid rgba(203, 213, 225, 0.86);
border-radius: 12px;
border-radius: 4px;
background: rgba(255, 255, 255, 0.92);
color: #475569;
font-size: 16px;
@@ -493,7 +492,7 @@
gap: 7px;
padding: 13px 14px;
border: 1px solid #e5edf5;
border-radius: 12px;
border-radius: 4px;
background: #fff;
box-shadow: 0 8px 22px rgba(226, 232, 240, 0.34);
}
@@ -531,7 +530,7 @@
display: inline-flex;
align-items: center;
padding: 0 9px;
border-radius: 999px;
border-radius: 4px;
background: #f1f5f9;
color: #64748b;
font-size: 11px;
@@ -563,7 +562,6 @@
font-variant-numeric: tabular-nums;
}
.flow-step-tool,
.flow-step-detail,
.flow-step-error {
margin: 0;
@@ -632,7 +630,7 @@
min-width: 0;
min-height: 0;
border: 1px solid rgba(189, 201, 214, 0.74);
border-radius: 16px;
border-radius: 4px;
background: #ffffff;
box-shadow:
0 14px 32px rgba(148, 163, 184, 0.16),
@@ -646,8 +644,7 @@
display: grid;
grid-template-rows: auto minmax(0, 1fr) auto;
overflow: hidden;
background:
linear-gradient(180deg, #ffffff 0%, #f8fbff 100%);
background: #ffffff;
transition:
transform 320ms cubic-bezier(0.22, 1, 0.36, 1),
box-shadow 320ms cubic-bezier(0.22, 1, 0.36, 1);
@@ -715,7 +712,7 @@
gap: 6px;
padding: 0 13px;
border: 1px solid rgba(219, 230, 240, 0.9);
border-radius: 8px;
border-radius: 4px;
background: rgba(255, 255, 255, 0.95);
color: #334155;
font-size: 13px;
@@ -812,7 +809,7 @@
max-width: min(100%, 720px);
padding: 12px 14px;
border: 1px solid rgba(210, 220, 230, 0.94);
border-radius: 20px;
border-radius: 4px;
background: rgba(253, 254, 254, 0.94);
color: #24324a;
font-size: var(--wb-fs-bubble);
@@ -940,7 +937,7 @@
margin-top: 12px;
overflow: hidden;
border: 1px solid #d7e4f2;
border-radius: 8px;
border-radius: 4px;
background: #ffffff;
color: #334155;
font-size: var(--wb-fs-bubble);
@@ -1113,7 +1110,7 @@
.message-answer-markdown :deep(blockquote) {
padding: 8px 10px;
border-left: 3px solid #cbd5e1;
border-radius: 0 10px 10px 0;
border-radius: 0 4px 4px 0;
background: rgba(248, 250, 252, 0.84);
color: #475569;
}
@@ -1123,7 +1120,7 @@
padding: 12px 14px;
border: 1px solid #dbe4ee;
border-left: 4px solid #2563eb;
border-radius: 8px;
border-radius: 4px;
background: #f8fafc;
color: #334155;
}
@@ -1152,7 +1149,7 @@
.message-answer-markdown :deep(code) {
padding: 2px 6px;
border-radius: 6px;
border-radius: 4px;
background: #e2e8f0;
font-size: 12px;
}
@@ -1160,7 +1157,7 @@
.message-answer-markdown :deep(pre) {
overflow-x: auto;
padding: 12px;
border-radius: 14px;
border-radius: 4px;
background: #0f172a;
color: #e2e8f0;
}
@@ -1218,7 +1215,7 @@
margin: 8px 0 10px;
overflow-x: auto;
border: 1px solid #dbe4ee;
border-radius: 10px;
border-radius: 4px;
background: #fff;
box-shadow: 0 8px 20px rgba(15, 23, 42, 0.05);
}
@@ -1262,13 +1259,6 @@
border-bottom: 0;
}
.message-meta-row {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 10px;
}
.message-suggested-actions {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -1276,7 +1266,7 @@
margin-top: 14px;
padding: 10px;
border: 1px solid rgba(203, 213, 225, 0.72);
border-radius: 14px;
border-radius: 4px;
background:
linear-gradient(180deg, rgba(248, 250, 252, 0.92), rgba(255, 255, 255, 0.98));
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.78);
@@ -1291,7 +1281,7 @@
gap: 10px;
padding: 12px 11px;
border: 1px solid rgba(203, 213, 225, 0.8);
border-radius: 10px;
border-radius: 4px;
background: rgba(255, 255, 255, 0.9);
color: #0f172a;
text-align: left;
@@ -1309,7 +1299,7 @@
height: 34px;
display: grid;
place-items: center;
border-radius: 10px;
border-radius: 4px;
background: #f1f5f9;
color: var(--theme-primary-active);
font-size: 18px;
@@ -1396,7 +1386,6 @@
opacity: 1;
}
.message-meta-chip,
.capability-chip,
.risk-chip,
.message-risk-chip,
@@ -1405,35 +1394,16 @@
display: inline-flex;
align-items: center;
padding: 0 10px;
border-radius: 999px;
border-radius: 4px;
font-size: var(--wb-fs-chip);
font-weight: 800;
}
.message-meta-chip,
.capability-chip {
background: #eef6ff;
color: #1d4ed8;
}
.message-meta-chip.high {
background: #fef2f2;
color: #dc2626;
border: 1px solid #fecaca;
}
.message-meta-chip.medium {
background: #fffbeb;
color: #b45309;
border: 1px solid #fde68a;
}
.message-meta-chip.low {
background: #eff6ff;
color: #1d4ed8;
border: 1px solid #bfdbfe;
}
.risk-chip,
.message-risk-chip {
background: #fff1f2;
@@ -1460,7 +1430,7 @@
.message-citation-disclosure {
overflow: hidden;
border: 1px solid #dbe4ee;
border-radius: 16px;
border-radius: 4px;
background: #fbfdff;
}
@@ -1531,7 +1501,7 @@
display: inline-flex;
align-items: center;
padding: 0 10px;
border-radius: 999px;
border-radius: 4px;
font-size: 11px;
font-weight: 800;
background: #eef2ff;
@@ -1571,7 +1541,7 @@
gap: 10px;
padding: 10px 12px;
border: 1px solid #dbe4ee;
border-radius: 14px;
border-radius: 4px;
background: #fbfdff;
cursor: pointer;
font: inherit;
@@ -1646,7 +1616,7 @@
display: inline-flex;
align-items: center;
padding: 0 8px;
border-radius: 999px;
border-radius: 4px;
font-size: 10px;
font-weight: 800;
background: #f1f5f9;
@@ -1698,7 +1668,7 @@
gap: 5px;
padding: 0 8px;
border: 1px solid #fecaca;
border-radius: 999px;
border-radius: 4px;
background: #fff7ed;
color: #9a3412;
font: inherit;
@@ -1763,7 +1733,7 @@
align-items: center;
justify-content: center;
border: 1px solid #dbe4ee;
border-radius: 999px;
border-radius: 4px;
background: #fff;
color: #475569;
transition: border-color 0.2s ease, color 0.2s ease, background 0.2s ease;
@@ -1808,7 +1778,7 @@
gap: 10px;
padding: 0 14px;
border: 1px dashed #dbe4ee;
border-radius: 16px;
border-radius: 4px;
color: #64748b;
font-size: 12px;
font-weight: 700;
@@ -1845,7 +1815,7 @@
.action-card {
padding: 12px 14px;
border: 1px solid #e2e8f0;
border-radius: 16px;
border-radius: 4px;
background: #f8fbff;
}
@@ -1887,8 +1857,8 @@
margin-top: 12px;
padding: 12px 14px;
border: 1px solid #dbe3ec;
border-radius: 16px;
background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%);
border-radius: 4px;
background: #ffffff;
}
.draft-preview header {
@@ -1931,7 +1901,7 @@
gap: 6px;
padding: 0 10px;
border: 0;
border-radius: 999px;
border-radius: 4px;
background: #f1f5f9;
color: #475569;
font-size: 12px;
@@ -1990,7 +1960,7 @@
gap: 12px;
padding: 14px;
border: 1px solid rgba(203, 213, 225, 0.92);
border-radius: 16px;
border-radius: 4px;
background: rgba(255, 255, 255, 0.98);
box-shadow:
0 18px 40px rgba(15, 23, 42, 0.16),
@@ -2007,7 +1977,7 @@
gap: 12px;
padding: 14px;
border: 1px solid rgba(203, 213, 225, 0.92);
border-radius: 16px;
border-radius: 4px;
background: rgba(255, 255, 255, 0.98);
box-shadow:
0 18px 40px rgba(15, 23, 42, 0.16),