4.2 KiB
4.2 KiB
name, overview, todos
| name | overview | todos | |||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| layouts-dark-light-adaptation | 修复 layouts 下未做 dark/light 主题适配的硬编码样式,统一改用 --fms-* token。 |
|
用户需求
检查 src/layouts 下所有文件并结合 src/theme/tokens.css,定位未做 dark/light 模式适配的硬编码样式,并用 --fms-* token 替换修复,使其跟随主题切换。
产品概述
FMS Vue 前端布局壳(顶栏 / 侧栏 / 页签 / 导航菜单)基于 tokens.css 的 CSS 变量做深浅色适配。本次仅修复布局层残留的硬编码颜色,保证切换深色模式时视觉一致。
核心功能
- 修复
AppTabs.vue激活页签的硬编码白色文字与关闭按钮白色(含 hover 态),改用var(--fms-primary-text)及基于主色文字色的color-mix派生。 - 修复
AppTopbar.vue主题色板选中对勾的硬编码color: #fff,改用var(--fms-primary-text)。 - 保持其余已正确使用 token 的样式不变(DefaultLayout / AppSidebar / NavMain / NavMenuItem 及 AppTopbar 其他部分均无需改动)。
技术栈
- Vue 3
<script setup>+ SCSS(scoped)+ CSS 变量(:root浅色 /.dark深色,主色--fms-primary由 JS 写入,--fms-primary-text语义色)。 - 适配方式:所有颜色引用
--fms-*token;半透明白使用color-mix(in srgb, var(--fms-primary-text) x%, transparent)派生,不裸写rgba(255,255,255,...)。
实现方案
逐项替换 layouts 下两处文件的硬编码颜色,全部复用现有 token,不新增 token、不改 JS 逻辑:
- AppTabs.vue 激活态
.fms-tab.is-active:color: #fff→color: var(--fms-primary-text);background/border-color已用var(--fms-primary),保持。.fms-tab.is-active .fms-tab-close:color: rgba(255,255,255,0.85)→color: color-mix(in srgb, var(--fms-primary-text) 85%, transparent);hover 背景rgba(255,255,255,0.22)→color-mix(in srgb, var(--fms-primary-text) 22%, transparent);color: #fff→var(--fms-primary-text)。- 理由:
#fff在浅色主色(墨蓝#0f172b)下成立,但用户可切换主色且深色模式下主色文字语义由--fms-primary-text统一表达,裸白会破坏换肤一致性。
- AppTopbar.vue 色板对勾
.check { color: #fff }→color: var(--fms-primary-text)。彩色块源于主色/预设色,对勾需高对比,primary-text在浅色为白、深色主色深时仍为白,视觉等价且符合规范。
实现要点
- 仅改 scoped
<style>,不动<script>/<template>。 - 沿用项目现有
color-mix派生写法(参考AppTopbar.vue搜索框color-mix(in srgb, var(--fms-secondary-hover) 50%, var(--fms-card))),保持一致。 - 不引入过渡/动画之外的额外复杂度;
prefers-reduced-motion已处理,无需改动。 - 按开发规范:修改后只做静态检查(oxlint),不主动
pnpm build/ 启动服务,除非用户要求。
架构与目录
仅修改以下两个文件(均属 src/layouts):
src/layouts/components/AppTabs.vue # [MODIFY] 激活态与关闭按钮颜色改用 primary-text / color-mix
src/layouts/components/AppTopbar.vue # [MODIFY] .check 对勾颜色改用 primary-text
其余 DefaultLayout.vue / AppSidebar.vue / NavMain.vue / NavMenuItem.vue 经核查已正确使用 token,不在本次改动范围。
验证
- 浅色模式:激活页签文字/对勾为白(主色墨蓝,primary-text=白),与现状一致。
- 切换深色模式(
.dark):--fms-primary-text维持白,激活态与对勾仍清晰;若未来主色改为浅色,primary-text会反转,样式自动跟随。 - 运行
pnpm lint(oxlint)确认无新增告警(不主动 build)。