Files
homeutils/.codebuddy/plans/系统设置重构-直接打开配置文件_16998c56.md
T
2026-06-19 15:21:05 +08:00

228 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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),背景浅灰,增加可读性。