style(dashboard): 将顶部标题栏与操作栏移入主工作区大背景卡片内部

This commit is contained in:
xuans 2026-10-18 14:06:55 +08:00
parent b7aac02ada
commit 5cbc0241e6
3 changed files with 28 additions and 24 deletions

View File

@ -3665,9 +3665,9 @@ P0-05 从 `[!]` 调整为 `[~]`,并未标记完成;P0-04 剩余门禁和全
## 2026年10月18日 顶部标题与操作栏移入整体页面大容器背景框
- [ ] 需求梳理与确认:将之前悬浮在背景框外部的顶部标题栏(SCERT / SSL 证书管理、证书管理总览)与操作栏(刷新状态及各板块操作按钮)移入整体页面卡片容器内部,使整个页面具有统一、连贯的大背景卡片视觉。
- [ ] 结构与样式调整:重构 Dashboard.vue 及 DashboardLayout.css,将顶部标题区与操作栏收纳至页面卡片容器内,优化内边距、分割边界与网格自适应流。
- [ ] 前端测试验证:执行全量 357 项单元测试确保 100% 通过无回归。
- [ ] 生产构建与部署:打包生产静态资源并部署至第一台 Linux 生产服务器(8.137.23.95:/scert/web/)。
- [ ] 浏览器 MCP 实机验收与页面效果复核。
- [ ] 规范双重推送 Git 远程仓库。
- [✓] 需求梳理与确认:将之前悬浮在背景框外部的顶部标题栏(SCERT / SSL 证书管理、证书管理总览)与操作栏(刷新状态及各板块操作按钮)移入整体页面卡片容器内部,使整个页面具有统一、连贯的大背景卡片视觉。
- [✓] 结构与样式调整:重构 Dashboard.vue 及 DashboardLayout.css,将顶部标题区与操作栏收纳至页面卡片容器内(.dashboard-workspace > .dashboard-content 顶部),优化内边距、分割边界与网格自适应流。
- [✓] 前端测试验证:执行全量 357 项单元测试确保 100% 通过无回归(357 pass, 0 fail)。
- [✓] 生产构建与部署:打包生产静态资源(vite build)并通过安全 SFTP 部署至第一台 Linux 生产服务器(8.137.23.95:/scert/web/)。
- [✓] 浏览器 MCP 实机验收与页面效果复核:通过 CDP 刷新页面并读取实机 DOM,验证顶部标题栏与操作栏已成功内置于主卡片容器中,展示正常。
- [✓] 规范双重推送 Git 远程仓库。

View File

@ -138,7 +138,23 @@ const { activeSection, activeLabel, sections, selectSection } = useDashboardNavi
<template>
<main class="page-shell">
<header class="topbar">
<div class="dashboard-messages" aria-live="polite">
<p v-if="error" class="error-banner">{{ error }}</p>
<p v-if="notice" class="notice-banner">{{ notice }}</p>
<p v-if="taskQueryError" class="error-banner" role="alert">{{ taskQueryError }}</p>
</div>
<div class="dashboard-workspace">
<div
:key="activeSection"
class="dashboard-content"
role="region"
:aria-label="activeLabel"
tabindex="0"
>
<header class="topbar">
<div>
<p class="eyebrow">SCERT / SSL 证书管理</p>
<h1>证书管理总览</h1>
@ -169,21 +185,6 @@ const { activeSection, activeLabel, sections, selectSection } = useDashboardNavi
</button>
</div>
</header>
<div class="dashboard-messages" aria-live="polite">
<p v-if="error" class="error-banner">{{ error }}</p>
<p v-if="notice" class="notice-banner">{{ notice }}</p>
<p v-if="taskQueryError" class="error-banner" role="alert">{{ taskQueryError }}</p>
</div>
<div class="dashboard-workspace">
<div
:key="activeSection"
class="dashboard-content"
role="region"
:aria-label="activeLabel"
tabindex="0"
>
<div v-if="activeSection === 'overview'" class="overview-section">
<section class="panel overview-panel">

View File

@ -1,6 +1,6 @@
.page-shell {
display: grid;
grid-template-rows: auto auto minmax(0, 1fr);
grid-template-rows: auto minmax(0, 1fr);
gap: 16px;
width: 100%;
max-width: 1600px;
@ -11,6 +11,9 @@
.topbar {
gap: 16px;
padding: 24px 24px 16px;
border-bottom: 1px solid #f0f4f9;
background: #ffffff;
}
.topbar h1 {
@ -36,7 +39,7 @@
}
.page-shell:not(:has(.dashboard-messages > p)) {
grid-template-rows: auto minmax(0, 1fr);
grid-template-rows: minmax(0, 1fr);
}
.dashboard-messages p {