-
-
- - {{ basis }} - +
- {{ basis }}
-
+
暂无显著贡献项。
- +当前未识别到需要重点展示的单据风险依据。
diff --git a/web/src/assets/styles/components/document-list-shared.css b/web/src/assets/styles/components/document-list-shared.css index 530e3d2..444cbc3 100644 --- a/web/src/assets/styles/components/document-list-shared.css +++ b/web/src/assets/styles/components/document-list-shared.css @@ -507,7 +507,8 @@ td small { .doc-kind-tag, .type-tag, -.status-tag { +.status-tag, +.risk-level-tag { display: inline-flex; align-items: center; justify-content: center; @@ -612,6 +613,49 @@ td small { color: #475569; } +.risk-level-tags { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 4px; + flex-wrap: wrap; +} + +.risk-level-tag { + min-height: 24px; + padding: 0 8px; + border: 1px solid #e2e8f0; + border-radius: 4px; + background: #f8fafc; + color: #64748b; + font-size: 12px; + font-weight: 850; +} + +.risk-level-tag.high { + border-color: #fecaca; + background: #fef2f2; + color: #dc2626; +} + +.risk-level-tag.medium { + border-color: #fed7aa; + background: #fff7ed; + color: #c2410c; +} + +.risk-level-tag.low { + border-color: #bfdbfe; + background: #eff6ff; + color: #2563eb; +} + +.risk-level-tag.none { + border-color: #e2e8f0; + background: #f8fafc; + color: #64748b; +} + .list-foot { display: grid; grid-template-columns: 1fr auto 1fr; diff --git a/web/src/assets/styles/components/stage-risk-advice-card.css b/web/src/assets/styles/components/stage-risk-advice-card.css new file mode 100644 index 0000000..fd89b0a --- /dev/null +++ b/web/src/assets/styles/components/stage-risk-advice-card.css @@ -0,0 +1,302 @@ +.employee-risk-profile-card { + display: grid; + gap: 10px; + padding: 12px 14px; +} + +.employee-risk-head { + margin-bottom: 0; +} + +.employee-risk-title-wrap { + min-width: 0; + display: flex; + align-items: center; + gap: 10px; +} + +.detail-card h3 { + margin: 0; + color: #0f172a; + font-size: 14px; + font-weight: 850; +} + +.detail-card-head h3 { + margin-bottom: 0; +} + +.detail-card-title-with-icon { + display: inline-flex; + align-items: center; + gap: 6px; + line-height: 1.5; +} + +.detail-card-title-with-icon i { + margin-top: 1px; + color: #334155; + font-size: 16px; + line-height: 1; +} + +.employee-risk-tone-pill { + height: 22px; + display: inline-flex; + align-items: center; + padding: 0 8px; + border: 1px solid #dbe4ee; + border-radius: 4px; + background: #f8fafc; + color: #475569; + font-size: 11px; + font-weight: 850; + white-space: nowrap; +} + +.employee-risk-tone-pill.normal { + border-color: #bbf7d0; + background: #f0fdf4; + color: #047857; +} + +.employee-risk-tone-pill.medium { + border-color: #fed7aa; + background: #fff7ed; + color: #c2410c; +} + +.employee-risk-tone-pill.high { + border-color: #fecaca; + background: #fef2f2; + color: #b91c1c; +} + +.employee-risk-body { + display: grid; + gap: 10px; +} + +.employee-risk-decision-panel { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(220px, 32%); + align-items: stretch; + gap: 12px; + padding: 12px; + border: 1px solid #e2e8f0; + border-radius: 4px; + background: #f8fafc; +} + +.employee-risk-decision-panel.medium { + border-color: #fed7aa; + background: #fff7ed; +} + +.employee-risk-decision-panel.high { + border-color: #fecaca; + background: #fef2f2; +} + +.employee-risk-decision-main { + min-width: 0; + display: grid; + gap: 4px; +} + +.employee-risk-decision-main > span, +.employee-risk-decision-action span { + color: #64748b; + font-size: 10px; + font-weight: 850; + line-height: 1.5; +} + +.employee-risk-decision-main strong { + min-width: 0; + color: #0f172a; + font-size: 13px; + font-weight: 850; + overflow-wrap: anywhere; +} + +.employee-risk-decision-panel.medium .employee-risk-decision-main strong { + color: #c2410c; +} + +.employee-risk-decision-panel.high .employee-risk-decision-main strong { + color: #b91c1c; +} + +.employee-risk-decision-main p { + margin: 0; + color: #334155; + font-size: 12px; + line-height: 1.5; +} + +.employee-risk-decision-action { + min-width: 0; + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: center; + gap: 5px; + padding: 10px 12px; + border: 1px solid #e2e8f0; + border-radius: 4px; + background: #fff; +} + +.employee-risk-decision-action strong { + min-width: 0; + color: #0f172a; + font-size: 12px; + font-weight: 800; + line-height: 1.5; + overflow-wrap: anywhere; +} + +.employee-risk-decision-action strong.medium { + color: #c2410c; +} + +.employee-risk-decision-action strong.high { + color: #b91c1c; +} + +.employee-risk-profile-section { + display: grid; + gap: 8px; + padding: 10px 12px; + border: 1px solid #e2e8f0; + border-radius: 4px; + background: #fff; +} + +.employee-risk-section-head { + min-width: 0; + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.employee-risk-section-head span { + color: #0f172a; + font-size: 12px; + font-weight: 850; +} + +.employee-risk-section-head small { + min-width: 0; + color: #64748b; + font-size: 11px; + line-height: 1.5; + text-align: right; +} + +.employee-risk-profile-list { + display: grid; + grid-template-columns: 1fr; + gap: 8px; +} + +.employee-risk-evidence-row { + min-width: 0; + display: grid; + gap: 5px; + padding: 8px; + border: 1px solid #e2e8f0; + border-radius: 4px; + background: #f8fafc; +} + +.employee-risk-evidence-row.medium { + border-color: #fed7aa; + background: #fffbf5; +} + +.employee-risk-evidence-row.high { + border-color: #fecaca; + background: #fff7f7; +} + +.employee-risk-evidence-title { + min-height: 20px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + color: #0f172a; + font-size: 11px; + font-weight: 850; +} + +.employee-risk-evidence-title span { + min-width: 0; + overflow-wrap: anywhere; +} + +.employee-risk-evidence-title strong { + height: 20px; + flex: 0 0 auto; + display: inline-grid; + place-items: center; + padding: 0 6px; + border-radius: 4px; + background: #eef2f7; + color: #475569; + font-size: 10px; + font-weight: 900; + white-space: nowrap; +} + +.employee-risk-evidence-row.medium .employee-risk-evidence-title strong { + background: #ffedd5; + color: #c2410c; +} + +.employee-risk-evidence-row.high .employee-risk-evidence-title strong { + background: #fee2e2; + color: #b91c1c; +} + +.employee-risk-evidence-row ul { + display: grid; + gap: 3px; + margin: 0; + padding: 0; + list-style: none; + align-content: start; +} + +.employee-risk-evidence-row li { + min-width: 0; + color: #475569; + font-size: 11px; + line-height: 1.45; + overflow-wrap: anywhere; + white-space: normal; +} + +.employee-risk-muted { + margin: 0; + color: #94a3b8; + font-size: 11px; +} + +@media (max-width: 960px) { + .employee-risk-decision-panel { + grid-template-columns: 1fr; + } + + .employee-risk-title-wrap, + .employee-risk-section-head { + flex-wrap: wrap; + } + + .employee-risk-section-head small { + text-align: left; + } +} diff --git a/web/src/assets/styles/views/documents-center-view.css b/web/src/assets/styles/views/documents-center-view.css index 2b4605b..b84bc28 100644 --- a/web/src/assets/styles/views/documents-center-view.css +++ b/web/src/assets/styles/views/documents-center-view.css @@ -24,7 +24,7 @@ .col-title { width: 16%; } .col-amount { width: 9%; } .col-node { width: 12%; } -.col-status { width: 8%; } +.col-risk { width: 8%; } .col-updated { width: 9%; } .new-document-badge { diff --git a/web/src/assets/styles/views/travel-request-detail-view.css b/web/src/assets/styles/views/travel-request-detail-view.css index 43d7ab3..27c93a3 100644 --- a/web/src/assets/styles/views/travel-request-detail-view.css +++ b/web/src/assets/styles/views/travel-request-detail-view.css @@ -2059,36 +2059,45 @@ gap: 12px; } -.risk-override-nav { +.risk-override-card-shell { display: grid; - grid-template-columns: 34px minmax(0, 1fr) 34px; - align-items: center; - gap: 8px; + grid-template-columns: 28px minmax(0, 1fr) 28px; + align-items: stretch; + gap: 6px; } -.risk-override-nav span { +.risk-override-side-nav { + width: 28px; + min-height: 76px; + display: inline-flex; + align-items: center; + justify-content: center; + align-self: stretch; + border: 1px solid #dbe3ee; + border-radius: 4px; + background: #f8fafc; + color: #475569; + font-size: 16px; +} + +.risk-override-side-nav:not(:disabled):hover { + border-color: #b8c5d6; + background: #eef4fb; + color: #1e293b; +} + +.risk-override-side-nav:disabled { + cursor: not-allowed; + opacity: .48; +} + +.risk-override-index { display: inline-flex; justify-content: center; color: #64748b; font-size: 12px; font-weight: 850; -} - -.risk-override-nav-btn { - width: 34px; - height: 34px; - display: inline-flex; - align-items: center; - justify-content: center; - border: 1px solid #e2e8f0; - border-radius: 4px; - background: #fff; - color: #475569; -} - -.risk-override-nav-btn:disabled { - cursor: not-allowed; - opacity: .48; + line-height: 1; } .risk-override-card { @@ -2135,6 +2144,26 @@ line-height: 1.6; } +.risk-override-notes { + display: grid; + gap: 6px; + padding-top: 8px; + border-top: 1px dashed #cbd5e1; +} + +.risk-override-notes span { + color: #64748b; + font-size: 11px; + font-weight: 850; +} + +.risk-override-notes strong { + color: #0f172a; + font-size: 12px; + font-weight: 780; + line-height: 1.55; +} + .risk-override-guidance { display: grid; gap: 4px; diff --git a/web/src/components/shared/ConfirmDialog.vue b/web/src/components/shared/ConfirmDialog.vue index 98d199a..a2047f0 100644 --- a/web/src/components/shared/ConfirmDialog.vue +++ b/web/src/components/shared/ConfirmDialog.vue @@ -31,16 +31,27 @@ class="shared-confirm-btn cancel" :disabled="busy" @click="handleCancel" - > - {{ cancelText }} - - + + @@ -60,18 +71,22 @@ const props = defineProps({ badgeTone: { type: String, default: 'info' }, title: { type: String, required: true }, description: { type: String, default: '' }, - cancelText: { type: String, default: '取消' }, - confirmText: { type: String, default: '确认' }, + cancelText: { type: String, default: '取消' }, + secondaryText: { type: String, default: '' }, + secondaryTone: { type: String, default: 'warning' }, + secondaryIcon: { type: String, default: '' }, + confirmText: { type: String, default: '确认' }, busyText: { type: String, default: '处理中...' }, confirmTone: { type: String, default: 'primary' }, confirmIcon: { type: String, default: '' }, + confirmDisabled: { type: Boolean, default: false }, busy: { type: Boolean, default: false }, closeOnMask: { type: Boolean, default: true }, size: { type: String, default: 'default' }, actionsAlign: { type: String, default: 'end' } }) -const emit = defineEmits(['close', 'cancel', 'confirm']) +const emit = defineEmits(['close', 'cancel', 'secondary', 'confirm']) const instance = getCurrentInstance() const titleId = computed(() => `shared-confirm-title-${instance?.uid || 'dialog'}`) @@ -213,15 +228,33 @@ function handleCancel() { transition: transform 160ms ease, box-shadow 160ms ease, border-color 160ms ease, background 160ms ease; } -.shared-confirm-btn.cancel { - border: 1px solid #d7e0ea; - background: rgba(255, 255, 255, 0.92); - color: #475569; -} - -.shared-confirm-btn.confirm { - border: 1px solid transparent; - color: #fff; +.shared-confirm-btn.cancel { + border: 1px solid #d7e0ea; + background: rgba(255, 255, 255, 0.92); + color: #475569; +} + +.shared-confirm-btn.secondary { + border: 1px solid rgba(245, 158, 11, 0.28); + background: rgba(255, 251, 235, 0.92); + color: #b45309; +} + +.shared-confirm-btn.secondary.primary { + border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.28); + background: var(--theme-primary-soft); + color: var(--theme-primary-active); +} + +.shared-confirm-btn.secondary.danger { + border-color: rgba(var(--danger-rgb), 0.24); + background: var(--danger-soft); + color: var(--danger-hover); +} + +.shared-confirm-btn.confirm { + border: 1px solid transparent; + color: #fff; } .shared-confirm-btn.confirm.primary { @@ -238,10 +271,15 @@ function handleCancel() { border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.3); color: var(--theme-primary-active); } - -.shared-confirm-btn.confirm:hover:not(:disabled) { - transform: translateY(-1px); -} + +.shared-confirm-btn.secondary:hover:not(:disabled) { + border-color: rgba(245, 158, 11, 0.42); + background: rgba(254, 243, 199, 0.96); +} + +.shared-confirm-btn.confirm:hover:not(:disabled) { + transform: translateY(-1px); +} .shared-confirm-btn:disabled { cursor: not-allowed; diff --git a/web/src/components/travel/StageRiskAdviceCard.vue b/web/src/components/travel/StageRiskAdviceCard.vue index b39a14d..2f0fb48 100644 --- a/web/src/components/travel/StageRiskAdviceCard.vue +++ b/web/src/components/travel/StageRiskAdviceCard.vue @@ -3,7 +3,7 @@
{{ decisionDescription }}
{{ item }}
-暂无显著贡献项。
- +当前未识别到需要重点展示的单据风险依据。