Phase 2-3: UI layout, theme switching, CRUD tools, process execution
- Phase 2: MainWindow 3-section layout (sidebar/content/log bar), Dark/Light theme with ThemeHelper, MainViewModel with ObservableProperty/RelayCommand, tool card filtering by search + category - Phase 3: ToolEditWindow for add/edit tools, ProcessExecutionService (Process.Start + error handling), double-click + right-click context menu (run/edit), path browse dialog - Bugfix: ContextMenu commands now use PlacementTarget.Tag binding (ContextMenu in separate visual tree) - Bugfix: StaticResource converters moved to XAML before DataTemplate to fix XamlParseException on tool card render - Bugfix: Pure filenames (no path separators) treated as PATH commands, not marked invalid - Bugfix: RefreshData preserves SelectedCategory; Load() catches all exceptions; Save() wrapped in try-catch; auto-scroll log to newest entry - Tests: xUnit project with 55 tests covering models, services, converters, and view models
This commit is contained in:
@@ -65,11 +65,22 @@ public class JsonDataService : IDataService
|
||||
continue;
|
||||
}
|
||||
|
||||
// 纯文件名(无路径分隔符)可能位于系统 PATH 中,不标记为失效
|
||||
if (!tool.ExecutablePath.Contains('\\') && !tool.ExecutablePath.Contains('/'))
|
||||
{
|
||||
tool.IsValid = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!File.Exists(tool.ExecutablePath))
|
||||
{
|
||||
tool.IsValid = false;
|
||||
_logService.Warning($"工具 \"{tool.Name}\" 路径失效,找不到文件: {tool.ExecutablePath}");
|
||||
}
|
||||
else
|
||||
{
|
||||
tool.IsValid = true;
|
||||
}
|
||||
}
|
||||
|
||||
_logService.Info($"配置加载完成: {Config.Categories.Count} 个分类, {Config.Tools.Count} 个工具");
|
||||
@@ -79,6 +90,11 @@ public class JsonDataService : IDataService
|
||||
_logService.Error($"配置文件 JSON 解析失败: {ex.Message}");
|
||||
Config = new AppConfig();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logService.Error($"配置文件加载失败: {ex.Message}");
|
||||
Config = new AppConfig();
|
||||
}
|
||||
}
|
||||
|
||||
public void Save()
|
||||
|
||||
Reference in New Issue
Block a user