包含以下模块: - antdv-next-admin: Vue 3 + TypeScript + Ant Design Vue 管理后台 - 设备/许可证/配件/耗材 CRUD 管理页面 - 基础数据管理 (分类/位置/制造商/型号/供应商) - 业务管理 (故障报修/盘点/资产分配/资产申请/交易记录) - 下拉选项改造 (ID输入框 → 搜索下拉选择) - 资产状态字典化 (接入sys_dict系统) - 界面文案优化 (设备→资产, 在库/在用/维修中/已报废) - 修复 console 警告 (popupClassName, 重复组件注册) - our-itam: Java Spring Boot + magic-api 后端服务 - fantastic-admin: 前端底层框架 (pnpm monorepo) - ciyo-itasset: CIYO 资产模块 - magic-script-skill: Claude Code skill 定义 - .claude: 对话历史记录 Co-Authored-By: Claude Code <noreply@anthropic.com>
6.2 KiB
6.2 KiB
主题 CSS 变量结构说明
变量分类
主题由两类变量组成:
- shadcn 标准 token — 通用设计系统变量,控制组件颜色
- 框架专属 token(
--g-*) — 控制布局区域颜色
shadcn 标准 Token
格式:'L C H'(OKLCH 三个数值,不含 oklch() 包裹)
| 变量 | 作用 |
|---|---|
--background |
页面主背景色 |
--foreground |
主文字颜色 |
--card |
卡片背景色(通常同 background) |
--card-foreground |
卡片文字颜色 |
--popover |
弹出层背景色 |
--popover-foreground |
弹出层文字颜色 |
--primary |
主色调(按钮、高亮、激活状态) |
--primary-foreground |
主色上的文字颜色 |
--secondary |
次要色(次要按钮、标签背景) |
--secondary-foreground |
次要色上的文字颜色 |
--muted |
静音色(禁用状态、次要背景) |
--muted-foreground |
静音色上的文字颜色 |
--accent |
强调色(hover 状态背景) |
--accent-foreground |
强调色上的文字颜色 |
--destructive |
危险/错误色(删除、警告) |
--border |
边框颜色 |
--input |
输入框边框颜色 |
--ring |
焦点环颜色(通常同 primary) |
框架专属 Token(--g-*)
格式:'oklch(L C H)' 或 'oklch(var(--xxx))'(含 oklch() 包裹)
| 变量 | 作用 |
|---|---|
--g-main-area-bg |
主内容区域背景 |
--g-header-bg |
顶部背景 |
--g-header-color |
顶部文字颜色 |
--g-header-menu-color |
顶部导航菜单项文字颜色 |
--g-header-menu-hover-bg |
顶部导航菜单项 hover 背景 |
--g-header-menu-hover-color |
顶部导航菜单项 hover 文字颜色 |
--g-header-menu-active-bg |
顶部导航菜单项激活背景 |
--g-header-menu-active-color |
顶部导航菜单项激活文字颜色 |
--g-main-sidebar-bg |
主侧边栏背景 |
--g-main-sidebar-menu-color |
主侧边栏导航菜单文字颜色 |
--g-main-sidebar-menu-hover-bg |
主侧边栏导航菜单 hover 背景 |
--g-main-sidebar-menu-hover-color |
主侧边栏导航菜单 hover 文字颜色 |
--g-main-sidebar-menu-active-bg |
主侧边栏导航菜单激活背景 |
--g-main-sidebar-menu-active-color |
主侧边栏导航菜单激活文字颜色 |
--g-sub-sidebar-bg |
次侧边栏背景 |
--g-sub-sidebar-menu-color |
次侧边栏导航菜单文字颜色 |
--g-sub-sidebar-menu-hover-bg |
次侧边栏导航菜单 hover 背景 |
--g-sub-sidebar-menu-hover-color |
次侧边栏导航菜单 hover 文字颜色 |
--g-sub-sidebar-menu-active-bg |
次侧边栏导航菜单激活背景 |
--g-sub-sidebar-menu-active-color |
次侧边栏导航菜单激活文字颜色 |
--g-tabbar-bg |
标签栏背景 |
--g-tabbar-tab-color |
标签项文字颜色 |
--g-tabbar-tab-hover-bg |
标签项 hover 背景 |
--g-tabbar-tab-hover-color |
标签项 hover 文字颜色 |
--g-tabbar-tab-active-bg |
标签项激活背景 |
--g-tabbar-tab-active-color |
标签项激活文字颜色 |
--g-toolbar-bg |
工具栏背景 |
明色与暗色的关键差异
差异一:菜单激活状态
明色使用 primary,暗色使用 accent:
// 明色
'--g-header-menu-active-bg': 'oklch(var(--primary))',
'--g-header-menu-active-color': 'oklch(var(--primary-foreground))',
// 暗色
'--g-header-menu-active-bg': 'oklch(var(--accent))',
'--g-header-menu-active-color': 'oklch(var(--accent-foreground))',
同样适用于 --g-main-sidebar-menu-active-* 和 --g-sub-sidebar-menu-active-*。
差异二:主内容区背景
// 明色:略深于背景,形成层次感
'--g-main-area-bg': 'oklch(0.9612 0 0)',
// 暗色:与背景相同,避免过多层次
'--g-main-area-bg': 'oklch(var(--background))',
差异三:标签栏 hover 背景
// 明色
'--g-tabbar-tab-hover-bg': 'oklch(var(--border))',
// 暗色
'--g-tabbar-tab-hover-bg': 'oklch(var(--accent) / 50%)',
差异四:标签栏激活背景
// 明色
'--g-tabbar-tab-active-bg': 'oklch(var(--background))',
// 暗色
'--g-tabbar-tab-active-bg': 'oklch(var(--secondary))',
差异五:菜单颜色引用
// 明色:使用 accent-foreground
'--g-header-menu-color': 'oklch(var(--accent-foreground))',
'--g-header-menu-hover-color': 'oklch(var(--accent-foreground))',
// 暗色:使用 muted-foreground
'--g-header-menu-color': 'oklch(var(--muted-foreground))',
'--g-header-menu-hover-color': 'oklch(var(--muted-foreground))',
完整暗色 --g-* 模板
dark: {
// shadcn token ...
'--g-main-area-bg': 'oklch(var(--background))',
'--g-header-bg': 'oklch(var(--background))',
'--g-header-color': 'oklch(var(--foreground))',
'--g-header-menu-color': 'oklch(var(--muted-foreground))',
'--g-header-menu-hover-bg': 'oklch(var(--muted))',
'--g-header-menu-hover-color': 'oklch(var(--muted-foreground))',
'--g-header-menu-active-bg': 'oklch(var(--accent))',
'--g-header-menu-active-color': 'oklch(var(--accent-foreground))',
'--g-main-sidebar-bg': 'oklch(var(--background))',
'--g-main-sidebar-menu-color': 'oklch(var(--muted-foreground))',
'--g-main-sidebar-menu-hover-bg': 'oklch(var(--muted))',
'--g-main-sidebar-menu-hover-color': 'oklch(var(--muted-foreground))',
'--g-main-sidebar-menu-active-bg': 'oklch(var(--accent))',
'--g-main-sidebar-menu-active-color': 'oklch(var(--accent-foreground))',
'--g-sub-sidebar-bg': 'oklch(var(--background))',
'--g-sub-sidebar-menu-color': 'oklch(var(--muted-foreground))',
'--g-sub-sidebar-menu-hover-bg': 'oklch(var(--muted))',
'--g-sub-sidebar-menu-hover-color': 'oklch(var(--muted-foreground))',
'--g-sub-sidebar-menu-active-bg': 'oklch(var(--accent))',
'--g-sub-sidebar-menu-active-color': 'oklch(var(--accent-foreground))',
'--g-tabbar-bg': 'oklch(var(--background))',
'--g-tabbar-tab-color': 'oklch(var(--accent-foreground) / 50%)',
'--g-tabbar-tab-hover-bg': 'oklch(var(--accent) / 50%)',
'--g-tabbar-tab-hover-color': 'oklch(var(--accent-foreground) / 50%)',
'--g-tabbar-tab-active-bg': 'oklch(var(--accent))',
'--g-tabbar-tab-active-color': 'oklch(var(--foreground))',
'--g-toolbar-bg': 'oklch(var(--background))',
},