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

@@ -0,0 +1,283 @@
.run-products-card {
overflow: hidden;
}
.run-product-state {
margin: 0 12px 12px;
min-height: 96px;
display: grid;
place-items: center;
gap: 8px;
color: #64748b;
font-size: 13px;
border: 1px dashed #d8e2ee;
border-radius: 4px;
background: #f8fafc;
}
.run-product-state .mdi {
color: #2563eb;
font-size: 24px;
}
.run-product-state.error {
color: #b91c1c;
border-color: #fecaca;
background: #fef2f2;
}
.run-product-state.error .mdi {
color: #dc2626;
}
.run-product-meta-grid {
padding: 0 12px 12px;
}
.run-product-section {
margin: 0 12px 12px;
padding-top: 12px;
border-top: 1px solid #edf2f7;
}
.run-product-section-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 10px;
}
.run-product-section-head h4 {
margin: 0;
color: #0f172a;
font-size: 14px;
font-weight: 800;
}
.run-product-section-head span {
flex: 0 0 auto;
color: #64748b;
font-size: 12px;
}
.run-product-observation-list {
display: grid;
gap: 8px;
}
.run-product-observation {
width: 100%;
padding: 10px 12px;
text-align: left;
border: 1px solid #e5edf6;
border-radius: 4px;
background: #fbfdff;
cursor: pointer;
transition: border-color 0.18s ease, box-shadow 0.18s ease, background 0.18s ease;
}
.run-product-observation:hover,
.run-product-observation:focus-visible,
.run-product-observation.is-expanded {
border-color: rgba(37, 99, 235, 0.32);
background: #ffffff;
box-shadow: 0 10px 28px rgba(15, 23, 42, 0.08);
outline: none;
}
.run-product-observation-head {
display: grid;
grid-template-columns: auto minmax(0, 1fr) auto;
align-items: center;
gap: 8px;
}
.run-product-observation-head strong {
min-width: 0;
overflow: hidden;
color: #0f172a;
font-size: 13px;
font-weight: 800;
text-overflow: ellipsis;
white-space: nowrap;
}
.run-product-observation-head b {
color: #111827;
font-size: 14px;
}
.run-product-observation p,
.run-product-copy {
margin: 8px 0 0;
color: #475569;
font-size: 13px;
line-height: 1.65;
}
.run-product-tags {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-top: 10px;
}
.run-product-tags span {
max-width: 100%;
padding: 4px 8px;
overflow: hidden;
color: #475569;
font-size: 12px;
text-overflow: ellipsis;
white-space: nowrap;
border: 1px solid #e2e8f0;
border-radius: 4px;
background: #ffffff;
}
.run-product-observation-detail {
display: grid;
gap: 10px;
margin-top: 12px;
padding-top: 12px;
border-top: 1px solid #e5edf6;
}
.run-product-observation-detail section {
display: grid;
gap: 8px;
}
.run-product-observation-detail section > span {
color: #334155;
font-size: 12px;
font-weight: 800;
}
.run-product-score-list {
display: grid;
gap: 7px;
}
.run-product-score-list div {
display: grid;
grid-template-columns: 72px minmax(0, 1fr) 34px;
align-items: center;
gap: 8px;
}
.run-product-score-list em {
overflow: hidden;
color: #64748b;
font-size: 12px;
font-style: normal;
text-overflow: ellipsis;
white-space: nowrap;
}
.run-product-score-list i {
height: 6px;
overflow: hidden;
border-radius: 999px;
background: #e2e8f0;
}
.run-product-score-list i b {
display: block;
height: 100%;
border-radius: inherit;
background: linear-gradient(90deg, #2563eb, #22c55e);
}
.run-product-score-list strong {
color: #0f172a;
font-size: 12px;
text-align: right;
}
.run-product-evidence-list {
display: grid;
gap: 6px;
margin: 0;
padding: 0;
list-style: none;
}
.run-product-evidence-list li {
padding: 8px 10px;
border: 1px solid #edf2f7;
border-radius: 4px;
background: #f8fafc;
}
.run-product-evidence-list strong {
display: block;
color: #0f172a;
font-size: 12px;
}
.run-product-evidence-list p {
margin: 4px 0 0;
color: #64748b;
font-size: 12px;
line-height: 1.5;
}
.run-product-inline-empty {
margin: 0;
padding: 12px;
color: #94a3b8;
font-size: 13px;
border: 1px dashed #d8e2ee;
border-radius: 4px;
background: #f8fafc;
}
.risk-level-pill {
display: inline-flex;
align-items: center;
height: 24px;
padding: 0 8px;
color: #475569;
font-size: 12px;
font-weight: 800;
white-space: nowrap;
border: 1px solid #e2e8f0;
border-radius: 4px;
background: #f8fafc;
}
.risk-level-pill.critical,
.risk-level-pill.high {
color: #b91c1c;
border-color: #fecaca;
background: #fef2f2;
}
.risk-level-pill.medium {
color: #92400e;
border-color: #fed7aa;
background: #fff7ed;
}
.risk-level-pill.low {
color: #166534;
border-color: #bbf7d0;
background: #f0fdf4;
}
@media (max-width: 760px) {
.run-product-observation-head {
grid-template-columns: minmax(0, 1fr) auto;
}
.run-product-score-list div {
grid-template-columns: 64px minmax(0, 1fr) 30px;
}
.risk-level-pill {
grid-column: 1 / -1;
width: fit-content;
}
}

View File

@@ -0,0 +1,197 @@
.workbench-date-anchor {
display: inline-flex;
}
.composer-icon-button.active {
border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.42);
background: var(--workbench-primary-soft);
color: var(--workbench-primary-active);
box-shadow: 0 6px 14px rgba(var(--theme-primary-rgb, 58, 124, 165), 0.12);
}
.workbench-date-chip-row {
display: flex;
align-items: center;
min-height: 28px;
}
.workbench-date-chip {
display: inline-flex;
align-items: center;
gap: 6px;
max-width: 100%;
min-height: 26px;
padding: 0 8px;
border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.3);
border-radius: 4px;
background: var(--workbench-primary-soft);
color: var(--workbench-primary-active);
font-size: 12px;
font-weight: 800;
line-height: 1;
}
.workbench-date-chip span {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.workbench-date-chip button {
display: inline-flex;
align-items: center;
justify-content: center;
flex: 0 0 auto;
width: 18px;
height: 18px;
border-radius: 4px;
color: inherit;
}
.workbench-date-chip button:hover {
background: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.12);
}
.workbench-date-chip button:disabled {
opacity: 0.48;
cursor: not-allowed;
}
.composer-date-popover {
position: absolute;
top: calc(100% + 8px);
left: 18px;
z-index: 60;
width: min(320px, calc(100% - 36px));
max-width: calc(100vw - 32px);
display: grid;
gap: 12px;
padding: 14px;
border: 1px solid var(--workbench-line-strong);
border-radius: 4px;
background: rgba(255, 255, 255, 0.98);
box-shadow: 0 18px 40px rgba(15, 23, 42, 0.14), 0 4px 12px rgba(15, 23, 42, 0.06);
}
.composer-date-mode-tabs {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
padding: 4px;
border-radius: 4px;
background: #f1f5f9;
}
.composer-date-mode-btn {
min-height: 34px;
border-radius: 4px;
color: var(--workbench-muted);
font-size: 12px;
font-weight: 800;
}
.composer-date-mode-btn.active {
background: #fff;
color: var(--workbench-ink);
box-shadow: 0 4px 10px rgba(148, 163, 184, 0.16);
}
.composer-date-fields {
display: grid;
gap: 8px;
}
.composer-date-fields-range {
grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
align-items: end;
}
.composer-date-field {
display: grid;
gap: 6px;
min-width: 0;
}
.composer-date-field span {
color: var(--workbench-muted);
font-size: 11px;
font-weight: 800;
}
.composer-date-field input {
width: 100%;
min-height: 36px;
padding: 0 10px;
border: 1px solid var(--workbench-line-strong);
border-radius: 4px;
background: #fff;
color: var(--workbench-ink);
font-size: 12px;
font-weight: 700;
}
.composer-date-field input:focus {
border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.46);
box-shadow: 0 0 0 3px rgba(var(--theme-primary-rgb, 58, 124, 165), 0.1);
outline: none;
}
.composer-date-range-sep {
align-self: center;
color: #94a3b8;
font-size: 12px;
font-weight: 800;
}
.composer-date-hint {
margin: 0;
color: #dc2626;
font-size: 11px;
line-height: 1.5;
}
.composer-date-popover-actions {
display: flex;
justify-content: flex-end;
gap: 8px;
}
.composer-date-cancel-btn,
.composer-date-apply-btn {
min-height: 34px;
padding: 0 14px;
border-radius: 4px;
font-size: 12px;
font-weight: 800;
}
.composer-date-cancel-btn {
border: 1px solid var(--workbench-line-strong);
background: #fff;
color: var(--workbench-muted);
}
.composer-date-apply-btn {
background: var(--workbench-primary-active);
color: #fff;
}
.composer-date-apply-btn:disabled {
opacity: 0.48;
cursor: not-allowed;
}
@media (max-width: 480px) {
.composer-date-popover {
left: 12px;
width: calc(100% - 24px);
}
.composer-date-fields-range {
grid-template-columns: minmax(0, 1fr);
}
.composer-date-range-sep {
display: none;
}
}

View File

@@ -30,7 +30,6 @@
}
.composer-icon-button,
.composer-related-button,
.composer-send-button {
height: 32px;
}
@@ -287,7 +286,6 @@
}
.composer-icon-button,
.composer-related-button,
.composer-send-button {
height: 30px;
font-size: 13px;
@@ -297,11 +295,6 @@
width: 30px;
}
.composer-related-button {
padding: 0 10px;
gap: 4px;
}
.composer-send-button {
width: 46px;
}

View File

@@ -127,6 +127,8 @@
.assistant-file-input { display: none; }
.assistant-composer {
position: relative;
z-index: 5;
display: grid;
gap: 6px;
min-height: var(--composer-min-height);
@@ -160,6 +162,32 @@
.assistant-composer textarea:focus { outline: none; }
.assistant-composer textarea[readonly] {
color: color-mix(in srgb, var(--workbench-ink) 72%, #ffffff);
cursor: progress;
}
.assistant-intent-status {
display: inline-flex;
align-items: center;
width: fit-content;
max-width: 100%;
min-height: 28px;
gap: 8px;
padding: 0 10px;
border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.22);
border-radius: 4px;
background: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.08);
color: var(--workbench-primary-active);
font-size: 12px;
font-weight: 750;
line-height: 1.35;
}
.assistant-intent-status i {
font-size: 15px;
}
.composer-toolbar {
display: flex;
align-items: center;
@@ -167,7 +195,6 @@
}
.composer-icon-button,
.composer-related-button,
.composer-send-button {
display: inline-flex;
align-items: center;
@@ -185,16 +212,6 @@
font-size: 19px;
}
.composer-related-button {
gap: 8px;
padding: 0 16px;
border: 1px solid var(--workbench-line);
background: var(--workbench-surface);
color: var(--workbench-text);
font-size: 14px;
font-weight: 700;
}
.composer-count {
margin-left: auto;
color: color-mix(in srgb, var(--workbench-muted) 75%, #ffffff);
@@ -691,8 +708,7 @@
.todo-row:hover,
.progress-row:hover,
.quick-prompts button:hover,
.composer-icon-button:hover,
.composer-related-button:hover {
.composer-icon-button:hover {
border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.24);
color: var(--workbench-primary-active);
}

View File

@@ -0,0 +1,334 @@
.risk-observation-evidence-card {
display: grid;
gap: 14px;
}
.risk-evidence-refresh {
display: inline-flex;
align-items: center;
gap: 6px;
min-height: 30px;
padding: 0 10px;
border: 1px solid #dbe5ef;
border-radius: 4px;
background: #fff;
color: #334155;
font-size: 12px;
font-weight: 800;
cursor: pointer;
}
.risk-evidence-refresh:disabled {
cursor: not-allowed;
opacity: .72;
}
.risk-evidence-state {
min-height: 112px;
display: grid;
place-content: center;
justify-items: center;
gap: 8px;
color: #64748b;
font-size: 13px;
font-weight: 700;
}
.risk-evidence-state i {
color: #94a3b8;
font-size: 24px;
}
.risk-evidence-state.error {
color: #b91c1c;
}
.risk-evidence-current-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 10px 12px;
border: 1px solid #e6edf5;
border-radius: 4px;
background: #fff;
}
.risk-evidence-current-head div {
min-width: 0;
display: grid;
gap: 3px;
}
.risk-evidence-current-head span {
color: #64748b;
font-size: 12px;
font-weight: 850;
}
.risk-evidence-current-head strong {
overflow: hidden;
color: #0f172a;
font-size: 14px;
font-weight: 900;
line-height: 1.35;
text-overflow: ellipsis;
white-space: nowrap;
}
.risk-evidence-current-head em {
flex: 0 0 auto;
color: #64748b;
font-size: 12px;
font-style: normal;
font-weight: 850;
}
.risk-evidence-detail-region {
display: grid;
gap: 12px;
}
.risk-evidence-summary {
display: grid;
grid-template-columns: 86px minmax(0, 1fr);
gap: 14px;
align-items: stretch;
padding: 14px;
border: 1px solid #edf2f7;
border-radius: 4px;
background: #f8fafc;
}
.risk-evidence-score {
display: grid;
place-content: center;
justify-items: center;
gap: 4px;
min-height: 82px;
border-radius: 4px;
background: #e2e8f0;
color: #475569;
}
.risk-evidence-score.critical,
.risk-evidence-score.high {
background: rgba(239, 68, 68, .1);
color: #b91c1c;
}
.risk-evidence-score.medium {
background: rgba(245, 158, 11, .12);
color: #b45309;
}
.risk-evidence-score strong {
font-size: 28px;
font-weight: 900;
line-height: 1;
font-variant-numeric: tabular-nums;
}
.risk-evidence-score span {
font-size: 12px;
font-weight: 900;
}
.risk-evidence-copy {
min-width: 0;
display: grid;
gap: 8px;
align-content: center;
}
.risk-evidence-copy h4 {
min-width: 0;
color: #0f172a;
font-size: 15px;
font-weight: 850;
line-height: 1.35;
}
.risk-evidence-copy p {
color: #475569;
font-size: 13px;
font-weight: 600;
line-height: 1.55;
}
.risk-evidence-meta {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.risk-evidence-meta span,
.risk-chip-list span {
display: inline-flex;
align-items: center;
min-height: 24px;
padding: 0 8px;
border: 1px solid #dbe5ef;
border-radius: 4px;
background: #fff;
color: #475569;
font-size: 12px;
font-weight: 800;
}
.risk-evidence-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px;
}
.risk-evidence-section {
min-width: 0;
display: grid;
gap: 10px;
padding: 12px;
border: 1px solid #edf2f7;
border-radius: 4px;
background: #fff;
}
.risk-evidence-section-title {
color: #334155;
font-size: 12px;
font-weight: 900;
}
.risk-score-list {
display: grid;
gap: 8px;
}
.risk-score-row {
display: grid;
grid-template-columns: 72px minmax(0, 1fr) 34px;
align-items: center;
gap: 8px;
}
.risk-score-row span {
color: #64748b;
font-size: 12px;
font-weight: 800;
}
.risk-score-row i {
height: 7px;
overflow: hidden;
border-radius: 999px;
background: #edf2f7;
}
.risk-score-row b {
display: block;
height: 100%;
border-radius: inherit;
background: var(--theme-primary);
}
.risk-score-row strong {
color: #0f172a;
font-size: 12px;
font-weight: 900;
text-align: right;
}
.risk-evidence-list {
display: grid;
gap: 8px;
margin: 0;
padding: 0;
list-style: none;
}
.risk-evidence-list li {
display: grid;
gap: 3px;
}
.risk-evidence-list strong {
color: #0f172a;
font-size: 12px;
font-weight: 850;
}
.risk-evidence-list span,
.risk-evidence-empty,
.risk-chip-list em {
color: #64748b;
font-size: 12px;
font-style: normal;
font-weight: 650;
line-height: 1.5;
}
.risk-chip-list {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.risk-observation-list {
display: grid;
gap: 8px;
}
.risk-observation-row {
display: grid;
grid-template-columns: 80px minmax(0, 1fr) 42px;
align-items: center;
gap: 10px;
min-height: 40px;
padding: 8px 10px;
border: 1px solid #edf2f7;
border-radius: 4px;
background: #fff;
text-align: left;
cursor: pointer;
}
.risk-observation-row.active,
.risk-observation-row:hover,
.risk-observation-row:focus-visible {
border-color: rgba(var(--theme-primary-rgb), .24);
background: #f8fafc;
}
.risk-observation-row:focus-visible {
outline: 2px solid rgba(var(--theme-primary-rgb), .28);
outline-offset: 2px;
}
.risk-observation-row span,
.risk-observation-row em {
color: #64748b;
font-size: 12px;
font-style: normal;
font-weight: 850;
}
.risk-observation-row strong {
min-width: 0;
overflow: hidden;
color: #0f172a;
font-size: 13px;
font-weight: 850;
text-overflow: ellipsis;
white-space: nowrap;
}
.risk-observation-row em {
color: #0f172a;
text-align: right;
}
@media (max-width: 960px) {
.risk-evidence-summary,
.risk-evidence-grid {
grid-template-columns: minmax(0, 1fr);
}
}

View File

@@ -124,6 +124,49 @@
position: relative;
}
.dashboard-switch-wrap {
width: 190px;
flex: 0 0 190px;
height: 44px;
display: flex;
align-items: center;
}
.dashboard-switch-select {
width: 100%;
}
.dashboard-switch-select :deep(.el-select__wrapper) {
height: 44px;
min-height: 44px;
border-radius: 4px;
background: #f8fbfd;
box-shadow:
0 0 0 2px rgba(var(--theme-primary-rgb, 58, 124, 165), .48) inset,
0 1px 2px rgba(15, 23, 42, .05);
}
.dashboard-switch-select :deep(.el-select__wrapper:hover) {
background: #f3f9fd;
box-shadow:
0 0 0 2px rgba(var(--theme-primary-rgb, 58, 124, 165), .72) inset,
0 0 0 3px rgba(var(--theme-primary-rgb, 58, 124, 165), .08);
}
.dashboard-switch-select :deep(.el-select__wrapper.is-focused) {
background: #ffffff;
box-shadow:
0 0 0 2px var(--theme-primary) inset,
0 0 0 3px rgba(var(--theme-primary-rgb, 58, 124, 165), .14);
}
.dashboard-switch-select :deep(.el-select__placeholder),
.dashboard-switch-select :deep(.el-select__selected-item) {
color: #1e293b;
font-size: 13px;
font-weight: 800;
}
.custom-range-btn {
height: 42px;
display: inline-flex;
@@ -507,6 +550,11 @@
justify-content: center;
}
.dashboard-switch-wrap {
width: 100%;
flex: 1 1 100%;
}
.calendar-popover {
right: auto;
left: 0;

View File

@@ -24,7 +24,7 @@
grid-template-rows: auto minmax(0, 1fr);
overflow: hidden;
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);
opacity: 1;
@@ -63,7 +63,7 @@
gap: 12px;
padding: 16px;
border-bottom: 1px solid #e2e8f0;
background: linear-gradient(180deg, #f8fbff, #ffffff);
background: #ffffff;
}
.insight-head h3 {
@@ -96,7 +96,7 @@
display: inline-flex;
align-items: center;
padding: 0 10px;
border-radius: 999px;
border-radius: 4px;
background: #eff6ff;
color: #2563eb;
font-size: 11px;
@@ -111,7 +111,7 @@
gap: 10px;
padding: 12px;
border: 1px solid #e2e8f0;
border-radius: 12px;
border-radius: 4px;
background: #ffffff;
}
@@ -126,7 +126,6 @@
.note-block p,
.review-side-head p,
.review-side-risk-summary,
.flow-step-tool,
.flow-step-detail,
.flow-step-card time {
margin: 0;
@@ -166,7 +165,7 @@
display: grid;
gap: 6px;
padding: 10px;
border-radius: 10px;
border-radius: 4px;
background: #f8fbff;
}
@@ -187,7 +186,7 @@
display: inline-flex;
align-items: center;
padding: 0 8px;
border-radius: 999px;
border-radius: 4px;
background: #eff6ff;
color: #2563eb;
font-size: 11px;
@@ -202,7 +201,7 @@
.flow-step-card,
.review-document-preview-card {
border: 1px solid #e2e8f0;
border-radius: 10px;
border-radius: 4px;
background: #ffffff;
}
@@ -229,7 +228,7 @@
height: 30px;
display: grid;
place-items: center;
border-radius: 8px;
border-radius: 4px;
background: #eff6ff;
color: #2563eb;
font-size: 11px;
@@ -255,7 +254,7 @@
height: 30px;
display: grid;
place-items: center;
border-radius: 8px;
border-radius: 4px;
background: #eff6ff;
color: var(--theme-primary, #3a7ca5);
}
@@ -295,7 +294,7 @@
.review-document-nav-btn,
.review-side-save-pill {
border: 1px solid #cbd5e1;
border-radius: 8px;
border-radius: 4px;
background: #ffffff;
color: #334155;
}
@@ -383,7 +382,7 @@
display: grid;
gap: 7px;
padding: 10px 11px;
border-radius: 8px;
border-radius: 4px;
background: #f8fafc;
box-shadow: none;
transition: background 0.18s ease, border-color 0.18s ease, color 0.18s ease, box-shadow 0.18s ease;
@@ -410,7 +409,6 @@
color: #ffffff;
}
.flow-step-item.completed .flow-step-tool,
.flow-step-item.completed .flow-step-detail,
.flow-step-item.completed .flow-step-card time {
color: #cbd5e1;
@@ -447,7 +445,7 @@
gap: 8px;
padding: 18px;
border: 1px dashed #cbd5e1;
border-radius: 10px;
border-radius: 4px;
background: #f8fbff;
color: #64748b;
text-align: center;
@@ -459,7 +457,7 @@
width: 100%;
min-height: 34px;
border: 1px solid #cbd5e1;
border-radius: 8px;
border-radius: 4px;
background: #ffffff;
color: #0f172a;
font: inherit;

View File

@@ -0,0 +1,191 @@
.application-preview-date-chip {
display: inline-flex;
align-items: center;
min-height: 24px;
padding: 0 8px;
border-radius: 999px;
background: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.1);
color: var(--theme-primary-active, #255b7d);
font-weight: 850;
}
.application-draft-preview {
width: min(100%, 620px);
max-width: 620px;
gap: 12px;
background: #ffffff;
}
.application-draft-preview .application-draft-head {
display: grid;
grid-template-columns: 36px minmax(0, 1fr) auto;
align-items: start;
justify-content: initial;
gap: 10px;
padding-bottom: 10px;
border-bottom: 1px solid #e6edf5;
}
.application-draft-icon {
width: 34px;
height: 34px;
display: inline-grid;
place-items: center;
border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.22);
border-radius: 4px;
background: #f4f9fc;
color: var(--theme-primary-active, #255b7d);
font-size: 18px;
}
.application-draft-title {
min-width: 0;
display: grid;
gap: 3px;
}
.application-draft-title strong {
color: #102033;
font-size: 14px;
font-weight: 850;
line-height: 1.35;
}
.application-draft-title small {
color: #667085;
font-size: 12px;
line-height: 1.45;
}
.application-draft-status {
min-height: 22px;
display: inline-flex;
align-items: center;
padding: 0 8px;
border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.24);
border-radius: 4px;
background: #f7fbff;
color: var(--theme-primary-active, #255b7d);
font-size: 11px;
font-weight: 850;
line-height: 1;
}
.application-draft-brief {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0;
border: 1px solid #d7e4f2;
border-radius: 4px;
overflow: hidden;
background: #ffffff;
}
.application-draft-brief-item {
display: grid;
grid-template-columns: 42px minmax(0, 1fr);
gap: 10px;
align-items: center;
min-height: 42px;
padding: 8px 12px;
border-top: 1px solid #edf2f7;
border-left: 1px solid #edf2f7;
font-size: 12px;
}
.application-draft-brief-item:nth-child(even) {
border-left: 0;
}
.application-draft-brief-item.is-primary {
grid-column: 1 / -1;
grid-template-columns: 42px minmax(0, 1fr);
min-height: 48px;
border-top: 0;
border-left: 0;
background: #f8fbff;
}
.application-draft-brief-item span {
color: #64748b;
font-weight: 760;
}
.application-draft-brief-item strong {
min-width: 0;
overflow-wrap: anywhere;
color: #0f172a;
font-weight: 850;
}
.application-draft-brief-item.is-primary strong {
color: #102033;
font-size: 13px;
}
.application-draft-footer {
display: block;
}
.application-draft-footer p {
margin: 0;
color: #64748b;
font-size: 12px;
line-height: 1.5;
}
.application-draft-detail-link {
display: inline;
margin: 0 1px;
padding: 0;
border: 0;
border-radius: 2px;
background: transparent;
color: var(--theme-primary-active, #255b7d);
font: inherit;
font-weight: 850;
line-height: inherit;
text-decoration: underline;
text-underline-offset: 3px;
cursor: pointer;
transition: color 0.18s ease, outline-color 0.18s ease;
}
.application-draft-detail-link:hover:not(:disabled) {
color: var(--theme-primary, #3a7ca5);
}
.application-draft-detail-link:focus-visible {
outline: 2px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.24);
outline-offset: 2px;
}
.application-draft-detail-link:disabled {
cursor: not-allowed;
opacity: 0.58;
}
@media (max-width: 640px) {
.application-draft-preview .application-draft-head {
grid-template-columns: 34px minmax(0, 1fr);
}
.application-draft-status {
grid-column: 2;
justify-self: start;
}
.application-draft-brief {
grid-template-columns: 1fr;
}
.application-draft-brief-item {
border-left: 0;
border-top: 1px solid #edf2f7;
}
.application-draft-brief-item.is-primary {
border-top: 0;
}
}

View File

@@ -1,3 +1,5 @@
@import "./travel-reimbursement-message-application.css";
.message-row {
display: grid;
grid-template-columns: 38px minmax(0, 1fr);
@@ -58,6 +60,13 @@
max-width: min(100%, 1080px);
}
.message-feedback-bubble {
grid-column: 2;
justify-self: start;
max-width: min(100%, 420px);
margin-top: -2px;
}
.message-bubble-review-risk-low,
.message-bubble-review-risk-medium,
.message-bubble-review-risk-high {
@@ -230,14 +239,6 @@
color: var(--theme-primary-active, #2f6d95);
}
.message-meta-row {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-top: 10px;
}
.message-meta-chip,
.message-risk-chip,
.file-chip {
min-height: 26px;