From c3438c6a99e5e1583f7b6b940e53ecf96d4471c9 Mon Sep 17 00:00:00 2001 From: hsc Date: Tue, 4 Nov 2025 10:27:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BaseFrame.sln | 55 +++++ BaseFrame/App.xaml | 30 +++ BaseFrame/App.xaml.cs | 43 ++++ BaseFrame/AssemblyInfo.cs | 10 + BaseFrame/BaseFrame.csproj | 64 +++++ BaseFrame/Resources/Images/error.png | Bin 0 -> 7146 bytes BaseFrame/Resources/Images/info.png | Bin 0 -> 5521 bytes BaseFrame/Resources/Images/warning.png | Bin 0 -> 5216 bytes BaseFrame/Resources/Styles/WindowStyle.xaml | 20 ++ .../ViewModels/Dialogs/MessageBoxViewModel.cs | 122 ++++++++++ BaseFrame/ViewModels/MainViewModel.cs | 84 +++++++ BaseFrame/ViewModels/ShellViewModel.cs | 66 +++++ BaseFrame/Views/Dialogs/MessageBoxView.xaml | 85 +++++++ .../Views/Dialogs/MessageBoxView.xaml.cs | 28 +++ BaseFrame/Views/MainView.xaml | 15 ++ BaseFrame/Views/MainView.xaml.cs | 30 +++ BaseFrame/Views/ProgressView.xaml | 23 ++ BaseFrame/Views/ProgressView.xaml.cs | 27 +++ BaseFrame/Views/ShellView.xaml | 227 ++++++++++++++++++ BaseFrame/Views/ShellView.xaml.cs | 47 ++++ Common/Common.csproj | 14 ++ .../BooleanToVisibilityConverter.cs | 36 +++ Common/PubEvent/OverlayEvent.cs | 12 + Common/PubEvent/WaitingEvent.cs | 12 + Logger/Logger.csproj | 19 ++ Logger/LoggerHelper.cs | 42 ++++ Logger/Nlog.config | 37 +++ Model/Model.csproj | 9 + ORM/DatabaseConfig.cs | 97 ++++++++ ORM/ORM.csproj | 18 ++ Service/Service.csproj | 19 ++ 31 files changed, 1291 insertions(+) create mode 100644 BaseFrame.sln create mode 100644 BaseFrame/App.xaml create mode 100644 BaseFrame/App.xaml.cs create mode 100644 BaseFrame/AssemblyInfo.cs create mode 100644 BaseFrame/BaseFrame.csproj create mode 100644 BaseFrame/Resources/Images/error.png create mode 100644 BaseFrame/Resources/Images/info.png create mode 100644 BaseFrame/Resources/Images/warning.png create mode 100644 BaseFrame/Resources/Styles/WindowStyle.xaml create mode 100644 BaseFrame/ViewModels/Dialogs/MessageBoxViewModel.cs create mode 100644 BaseFrame/ViewModels/MainViewModel.cs create mode 100644 BaseFrame/ViewModels/ShellViewModel.cs create mode 100644 BaseFrame/Views/Dialogs/MessageBoxView.xaml create mode 100644 BaseFrame/Views/Dialogs/MessageBoxView.xaml.cs create mode 100644 BaseFrame/Views/MainView.xaml create mode 100644 BaseFrame/Views/MainView.xaml.cs create mode 100644 BaseFrame/Views/ProgressView.xaml create mode 100644 BaseFrame/Views/ProgressView.xaml.cs create mode 100644 BaseFrame/Views/ShellView.xaml create mode 100644 BaseFrame/Views/ShellView.xaml.cs create mode 100644 Common/Common.csproj create mode 100644 Common/Converters/BooleanToVisibilityConverter.cs create mode 100644 Common/PubEvent/OverlayEvent.cs create mode 100644 Common/PubEvent/WaitingEvent.cs create mode 100644 Logger/Logger.csproj create mode 100644 Logger/LoggerHelper.cs create mode 100644 Logger/Nlog.config create mode 100644 Model/Model.csproj create mode 100644 ORM/DatabaseConfig.cs create mode 100644 ORM/ORM.csproj create mode 100644 Service/Service.csproj diff --git a/BaseFrame.sln b/BaseFrame.sln new file mode 100644 index 0000000..e46fe6b --- /dev/null +++ b/BaseFrame.sln @@ -0,0 +1,55 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36221.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BaseFrame", "BaseFrame\BaseFrame.csproj", "{FC10E4D4-0AA3-487B-B023-F8D2949E45ED}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Model\Model.csproj", "{6D9764D9-B4DA-43E2-A9D7-40A6C871A6B3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Logger", "Logger\Logger.csproj", "{9150C6A9-AE8D-42C9-8B2D-9DD04A3E7E74}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ORM", "ORM\ORM.csproj", "{4DE5DC6C-7121-4EB9-B8A8-90C694F451E2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Service", "Service\Service.csproj", "{D8209B91-D7D0-444B-B569-D3FA74D191DD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "Common\Common.csproj", "{6C684FE1-C773-4B9D-89F1-9266C7B32DC0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FC10E4D4-0AA3-487B-B023-F8D2949E45ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC10E4D4-0AA3-487B-B023-F8D2949E45ED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC10E4D4-0AA3-487B-B023-F8D2949E45ED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC10E4D4-0AA3-487B-B023-F8D2949E45ED}.Release|Any CPU.Build.0 = Release|Any CPU + {6D9764D9-B4DA-43E2-A9D7-40A6C871A6B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D9764D9-B4DA-43E2-A9D7-40A6C871A6B3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D9764D9-B4DA-43E2-A9D7-40A6C871A6B3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D9764D9-B4DA-43E2-A9D7-40A6C871A6B3}.Release|Any CPU.Build.0 = Release|Any CPU + {9150C6A9-AE8D-42C9-8B2D-9DD04A3E7E74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9150C6A9-AE8D-42C9-8B2D-9DD04A3E7E74}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9150C6A9-AE8D-42C9-8B2D-9DD04A3E7E74}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9150C6A9-AE8D-42C9-8B2D-9DD04A3E7E74}.Release|Any CPU.Build.0 = Release|Any CPU + {4DE5DC6C-7121-4EB9-B8A8-90C694F451E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4DE5DC6C-7121-4EB9-B8A8-90C694F451E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4DE5DC6C-7121-4EB9-B8A8-90C694F451E2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4DE5DC6C-7121-4EB9-B8A8-90C694F451E2}.Release|Any CPU.Build.0 = Release|Any CPU + {D8209B91-D7D0-444B-B569-D3FA74D191DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8209B91-D7D0-444B-B569-D3FA74D191DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8209B91-D7D0-444B-B569-D3FA74D191DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8209B91-D7D0-444B-B569-D3FA74D191DD}.Release|Any CPU.Build.0 = Release|Any CPU + {6C684FE1-C773-4B9D-89F1-9266C7B32DC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C684FE1-C773-4B9D-89F1-9266C7B32DC0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C684FE1-C773-4B9D-89F1-9266C7B32DC0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C684FE1-C773-4B9D-89F1-9266C7B32DC0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {22BD9235-6581-454D-97D8-F4E932F80888} + EndGlobalSection +EndGlobal diff --git a/BaseFrame/App.xaml b/BaseFrame/App.xaml new file mode 100644 index 0000000..363f5af --- /dev/null +++ b/BaseFrame/App.xaml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BaseFrame/App.xaml.cs b/BaseFrame/App.xaml.cs new file mode 100644 index 0000000..c3e560c --- /dev/null +++ b/BaseFrame/App.xaml.cs @@ -0,0 +1,43 @@ +using BaseFrame.ViewModels; +using BaseFrame.ViewModels.Dialogs; +using BaseFrame.Views; +using BaseFrame.Views.Dialogs; +using Castle.DynamicProxy; +using System.Configuration; +using System.Data; +using System.Reflection; +using System.Windows; +using static System.Runtime.InteropServices.JavaScript.JSType; + +namespace BaseFrame +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : PrismApplication + { + protected override Window CreateShell() + { + return Container.Resolve(); + } + protected override void OnInitialized() + { + base.OnInitialized(); + + var regionManager = Container.Resolve(); + regionManager.RequestNavigate("ShellViewManager", "MainView"); + } + protected override void RegisterTypes(IContainerRegistry containerRegistry) + { + //注册视图 + containerRegistry.RegisterForNavigation("MainView"); + //注册弹窗 + containerRegistry.RegisterDialog("MessageBox"); + + + } + + + } + +} diff --git a/BaseFrame/AssemblyInfo.cs b/BaseFrame/AssemblyInfo.cs new file mode 100644 index 0000000..b0ec827 --- /dev/null +++ b/BaseFrame/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/BaseFrame/BaseFrame.csproj b/BaseFrame/BaseFrame.csproj new file mode 100644 index 0000000..9be13d0 --- /dev/null +++ b/BaseFrame/BaseFrame.csproj @@ -0,0 +1,64 @@ + + + + WinExe + net8.0-windows + enable + enable + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/BaseFrame/Resources/Images/error.png b/BaseFrame/Resources/Images/error.png new file mode 100644 index 0000000000000000000000000000000000000000..de079d0b7e0670dac8c52f5ace3adf9772b4b381 GIT binary patch literal 7146 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 aR09BF1iD2y*bf%~0000 + + + + diff --git a/BaseFrame/ViewModels/Dialogs/MessageBoxViewModel.cs b/BaseFrame/ViewModels/Dialogs/MessageBoxViewModel.cs new file mode 100644 index 0000000..e2e19a6 --- /dev/null +++ b/BaseFrame/ViewModels/Dialogs/MessageBoxViewModel.cs @@ -0,0 +1,122 @@ +using Common.PubEvent; +using ControlzEx.Standard; +using Prism.Commands; +using Prism.Mvvm; +using System.Windows.Input; + +namespace BaseFrame.ViewModels.Dialogs +{ + public class MessageBoxViewModel : BindableBase, IDialogAware + { + #region 属性 + + private string _Title; + public string Title + { + get => _Title; + set => SetProperty(ref _Title, value); + } + + private string _Message = ""; + public string Message + { + get => _Message; + set => SetProperty(ref _Message, value); + } + + private string _Icon= $"pack://siteoforigin:,,,/Resources/Images/info.png"; + public string Icon + { + get => _Icon; + set => SetProperty(ref _Icon, value); + } + + private bool _ShowYes; + public bool ShowYes + { + get => _ShowYes; + set => SetProperty(ref _ShowYes, value); + } + + private bool _ShowNo; + public bool ShowNo + { + get => _ShowNo; + set => SetProperty(ref _ShowNo, value); + } + + private bool _ShowOk; + public bool ShowOk + { + get => _ShowOk; + set => SetProperty(ref _ShowOk, value); + } + + private bool _ShowCancel; + public bool ShowCancel + { + get => _ShowCancel; + set => SetProperty(ref _ShowCancel, value); + } + + #endregion + + #region 命令 + public ICommand YesCommand { get; set; } + public ICommand NoCommand { get; set; } + public ICommand OkCommand { get; set; } + public ICommand CancelCommand { get; set; } + #endregion + + public DialogCloseListener RequestClose { get; set; } + private IEventAggregator _eventAggregator; + public MessageBoxViewModel(IEventAggregator eventAggregator) + { + _eventAggregator= eventAggregator; + YesCommand = new DelegateCommand(OnYes); + NoCommand = new DelegateCommand(OnNo); + OkCommand = new DelegateCommand(OnOk); + CancelCommand = new DelegateCommand(OnCancel); + } + + private void CloseDialog(ButtonResult result) + { + var parameters = new DialogParameters(); + RequestClose.Invoke(new DialogResult(result)); + } + + private void OnYes() => CloseDialog(ButtonResult.Yes); + private void OnNo() => CloseDialog(ButtonResult.No); + private void OnOk() => CloseDialog(ButtonResult.OK); + private void OnCancel() => CloseDialog(ButtonResult.Cancel); + + #region Prism Dialog 规范 + public bool CanCloseDialog() => true; + + public void OnDialogClosed() + { + _eventAggregator.GetEvent().Publish(false); + } + + public void OnDialogOpened(IDialogParameters parameters) + { + Title = parameters.GetValue("Title"); + Message = parameters.GetValue("Message"); + var iconKey = parameters.GetValue("Icon"); // info / error / warn + Icon = iconKey switch + { + "info" => $"pack://siteoforigin:,,,/Resources/Images/info.png", + "error" => $"pack://siteoforigin:,,,/Resources/Images/error.png", + "warn" => $"pack://siteoforigin:,,,/Resources/Images/warning.png", + _ => $"pack://siteoforigin:,,,/Resources/Images/info.png" // 默认 + }; + + + ShowYes = parameters.GetValue("ShowYes"); + ShowNo = parameters.GetValue("ShowNo"); + ShowOk = parameters.GetValue("ShowOk"); + ShowCancel = parameters.GetValue("ShowCancel"); + } + #endregion + } +} diff --git a/BaseFrame/ViewModels/MainViewModel.cs b/BaseFrame/ViewModels/MainViewModel.cs new file mode 100644 index 0000000..f75c58c --- /dev/null +++ b/BaseFrame/ViewModels/MainViewModel.cs @@ -0,0 +1,84 @@ +using Common.PubEvent; +using Common.PubEvents; +using NLog; +using Prism.Dialogs; +using Prism.Events; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Windows.Input; + +namespace BaseFrame.ViewModels +{ + public class MainViewModel : BindableBase,INavigationAware,IDialogAware + { + #region 属性 + + + #endregion + #region 命令 + public ICommand testcommand { get; set; } + + + #endregion + public DialogCloseListener RequestClose { get; set; } + private IEventAggregator _eventAggregator; + private IDialogService _dialogService; + public MainViewModel(IEventAggregator eventAggregator, IDialogService dialogService) + { + _dialogService = dialogService; + _eventAggregator = eventAggregator; + testcommand = new DelegateCommand(test); + + } + private void test() + { + //_eventAggregator.GetEvent().Publish(true); + //var parameters = new DialogParameters + //{ + // { "Title", "提示" }, + // { "Message", "操作成功!" }, + // { "Icon", "info" }, + // { "ShowOk", true } + //}; + //_dialogService.ShowDialog("MessageBox",parameters); + } + + #region 导航 + public void OnNavigatedTo(NavigationContext navigationContext) + { + + } + + public bool IsNavigationTarget(NavigationContext navigationContext) + { + return true; + } + + public void OnNavigatedFrom(NavigationContext navigationContext) + { + + } + #endregion + + #region 弹窗 + public bool CanCloseDialog() + { + return true; + } + + public void OnDialogClosed() + { + + } + + public void OnDialogOpened(IDialogParameters parameters) + { + + } + #endregion + } +} diff --git a/BaseFrame/ViewModels/ShellViewModel.cs b/BaseFrame/ViewModels/ShellViewModel.cs new file mode 100644 index 0000000..1a908bd --- /dev/null +++ b/BaseFrame/ViewModels/ShellViewModel.cs @@ -0,0 +1,66 @@ +using BaseFrame.Views; +using Common.PubEvents; +using MaterialDesignThemes.Wpf; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Input; + +namespace BaseFrame.ViewModels +{ + public class ShellViewModel : BindableBase + { + #region 属性 + private bool _IsLeftDrawerOpen; + + public bool IsLeftDrawerOpen + { + get => _IsLeftDrawerOpen; + set => SetProperty(ref _IsLeftDrawerOpen, value); + } + + #endregion + #region 命令 + public ICommand LeftDrawerOpenCommand { get; set; } + public ICommand MinimizeCommand { get; set; } + public ICommand MaximizeCommand { get; set; } + public ICommand CloseCommand { get; set; } + #endregion + + private IEventAggregator _eventAggregator; + public ShellViewModel(IEventAggregator eventAggregator, IContainerProvider containerProvider) + { + _eventAggregator= eventAggregator; + LeftDrawerOpenCommand = new DelegateCommand(LeftDrawerOpen); + MinimizeCommand = new DelegateCommand(MinimizeWindow); + MaximizeCommand = new DelegateCommand(MaximizeWindow); + CloseCommand = new DelegateCommand(CloseWindow); + } + + private void LeftDrawerOpen() + { + IsLeftDrawerOpen = true; + } + private void MinimizeWindow(Window window) + { + if (window != null) + window.WindowState = WindowState.Minimized; + } + + private void MaximizeWindow(Window window) + { + if (window != null) + { + window.WindowState = window.WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized; + } + } + + private void CloseWindow(Window window) + { + window?.Close(); + } + } +} diff --git a/BaseFrame/Views/Dialogs/MessageBoxView.xaml b/BaseFrame/Views/Dialogs/MessageBoxView.xaml new file mode 100644 index 0000000..cc88cad --- /dev/null +++ b/BaseFrame/Views/Dialogs/MessageBoxView.xaml @@ -0,0 +1,85 @@ + + +