# LVGL Designer 技能文档

## 项目概述

**LVGL Designer** 是一个基于 LVGL 9.3 的图形化设计器，采用 Electron + Vue 3 + TypeScript 技术栈构建。该工具提供可视化的 UI 设计界面，支持拖拽式组件布局，可生成 LVGL 代码用于嵌入式 GUI 开发。

## 核心功能

### 1. 可视化设计器

- 画布拖拽操作，支持组件自由摆放
- 组件属性实时编辑
- 多页面管理与切换
- 层级结构查看与管理

### 2. 组件库

提供丰富的 LVGL 原生组件及自定义组件

### 3. 属性配置

- 位置与尺寸设置
- 背景与边框样式
- 字体与颜色配置
- 状态与标志位管理
- 动画效果配置

### 4. 资源管理

- 图片资源导入与管理
- 字体资源管理
- 多语言支持
- 主题配置

### 5. 代码生成

- 支持生成 C/C++ 代码
- 支持生成项目模板
- 代码预览与导出

## 技术栈

- **框架**: Vue 3.5 + TypeScript
- **UI 框架**: Element Plus + Reka UI
- **构建工具**: Electron Vite 7.1
- **状态管理**: Pinia
- **路由**: Vue Router
- **国际化**: Vue I18n
- **编辑器**: Monaco Editor
- **动画**: Vue3 Moveable

## 项目结构

```
src/
├── main/                    # 主进程代码
│   ├── client.ts            # 客户端通信
│   ├── files.ts             # 文件操作
│   ├── pipe-server.ts       # 管道服务
│   └── index.ts             # 入口文件
├── preload/                 # 预加载脚本
└── renderer/                # 渲染进程
    └── src/
        ├── components/      # 公共组件
        ├── lvgl-widgets/    # LVGL 组件定义
        ├── views/           # 页面视图
        │   └── designer/    # 设计器主界面
        │       ├── config/   # 属性配置面板
        │       ├── sidebar/  # 侧边栏
        │       ├── tools/    # 工具栏
        │       └── workspace/# 工作区
        ├── store/           # 状态管理
        ├── types/           # 类型定义
        └── utils/           # 工具函数
```

## 开发指南

### 环境要求

- Node.js >= 20.x
- pnpm >= 8.x

### 安装依赖

```bash
pnpm install
```

### 开发模式

```bash
pnpm dev
```

### 构建命令

```bash
# Windows
pnpm build:win

# macOS
pnpm build:mac

# Linux
pnpm build:linux
```

### 代码检查

```bash
# 格式化
pnpm format

# 代码检查
pnpm lint

# 类型检查
pnpm typecheck
```

## 核心模块说明

### 1. 状态管理 (store)

- `app.ts`: 应用全局状态
- `project.ts`: 项目状态管理
- `action.ts`: 操作历史记录
- `pipe.ts`: 管道通信状态

### 2. 组件系统

每个 LVGL 组件包含：

- 组件定义文件 (`*.vue`)
- 样式配置 (`style.json`)
- 导出模块 (`index.ts`)

### 3. 属性配置

配置面板支持：

- 基础属性（位置、尺寸、ID）
- 样式属性（背景、边框、字体）
- 状态属性（标志位、状态列表）
- 动画配置（缓动函数、次数）

## 扩展能力

### 添加新组件

1. 在 `src/renderer/src/lvgl-widgets/` 下创建组件目录
2. 创建组件 Vue 文件和样式配置
3. 在 `index.ts` 中注册组件

### 自定义主题

通过主题配置文件自定义颜色方案和样式

## 注意事项

- 组件 ID 需唯一，避免冲突
- 画布操作支持撤销/重做
- 项目文件使用 JSON5 格式存储
- 支持多语言切换（中文/英文）
