--- name: 系统设置重构-直接打开配置文件 overview: 重构系统设置窗口,去掉繁琐的表单填写,改为每个 Tab 直接打开 data 目录下对应配置文件,用系统默认编辑器快速配置,每个 Tab 只管理自己栏目的配置。 design: styleKeywords: - Clean - Minimalist fontSystem: fontFamily: Microsoft YaHei heading: size: 16px weight: 700 subheading: size: 14px weight: 600 body: size: 13px weight: 400 colorSystem: primary: - "#4CAF50" background: - "#F5F5F5" - "#FFFFFF" text: - "#333333" - "#666666" functional: - "#FF9800" - "#F44336" todos: - id: refactor-external-config content: 移除 ExternalConfigManager 中 MyBatis 相关配置节,只保留系统路径、数据文件路径和字体大小 status: completed - id: refactor-path-tab content: 重构系统路径 Tab,移除表单,改为显示 workutils.config 路径 + 打开按钮 + 重新加载按钮 status: completed dependencies: - refactor-external-config - id: refactor-mybatis-tab content: 重构 MyBatis 数据库 Tab,移除表单,改为显示 mybatis-generator.properties 路径 + 打开按钮 + 重新加载按钮 status: completed dependencies: - refactor-external-config - id: refactor-project-tab content: 重构项目路径 Tab,移除 TextArea,改为显示 project_paths.txt 路径 + 打开按钮,保留批量替换工具 status: completed - id: add-datasource-tab content: 新增多数据源 Tab,显示 datasources.json 路径 + 打开按钮 + 重新加载按钮 status: completed - id: refactor-damaged-cache-tab content: 重构损坏缓存 Tab,移除 TextArea,改为显示 damaged_repos.cache 路径 + 打开按钮 + 清理缓存按钮 status: completed - id: add-open-file-util content: 新增 openFileInEditor 工具方法,支持 Desktop.edit 和 notepad fallback status: completed - id: compile-test content: 编译验证并测试所有 Tab 功能 status: completed dependencies: - refactor-path-tab - refactor-mybatis-tab - refactor-project-tab - add-datasource-tab - refactor-damaged-cache-tab - add-open-file-util --- ## 产品概述 重构系统设置窗口,去掉繁琐的 JavaFX 表单填写体验,改为每个 Tab 直接打开 data 目录下对应的配置文件,用系统默认编辑器(记事本/IDE)快速配置。每个 Tab 只管理自己栏目的配置,各配置文件独立管理。 ## 核心功能 - **系统路径 Tab**:显示 `data/workutils.config` 文件路径,提供「用记事本打开」按钮直接编辑系统路径和字体设置 - **MyBatis 数据库 Tab**:显示 `data/mybatis-generator.properties` 文件路径,提供「用记事本打开」按钮直接编辑数据库连接和包路径配置 - **项目路径 Tab**:显示 `data/project_paths.txt` 文件路径,提供「用记事本打开」按钮直接编辑项目路径列表 - **多数据源 Tab**:显示 `data/datasources.json` 文件路径,提供「用记事本打开」按钮直接编辑多数据源配置 - **损坏缓存 Tab**:显示 `data/damaged_repos.cache` 文件路径,标记为只读,提供「用记事本打开」按钮查看,保留「清理缓存」按钮 - **重新加载**:每个 Tab 提供「重新加载」按钮,让程序重新读取文件使配置生效 - **ExternalConfigManager 精简**:移除 `SECTIONS` 中的 MyBatis 相关配置节,只保留系统路径、数据文件路径和字体大小 ## 技术栈 - JavaFX(原有技术栈,保持一致的 UI 风格) - Desktop.getDesktop().edit() 打开配置文件(Windows 下用默认编辑器打开) ## 实施方案 ### 架构设计 重构后的设置窗口每个 Tab 统一结构: ``` ┌─────────────────────────────────────────────────────────┐ │ Tab 标题(如:系统路径) │ │ │ │ 配置文件: C:\xxx\data\workutils.config │ │ │ │ [用记事本打开] [重新加载] │ │ │ │ 说明文字:编辑后点击「重新加载」生效,无需重启。 │ └─────────────────────────────────────────────────────────┘ ``` ### 关键修改点 #### 1. SettingsWindow.java — 重构各 Tab **createPathTab()**(系统路径 Tab): - 移除所有 GridPane 表单行(tfBaseDir、tfExportDir 等 TextField) - 显示 `properties.getWorkutilsConfigFilePath()` 绝对路径 - 保留「用记事本打开」按钮(调用 `Desktop.getDesktop().edit(file)`) - 保留「重新加载」按钮(调用 `properties.mergeExternal(configManager.load())`) - 保留字体大小设置说明(字体设置仍在 workutils.config 中) **createMyBatisTab()**(MyBatis 数据库 Tab): - 完全移除 GridPane 表单(tfDbDriver、tfDbUrl 等) - 显示 `properties.getMybatisGeneratorFilePath()` 绝对路径 - 「用记事本打开」按钮打开 `data/mybatis-generator.properties` - 「重新加载」按钮调用已有逻辑重新加载 MyBatis 配置 - 移除「从内置配置加载」按钮(用户直接编辑文件即可) **createProjectTab()**(项目路径 Tab): - 移除 TextArea + 加载/保存按钮的复杂结构 - 显示 `properties.getProjectPathsFilePath()` 绝对路径 - 「用记事本打开」按钮打开 `data/project_paths.txt` - 保留「重新加载」按钮刷新项目路径列表 - **保留批量替换工具**(这是用户之前明确需求的功能,在 memory ID 70362697 中有记录) **createDatasourceTab()**(新增 Tab — 多数据源): - 显示 `properties.getDatasourcesFilePath()` 绝对路径 - 「用记事本打开」按钮打开 `data/datasources.json` - 「重新加载」按钮调用 `datasourceConfigManager.reload()` **createDamagedCacheTab()**(损坏缓存 Tab,替代原项目管理 Tab 中的子 Tab): - 显示 `properties.getDamagedReposFilePath()` 绝对路径 - 标记为只读(加提示文字) - 「用记事本打开」按钮打开 `data/damaged_repos.cache` - 保留「清理缓存」按钮 **createDisplayTab()**(显示设置 Tab): - 字体设置仍在 `workutils.config` 中,所以此 Tab 内容与系统路径 Tab 操作的是同一个文件 - 可以简化为一个提示:「字体设置请在 workutils.config 中修改 font.size.* 属性」+ 「重新加载」按钮 - 或者保留现有的滑块预览(用户可能喜欢实时预览字体效果),但保存时改为提示用户去文件编辑 **建议**:显示设置 Tab 保留现有滑块预览功能(用户体验好),但「保存」按钮改为提示用户手动编辑 workutils.config,或仍通过 `ExternalConfigManager.saveSectioned()` 保存字体设置(因为字体设置是系统级的,适合集中管理)。 #### 2. ExternalConfigManager.java — 移除 MyBatis 配置节 修改 `SECTIONS` 静态初始化块,移除: - `"===== MyBatis 数据库连接(覆盖内置 mybatis-generator.properties)====="` - `"===== MyBatis 代码生成包路径 ====="` 只保留: - `"===== 系统路径 ====="` - `"===== 数据文件路径 ====="` - `"===== 字体大小(显示设置) ====="` 同步移除对应的 KEY 常量(或修改注释说明这些 KEY 仅用于 workutils.config)。 #### 3. 打开文件工具方法 在 SettingsWindow 中新增工具方法: ```java private void openFileInEditor(Path file) { try { if (!Files.exists(file)) { Files.createDirectories(file.getParent()); Files.createFile(file); } // Windows: Desktop.edit 用关联程序打开并允许编辑 // 如果 Desktop 不可用,fallback 到 Runtime.exec("notepad") if (Desktop.isDesktopSupported()) { Desktop.getDesktop().edit(file.toFile()); } else { // Windows fallback Runtime.getRuntime().exec(new String[]{"notepad", file.toAbsolutePath().toString()}); } } catch (Exception e) { showAlert(AlertType.ERROR, "打开文件失败: " + e.getMessage()); } } ``` ### 实施注意事项 1. **Desktop.getDesktop().edit()** 在 Windows 上需要文件有关联的编辑器,且文件必须存在 2. **批量替换工具保留**:用户的 memory 中明确提到需要保留项目路径批量替换功能,不能删除 3. **向后兼容**:workutils.config 中如果仍有旧的 MyBatis 配置项,程序应能忽略(不报错) 4. **文件不存在处理**:打开前检查文件是否存在,不存在则创建空文件或从模板复制 ### 目录结构变更 ``` src/main/java/com/example/workutils/system/config/ ├── SettingsWindow.java [MODIFY] 重构所有 Tab 内容 ├── ExternalConfigManager.java [MODIFY] 移除 MyBatis 配置节 ├── WorkUtilsProperties.java [NO CHANGE] 无需修改 ├── DatasourceConfigManager.java [NO CHANGE] 无需修改 └── ConfigInitializer.java [NO CHANGE] 无需修改 ``` 无需新增文件,只需修改现有两个文件。 ## 设计风格 保持现有 JavaFX 窗口的简洁风格,每个 Tab 内容统一为: - 顶部:标题(加粗,字号稍大) - 中部:配置文件路径(等宽字体,可选择性可复制) - 按钮区:[]用记事本打开] []重新加载](对齐,间距合理) - 底部:说明文字(灰色,小字号) ## 布局说明 每个 Tab 使用 VBox 垂直布局,内容居中偏左对齐,整体留白适中(Insets 12px)。 按钮使用 HBox 水平排列,间距 10px。 路径 Label 使用等宽字体(Consolas),背景浅灰,增加可读性。