|
| 1 | +# 🧱 项目架构 |
| 2 | + |
| 3 | +**如果你想要二次开发、新增特性或修复 Bug,建议阅读本文档,以便更好地理解项目结构和实现逻辑。** |
| 4 | + |
| 5 | +## 📁 目录结构 |
| 6 | + |
| 7 | +项目 UI 层由一个浮动入口 `dock` 和一个包含多个功能面板的侧边 `panel` 组成: |
| 8 | + |
| 9 | +```mermaid |
| 10 | +graph TB |
| 11 | + A[Generator] --> B[float-dock] |
| 12 | + A[Generator] --> C[panel-drawer] |
| 13 | +
|
| 14 | + C[panel-drawer] --> D[color-panel] |
| 15 | + C[panel-drawer] --> E[font-panel] |
| 16 | + C[panel-drawer] --> F[shadow-panel] |
| 17 | + C[panel-drawer] --> G[radius-panel] |
| 18 | + C[panel-drawer] --> H[size-panel] |
| 19 | +``` |
| 20 | + |
| 21 | +项目还包含两个文件夹: |
| 22 | + |
| 23 | +```mermaid |
| 24 | +graph TB |
| 25 | + A[styles] --> B["*.min.css 样式文件"] |
| 26 | +
|
| 27 | + C[common] --> D[components 通用组件] |
| 28 | + C[common] --> E[i18n 国际化] |
| 29 | + C[common] --> F[theme 主题核心<br>(包括内置主题模板和颜色算法等实现)] |
| 30 | + C[common] --> G[utils 工具函数] |
| 31 | + |
| 32 | + classDef themeFill fill:#e6f7ff,stroke:#1890ff,stroke-width:2px; |
| 33 | + class F themeFill |
| 34 | +``` |
| 35 | + |
| 36 | +`*.min.css` 文件来自 `tdesign-vue` 且经过二次压缩 |
| 37 | +- 额外添加了 `:host` 选择器,确保 Web Components 打包后样式正常 |
| 38 | +- 移除颜色相关的 token,使主题生成器能与外部主题色直接同步 |
| 39 | + |
| 40 | +## 🧚 交互逻辑 |
| 41 | + |
| 42 | +### 数据持久化 |
| 43 | + |
| 44 | +1. `custom-theme-options`: |
| 45 | + |
| 46 | +| Key | 类型 | 示例 | |
| 47 | +| ----------------------------- | -------------------------- | --------------------- | |
| 48 | +| `theme` | 主题 | `TCloud` | |
| 49 | +| `color` | 主题色 | `#45C58B` | |
| 50 | +| `gray/success/warning/danger` | 功能色的品牌色 | `#2ba471` | |
| 51 | +| `font/radius/shadow` | 预设步骤中的位置 | `1` | |
| 52 | +| `line-height` | 固定模式或递增模式及其参数 | `plus_9` / `time_1.5` | |
| 53 | +| `recommend` | 智能推荐 | `true` | |
| 54 | +| `neutral` | 关联主题色 | `true` | |
| 55 | + |
| 56 | +2. `custom-theme-tokens`:各种 `--td-*` token,主要来自用户手动修改单个变量的操作 |
| 57 | + |
| 58 | +### 执行流程 |
| 59 | + |
| 60 | +1. **初始化**:根据本地存储的 `theme`(或默认主题),进行 CSS 模板挂载 |
| 61 | + |
| 62 | +2. **配置恢复**:读取本地存储的 `tokens`,并还原用户的自定义修改 |
| 63 | + |
| 64 | +3. **面板渲染**:各个 Panel 根据 `options` 确定初始数值 |
| 65 | + |
| 66 | +## 😈 开发规范 |
| 67 | + |
| 68 | +1. **常量管理**:使用 `UPPER_CASE` 命名方式,独立存放在 JS 文件中,与 Vue 逻辑分离 |
| 69 | + |
| 70 | +2. **全局状态管理**:避免通过 props 层层传递共享变量,优先使用 `inject`、`mixin` 或 `store` 管理 |
| 71 | + |
| 72 | +3. **动态编码管理**:避免硬编码数值,特别是 Token 相关的映射,优先从 CSS 中获取配置 |
0 commit comments