diff --git a/docs/development/DESKTOP_CONFIG.md b/docs/development/DESKTOP_CONFIG.md index 042e78bcfbcbe0b726f9d900bf9af7d075099d7b..16d53c221a91d30a72b357866d9711aa06c7f1f5 100644 --- a/docs/development/DESKTOP_CONFIG.md +++ b/docs/development/DESKTOP_CONFIG.md @@ -4,17 +4,19 @@ 桌面配置管理系统是 openEuler Intelligence 桌面应用的核心组件,负责管理应用配置、首次启动欢迎流程以及提供配置相关的 API 接口。该系统采用现代化的架构设计,提供类型安全、可扩展且健壮的配置管理解决方案。 -### 1. 核心特性 +### 核心特性 - **类型安全**: 基于 TypeScript 的完整类型定义 - **健壮性**: 完备的错误处理和恢复机制 - **可扩展性**: 灵活的配置结构,易于添加新配置项 - **安全性**: 配置验证和备份恢复机制 - **用户友好**: 首次启动引导和直观的配置界面 +- **模块化**: 清晰的 API 职责分离,避免代码重复 +- **快速响应**: 服务器验证1.5秒超时,提供快速用户反馈 ## 系统架构 -### 2. 核心组件 +### 核心组件 #### 配置管理器 (`ConfigManager`) @@ -34,42 +36,74 @@ #### 预加载脚本 -- **主预加载**: `electron/preload/index.ts` -- **欢迎预加载**: `electron/preload/welcome.ts` +- **主预加载**: `electron/preload/index.ts` - 提供主程序完整功能API +- **欢迎预加载**: `electron/preload/welcome.ts` - 提供欢迎界面专用API +- **共享模块**: `electron/preload/shared.ts` - 提供跨窗口共享的通用功能 - **职责**: 安全的 API 桥接 -### 3. IPC 接口 +### API 职责分离 -新增的 IPC 处理接口: +#### 主程序 API (`eulercopilot`) + +- 完整的配置管理功能(增删改查) +- 窗口控制(最大化、最小化、关闭) +- 主题管理 +- 系统信息访问 + +#### 欢迎界面 API (`eulercopilotWelcome`) + +- 受限的配置管理(仅代理设置和服务器验证) +- 欢迎流程控制(显示、完成、取消) +- 基础系统信息 +- 实用工具函数 + +#### 共享功能 (`shared`) + +- 安全的IPC通信封装 +- 通用工具函数 +- 服务器验证(1.5秒快速响应) +- 代理URL设置 + +### IPC 接口 + +#### 配置管理接口 + +```typescript +'copilot:get-config' - 获取完整配置(主程序专用) +'copilot:update-config' - 更新配置(主程序专用) +'copilot:reset-config' - 重置为默认配置(主程序专用) +'copilot:set-proxy-url' - 设置代理 URL(共享功能) +'copilot:get-proxy-url' - 获取代理 URL(主程序专用) +'copilot:validate-server' - 验证服务器连接(共享功能,1.5秒超时) +``` + +#### 欢迎界面接口 ```typescript -// 配置管理 -'copilot:get-config' - 获取完整配置 -'copilot:update-config' - 更新配置(部分更新) -'copilot:reset-config' - 重置为默认配置 -'copilot:set-proxy-url' - 设置代理 URL(便捷方法) -'copilot:get-proxy-url' - 获取代理 URL(便捷方法) - -// 欢迎界面 'copilot:show-welcome' - 显示欢迎界面 'copilot:complete-welcome' - 完成欢迎流程 ``` -### 4. 使用示例 +#### 窗口控制接口 + +```typescript +'copilot:window-control' - 窗口控制(minimize/maximize/close) +'copilot:window-is-maximized' - 检查窗口最大化状态 +``` + +### 使用示例 #### 在渲染进程中使用配置 ```typescript -// 获取配置 -const config = await window.ipcRenderer.invoke('copilot:get-config'); - -// 更新配置 -await window.ipcRenderer.invoke('copilot:update-config', { - base_url: 'https://new-server.com' -}); +// 主程序中使用完整API +const config = await window.eulercopilot.config.get(); +await window.eulercopilot.config.update({ base_url: 'https://new-server.com' }); -// 完成欢迎流程 -await window.ipcRenderer.invoke('copilot:complete-welcome'); +// 欢迎界面中使用受限API +await window.eulercopilotWelcome.config.setProxyUrl('https://proxy.com'); +const result = await window.eulercopilotWelcome.config.validateServer('https://server.com'); +await window.eulercopilotWelcome.welcome.complete(); ``` #### 在主进程中使用配置 @@ -85,13 +119,14 @@ const config = configManager.readConfig(); // 更新配置 configManager.updateConfig({ base_url: 'new-url' }); -// 检查配置是否存在 +// 检查配置是否存在(首次启动判断) if (!configManager.isConfigExists()) { - // 处理首次启动逻辑 + // 处理首次启动逻辑,显示欢迎界面 + showWelcomeWindow(); } ``` -### 5. 配置文件格式 +### 配置文件格式 默认配置文件 (`desktop-config.json`) 格式: @@ -103,10 +138,31 @@ if (!configManager.isConfigExists()) { 配置文件位置:`{userData}/Config/desktop-config.json` -### 6. 待完成的工作 +### 实现状态 + +✅ **已完成的功能**: + +- 配置管理系统(完整的CRUD操作) +- 首次启动检测和欢迎窗口自动显示 +- 三层预加载脚本架构(主程序、欢迎界面、共享模块) +- IPC通信层和API职责分离 +- 服务器验证(1.5秒快速响应) +- 配置文件备份和恢复机制 +- 开发环境构建和监控系统 -1. **欢迎界面 UI**: 需要创建实际的欢迎界面 HTML/Vue 组件 +🚧 **需要完善的功能**: + +1. **欢迎界面 UI**: 当前为基础HTML模板,需要创建完整的配置界面组件 2. **国际化**: 为欢迎界面添加多语言支持 +3. **用户指南**: 添加更详细的配置帮助信息 + +📊 **开发环境验证结果**: + +- ✅ Vite开发服务器正常启动(端口自动检测:3000/3001/3002/...) +- ✅ 预加载脚本编译成功(主预载和欢迎预载) +- ✅ 首次启动逻辑正常工作 +- ✅ 欢迎窗口成功显示 +- ⚠️ Chrome DevTools自动填充警告(不影响功能) ## API 参考 @@ -177,7 +233,7 @@ export class ConfigManager { #### 主要接口 -##### 配置管理接口 +##### 配置管理 ```typescript // 获取配置 @@ -204,7 +260,7 @@ ipcRenderer.invoke('copilot:validate-server', url: string): Promise<{ }> ``` -##### 欢迎流程接口 +##### 欢迎流程 ```typescript // 显示欢迎窗口 @@ -311,9 +367,32 @@ interface DesktopConfig { } ``` -### 欢迎界面 API +### 欢迎界面当前实现 + +当前欢迎界面 (`electron/welcome/index.html`) 为基础HTML模板: + +```html + + + + + 欢迎使用 openEuler Intelligence + + +
+

欢迎使用 openEuler Intelligence

+
+ + +``` + +**后续开发建议**: -欢迎界面专用预加载脚本提供的 API: +1. 使用 Vue.js 或 React 创建交互式配置界面 +2. 添加服务器地址配置表单 +3. 集成服务器连接验证功能 +4. 添加配置向导和帮助文档 +5. 实现主题和样式系统 ```typescript interface WelcomeAPI { @@ -344,44 +423,65 @@ electron/ │ ├── common/ │ │ ├── config.ts # 配置管理器 │ │ ├── ipc.ts # IPC 处理器 -│ │ └── conf.ts # 基础配置 +│ │ └── cache-conf.ts # 基础配置路径和缓存路径定义 │ └── window/ │ └── welcome.ts # 欢迎窗口管理 ├── preload/ -│ ├── index.ts # 主预加载脚本 -│ ├── welcome.ts # 欢迎预加载脚本 +| ├── shared.ts # 共享组件 +│ ├── index.ts # 主界面预加载脚本 +│ ├── welcome.ts # 欢迎界面预加载脚本 │ └── types.ts # 类型定义 └── welcome/ └── index.html # 欢迎界面 HTML ``` -### 本地开发 +### 开发环境启动和调试 -1. **安装依赖** +#### 启动开发环境 - ```bash - pnpm install - ``` +```bash +# 进入项目目录 +cd /path/to/euler-copilot/web -2. **开发模式启动** +# 安装依赖 +pnpm install - ```bash - pnpm run dev:desktop - ``` +# 启动开发模式 +pnpm run dev:desktop +``` -3. **构建应用** +#### 开发环境架构 - ```bash - pnpm run package:win64 # Windows - ``` +开发模式使用 `concurrently` 并行运行三个服务: - ```bash - pnpm run package:mac # macOS - ``` +- **R (Render)**: Vite开发服务器 - 负责前端渲染进程 +- **P (Preload)**: 预加载脚本构建 - 监听并重新构建预加载脚本 +- **M (Main)**: 主进程构建 - 监听并重新构建Electron主进程 - ```bash - pnpm run package:linux # Linux - ``` +#### 端口自动检测 + +- 默认尝试端口:3000 +- 如果被占用,自动尝试:3001, 3002, ... +- 实际端口会在终端输出中显示 + +#### 调试信息 + +启动成功时会看到以下关键日志: + +```text +[R] VITE ready in XXXms +[R] ➜ Local: http://localhost:XXXX/ +[P] main preload built successfully +[P] welcome preload built successfully +[M] Configuration file not found, showing welcome window +[M] First time startup, showing welcome window +``` + +#### 常见问题处理 + +1. **端口冲突**: 系统会自动选择可用端口 +2. **DevTools警告**: Chrome自动填充相关警告可忽略 +3. **首次启动**: 删除 `{userData}/Config/desktop-config.json` 可重置为首次启动状态 ### 添加新配置项 @@ -435,68 +535,49 @@ function registerCustomListeners(): void { } ``` -## 测试指南 +## 总结 -### 单元测试 +### 当前系统状态 -```typescript -// tests/config.test.ts -import { ConfigManager, DEFAULT_CONFIG } from '../electron/main/common/config'; +openEuler Intelligence 桌面配置管理系统已经具备了完整的核心功能架构: -describe('ConfigManager', () => { - let configManager: ConfigManager; +**✅ 已实现的核心功能:** - beforeEach(() => { - configManager = ConfigManager.getInstance(); - }); +- **健壮的配置管理**: 完整的 CRUD 操作、备份恢复、配置验证 +- **智能首次启动**: 自动检测配置文件,无配置时显示欢迎界面 +- **模块化预加载架构**: 三层设计(主程序、欢迎界面、共享模块) +- **清晰的API职责分离**: 避免功能重复,提供专用接口 +- **快速服务器验证**: 1.5秒超时机制,提供即时用户反馈 +- **完善的开发环境**: 热重载、并行构建、自动监听 - test('should create default config when not exists', () => { - const config = configManager.readConfig(); - expect(config).toEqual(DEFAULT_CONFIG); - }); +**🚧 需要进一步开发的功能:** - test('should update config partially', () => { - const updates = { base_url: 'https://test.com' }; - const result = configManager.updateConfig(updates); - expect(result.base_url).toBe('https://test.com'); - }); -}); -``` +- **欢迎界面UI**: 从基础 HTML 升级为完整的配置界面 +- **国际化支持**: 多语言界面和错误信息 +- **高级配置选项**: 主题、代理、安全设置等 -### 集成测试 +### 开发验证结果 -```typescript -// tests/integration/welcome-flow.test.ts -import { app } from 'electron'; - -describe('Welcome Flow Integration', () => { - test('should show welcome window on first launch', async () => { - // 清除配置文件 - await clearConfigFile(); - - // 启动应用 - await app.whenReady(); - - // 验证欢迎窗口显示 - expect(getWelcomeWindow()).toBeDefined(); - }); -}); -``` +通过运行 `pnpm run dev:desktop` 验证: + +- ✅ **构建系统**: Vite + TypeScript + Electron 协同工作正常 +- ✅ **首次启动逻辑**: 正确检测配置文件缺失并显示欢迎窗口 +- ✅ **预加载脚本**: 主程序和欢迎界面预加载都成功编译 +- ✅ **IPC通信**: 进程间通信正常,API调用响应良好 +- ✅ **监听重载**: 文件变更时自动重新构建 + +### 技术特性总结 -### 手动测试场景 +- **类型安全**: 基于 TypeScript 的完整类型定义和编译时检查 +- **容错能力**: 完备的错误处理、配置验证和自动恢复机制 +- **开发效率**: 热重载、并行构建、实时监听提升开发体验 +- **架构清晰**: 单例模式、职责分离、模块化设计 +- **性能优化**: 快速响应时间、异步操作、资源管理 -1. **首次启动测试** - - 删除配置文件 - - 启动应用 - - 验证欢迎界面显示 - - 配置并完成欢迎流程 - - 验证配置文件创建 +该系统为 openEuler Intelligence 桌面应用提供了稳定可靠的配置管理基础,代码架构成熟,具备良好的可扩展性和维护性。 -2. **配置恢复测试** - - 损坏配置文件 - - 启动应用 - - 验证从备份恢复或使用默认配置 +--- -3. **IPC 通信测试** - - 通过开发者工具测试各种 IPC 调用 - - 验证错误处理和返回值 +*文档最后更新: 2025年6月6日* +*版本: 0.9.6* +*开发环境验证: ✅ 通过*