稳定可用版本

This commit is contained in:
张家训
2026-06-19 15:21:05 +08:00
parent 15157acd4e
commit 4c844159f3
26 changed files with 4050 additions and 252 deletions
@@ -0,0 +1,228 @@
---
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),背景浅灰,增加可读性。