From 0f8a08888f6ca3c5a8c4a12222eb0cee63202feb Mon Sep 17 00:00:00 2001 From: Sisyphus Date: Fri, 3 Jul 2026 21:04:29 +0800 Subject: [PATCH] =?UTF-8?q?fix(F006-W5.x.x+1):=20=E8=A1=A5=20EP=20popper?= =?UTF-8?q?=20=E7=B3=BB=E5=88=97=E5=8F=98=E9=87=8F=20+=20:deep()=20?= =?UTF-8?q?=E5=BC=BA=E5=88=B6=E4=BF=AE=E6=9A=97=E4=B8=BB=E9=A2=98=E4=B8=8B?= =?UTF-8?q?=E9=9D=A2=E5=8C=85=E5=B1=91/=E4=B8=BB=E9=A2=98=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E6=96=87=E5=AD=97=E7=B3=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit W5.x.x 验收发现 2 处仍糊: - 红框 1: 顶栏面包屑 工作台 > 数据看板(暗主题) - 红框 2: 主题切换弹窗 切换主题/科技蓝/.../自动持久化(暗主题) 根因: 1. W5.x.x 覆盖 EP 派生色时漏了 --el-popper-bg-color(EP 2.x 真名是 popper,不是 popover;el-popover / el-tooltip / el-dropdown / el-select-dropdown 全部走 popper 容器) 2. el-breadcrumb 内部选择器优先级高,scoped :root 重定向的 --el-text-color-* 被它打回 3. ThemePicker 弹窗被 teleport 出去,scoped 选择器穿透不了 popper 容器 修法: 1. tokens.scss 增 6 个 --el-popper-* 系列变量 2. AppLayout.vue 末尾增 :deep(.el-breadcrumb__inner) + :deep(.el-breadcrumb__separator) + !important 3. ThemePicker.vue 末尾增 :deep(.el-popper.is-light) + 内部 el-popper__arrow / el-popper__title + !important 验证: 切到 暗夜黑 主题,4 项验收清单全过;切回 科技蓝/中国红/ 深空紫 无回归 --- src/components/AppLayout/AppLayout.vue | 14 ++++++++++++++ src/components/ThemePicker/ThemePicker.vue | 18 ++++++++++++++++++ src/theme/tokens.scss | 10 ++++++++++ 3 files changed, 42 insertions(+) diff --git a/src/components/AppLayout/AppLayout.vue b/src/components/AppLayout/AppLayout.vue index e8a4d90..2ba1043 100644 --- a/src/components/AppLayout/AppLayout.vue +++ b/src/components/AppLayout/AppLayout.vue @@ -604,6 +604,20 @@ onMounted(loadBadges) &:hover { background: var(--bg-soft); color: var(--brand); } } .rr-topbar-breadcrumb { font-size: 13px; } + +/* ===== W5.x.x+1: 暗主题下 el-breadcrumb 文字糊(红框 1)强制覆盖 ===== + EP 内部 el-breadcrumb__inner 用 var(--el-text-color-regular) 但优先级被 + scoped 选择器打回 → 用 :deep() + !important 强制跟主题色走 */ +.rr-topbar-breadcrumb :deep(.el-breadcrumb__inner) { + color: var(--ink) !important; + font-weight: 400; +} +.rr-topbar-breadcrumb :deep(.el-breadcrumb__inner.is-link:hover) { + color: var(--brand) !important; +} +.rr-topbar-breadcrumb :deep(.el-breadcrumb__separator) { + color: var(--ink-3) !important; +} .rr-topbar-right { display: flex; align-items: center; gap: 12px; } .rr-topbar-user { display: flex; diff --git a/src/components/ThemePicker/ThemePicker.vue b/src/components/ThemePicker/ThemePicker.vue index 16c985d..6e59ddb 100644 --- a/src/components/ThemePicker/ThemePicker.vue +++ b/src/components/ThemePicker/ThemePicker.vue @@ -138,4 +138,22 @@ function pick(value: string) { text-align: center; border-top: 1px solid var(--border); } + +/* ===== W5.x.x+1: 暗主题下主题弹窗文字糊(红框 2)强制覆盖 ===== + EP 2.x 的 el-popover 实际读 --el-popper-bg-color(popper ≠ popover), + tokens.scss 已加 6 个 popper 变量,这里再补 :deep() 保险: + scoped 选择器对 teleport 出去的内容穿透,EP 弹窗会被 popper + 容器包裹,所以 :deep() 也得穿透 */ +:deep(.el-popper.is-light) { + background: var(--surface) !important; + border-color: var(--border) !important; + color: var(--ink) !important; +} +:deep(.el-popper.is-light .el-popper__arrow::before) { + background: var(--surface) !important; + border-color: var(--border) !important; +} +:deep(.el-popper.is-light .el-popper__title) { + color: var(--ink) !important; +} diff --git a/src/theme/tokens.scss b/src/theme/tokens.scss index 57d42a7..4bd4ad1 100644 --- a/src/theme/tokens.scss +++ b/src/theme/tokens.scss @@ -69,6 +69,16 @@ --el-bg-color-overlay: var(--surface); --el-popover-bg-color: var(--surface); --el-popover-border-color: var(--border); + // ===== Element Plus Popper 容器(W5.x.x+1: 补 W5.x.x 漏的 popper bg) ===== + // EP 2.x 实际读的是 --el-popper-bg-color(popper ≠ popover),W5.x.x 漏覆盖 + // 导致 el-popover / el-tooltip / el-dropdown / el-select-dropdown 等 + // 在暗主题下用 EP 默认亮色背景(色差反了) + --el-popper-bg-color: var(--surface); + --el-popper-border-color: var(--border); + --el-popper-title-text-color: var(--ink); + --el-popper-arrow-bg-color: var(--surface); + --el-popper-plain-bg-color: var(--surface); + --el-popper-padding: 12px; --el-tooltip-bg-color: var(--ink); --el-dropdown-bg-color: var(--surface); --el-dropdown-border-color: var(--border);