# 主题设置功能指南 ## 功能概述 本项目提供了完整的主题设置功能,支持暗黑模式切换和主题色自定义,让用户可以个性化应用的外观。 ## 功能特性 ### 1. 暗黑模式 - 支持浅色/暗黑模式切换 - 自动保存用户偏好设置 - 平滑的过渡动画效果 - 导航栏颜色自动适配 ### 2. 主题色设置 - 12种预设主题色可选 - 支持自定义十六进制颜色值 - 实时预览效果 - 主题色持久化存储 ### 3. 效果预览 - 按钮样式预览 - 文本颜色预览 - 标签组件预览 - 实时更新显示 ## 文件结构 ``` src/ ├── composables/ │ └── theme/ │ ├── theme.ts # 主题管理核心逻辑 │ └── rootTheme.ts # 主题配置和默认值 ├── store/ │ └── modules/ │ └── theme.ts # 主题状态管理 ├── pages/ │ └── setting.vue # 主题设置页面 ├── utils/ │ ├── theme.ts # 主题工具函数 │ └── colorUtils.ts # 颜色处理工具 └── styles/ └── global.scss # 全局主题样式 ``` ## 核心组件说明 ### 1. useTheme Composable 位置:`src/composables/theme/theme.ts` 主要功能: - 主题模式切换(浅色/暗黑) - 主题色设置和保存 - 导航栏颜色适配 - 本地存储管理 ```typescript const { theme, // 当前主题模式 themeVars, // 主题变量 toggleTheme, // 切换主题模式 setThemeColor, // 设置主题色 initTheme, // 初始化主题 } = useTheme(); ``` ### 2. useThemeStore 位置:`src/store/modules/theme.ts` 主要功能: - 主题色状态管理 - CSS变量动态设置 - 多平台兼容处理 ```typescript const themeStore = useThemeStore(); // 设置主题色 themeStore.setPrimaryColor("#165DFF"); // 初始化主题 themeStore.initTheme(); ``` ### 3. 主题设置页面 位置:`src/pages/setting.vue` 功能模块: - 暗黑模式开关 - 预设主题色选择 - 自定义颜色输入 - 效果实时预览 - 重置默认主题 ## 使用方法 ### 1. 基础使用 在页面中引入主题功能: ```vue ``` ### 2. 在布局中使用 在 `src/layouts/tabbar.vue` 中已经集成了主题功能: ```vue ``` ### 3. 自定义主题色 支持的颜色格式: - 6位十六进制:`#165DFF` - 3位十六进制:`#16F`(会自动转换为6位) ```javascript // 设置自定义主题色 const customColor = "#FF6B6B"; themeStore.setPrimaryColor(customColor); ``` ## 预设主题色 项目提供了12种预设主题色: | 颜色名称 | 颜色值 | 说明 | | -------- | ------- | ---------- | | 蓝色 | #0055FE | 默认主题色 | | 红色 | #CD5C5C | 经典红色 | | 绿色 | #228B22 | 自然绿色 | | 紫色 | #722ED1 | 优雅紫色 | | 橙色 | #FA8C16 | 活力橙色 | | 黄色 | #FADB14 | 明亮黄色 | | 青色 | #13C2C2 | 清新青色 | | 粉色 | #EB2F96 | 温馨粉色 | | 天蓝色 | #1890FF | 科技蓝色 | | 深红色 | #F5222D | 警示红色 | ## 样式变量 主题系统使用CSS变量来实现动态主题切换: ```scss :root { /* 主色调 */ --primary-color: #165dff; --primary-color-light: #94bfff; --primary-color-dark: #0e3c9b; /* 功能色 */ --success-color: #0fc6c2; --warning-color: #ff7d00; --danger-color: #f5222d; --info-color: #86909c; } ``` 在组件中使用: ```scss .my-button { background-color: var(--primary-color); color: #fff; &:hover { background-color: var(--primary-color-dark); } } ``` ## 平台兼容性 ### H5平台 - 使用CSS变量动态设置主题 - 支持所有现代浏览器 - 平滑的过渡动画 ### 小程序平台 - 使用原生API设置TabBar样式 - 通过工具函数处理样式应用 - 兼容微信、支付宝等小程序 ### APP平台 - 支持原生导航栏颜色设置 - 状态栏颜色自动适配 - 性能优化处理 ## 最佳实践 ### 1. 主题初始化 在应用启动时初始化主题: ```typescript // src/App.vue import { useThemeStore } from "@/store/modules/theme"; const themeStore = useThemeStore(); onLaunch(() => { // 初始化主题 themeStore.initTheme(); }); ``` ### 2. 组件中使用主题 ```vue ``` ### 3. 暗黑模式适配 ```scss // 暗黑模式样式 :deep(.wd-config-provider[data-theme="dark"]) { .my-component { background: #2a2a2a; color: #fff; .title { color: var(--primary-color); } } } ``` ## 注意事项 1. **性能优化**:主题切换时避免频繁的DOM操作 2. **兼容性**:小程序环境下某些CSS特性可能不支持 3. **用户体验**:提供平滑的过渡动画效果 4. **持久化**:确保用户设置能够正确保存和恢复 5. **响应式**:在不同屏幕尺寸下保持良好的显示效果 ## 故障排除 ### 1. 主题色不生效 - 检查CSS变量是否正确设置 - 确认组件是否在 `wd-config-provider` 包裹内 - 验证颜色值格式是否正确 ### 2. 暗黑模式切换异常 - 检查 `theme` 状态是否正确更新 - 确认暗黑模式样式是否正确编写 - 验证导航栏颜色设置是否生效 ### 3. 设置不持久化 - 检查本地存储权限 - 确认存储key是否正确 - 验证初始化逻辑是否执行 ## 扩展开发 ### 1. 添加新的预设主题色 在 `src/composables/theme/rootTheme.ts` 中添加: ```typescript export const colorColumns = [ // 现有颜色... { value: "#YOUR_COLOR", label: "你的颜色名称", }, ]; ``` ### 2. 自定义主题变量 在 `src/composables/theme/rootTheme.ts` 中扩展: ```typescript export const initThemeVars: ConfigProviderThemeVars = { colorTheme: colorColumns[0].value, // 添加更多主题变量 colorSuccess: "#52c41a", colorWarning: "#faad14", colorDanger: "#ff4d4f", }; ``` ### 3. 添加主题切换动画 ```scss .theme-transition { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } ``` 通过以上指南,你可以充分利用项目的主题设置功能,为用户提供个性化的应用体验。