From 24b5b71b0f2684d40c88f8551c85cb1fafc76b67 Mon Sep 17 00:00:00 2001 From: caoxiaozhu Date: Sun, 21 Jun 2026 22:49:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(web):=20=E5=B7=AE=E6=97=85=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E8=AF=A6=E6=83=85=E8=BF=9B=E5=BA=A6=20viewer=20?= =?UTF-8?q?=E4=B8=8E=E5=AE=A1=E6=89=B9/=E5=8A=A0=E8=BD=BD=E6=80=81?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 requestProgressViewer,申请单在直属领导审批视角下将当前步骤展示为'等待批复',travel-request-detail/app-shell/useRequests 接入 - TravelRequestApprovalDialog 增强审批交互,TableLoadingState 补充表格加载占位,ConfirmDialog 扩展确认对话框能力 - useAppShell/useRequests/AppShellRouteView 配套适配申请详情跳转与会话状态 - 同步更新 requestProgressSteps、travel-request-detail-leader-approval、assistant-session-draft-delete、documents-center-status-filter、app-shell-financial-assistant-entry、request-progress-viewer 等测试 --- web/src/components/shared/ConfirmDialog.vue | 54 +++++++++++ .../components/shared/TableLoadingState.vue | 95 ++++++++++++++++--- .../travel/TravelRequestApprovalDialog.vue | 20 ++-- web/src/composables/useAppShell.js | 12 +-- web/src/composables/useRequests.js | 11 ++- web/src/utils/requestProgressViewer.js | 22 +++++ web/src/views/AppShellRouteView.vue | 29 ++++-- .../views/scripts/TravelRequestDetailView.js | 11 ++- ...p-shell-financial-assistant-entry.test.mjs | 2 +- .../assistant-session-draft-delete.test.mjs | 6 +- .../documents-center-status-filter.test.mjs | 14 +++ web/tests/request-progress-viewer.test.mjs | 49 ++++++++++ web/tests/requestProgressSteps.test.mjs | 11 ++- ...el-request-detail-leader-approval.test.mjs | 8 ++ 14 files changed, 295 insertions(+), 49 deletions(-) create mode 100644 web/src/utils/requestProgressViewer.js create mode 100644 web/tests/request-progress-viewer.test.mjs diff --git a/web/src/components/shared/ConfirmDialog.vue b/web/src/components/shared/ConfirmDialog.vue index 86da43c..5d97c51 100644 --- a/web/src/components/shared/ConfirmDialog.vue +++ b/web/src/components/shared/ConfirmDialog.vue @@ -321,6 +321,60 @@ function handleCancel() { max-height: min(420px, calc(100dvh - 292px)); } +.shared-confirm-card--approval { + width: min(460px, calc(100vw - 40px)); + gap: 10px; + padding: 18px 20px; + border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.14); + border-radius: 6px; + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.99), rgba(248, 250, 252, 0.98)); + box-shadow: + 0 18px 40px rgba(15, 23, 42, 0.15), + 0 1px 0 rgba(255, 255, 255, 0.88) inset; +} + +.shared-confirm-card--approval .shared-confirm-badge { + min-height: 24px; + padding: 0 9px; + font-size: 11px; + font-weight: 850; +} + +.shared-confirm-card--approval h4 { + font-size: 20px; + line-height: 1.38; + font-weight: 850; +} + +.shared-confirm-card--approval p { + max-width: 34em; + color: #64748b; + font-size: 13px; + line-height: 1.6; +} + +.shared-confirm-card--approval .shared-confirm-body { + gap: 8px; + max-height: min(270px, calc(100dvh - 238px)); +} + +.shared-confirm-card--approval .shared-confirm-actions { + gap: 8px; + padding-top: 2px; +} + +.shared-confirm-card--approval .shared-confirm-btn { + min-width: 118px; + min-height: 38px; + border-radius: 6px; + font-size: 13px; +} + +.shared-confirm-card--approval .shared-confirm-btn.confirm.primary { + box-shadow: 0 10px 20px rgba(var(--theme-primary-rgb, 58, 124, 165), 0.18); +} + .shared-confirm-card--destructive { width: min(420px, calc(100vw - 40px)); gap: 12px; diff --git a/web/src/components/shared/TableLoadingState.vue b/web/src/components/shared/TableLoadingState.vue index 95a69c8..82da0e2 100644 --- a/web/src/components/shared/TableLoadingState.vue +++ b/web/src/components/shared/TableLoadingState.vue @@ -8,14 +8,13 @@ :aria-label="ariaLabel" aria-live="polite" > - +
+ +
+ {{ title }} +

{{ message }}

+
+
@@ -23,8 +22,6 @@