From a76546ebe6c7b4d5d3efaad9c17f68e272228527 Mon Sep 17 00:00:00 2001 From: Tyrone CT Date: Sun, 28 Jul 2024 22:59:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=86=E4=BB=AA=E8=A1=A8?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CapMachine.Model/ActionLog.cs | 47 + .../MeterConfig/MeterCond1Temp.cs | 70 ++ .../MeterConfig/MeterCond2Temp.cs | 70 ++ .../MeterConfig/MeterCondPress.cs | 70 ++ .../MeterConfig/MeterEVAPExpTemp.cs | 70 ++ CapMachine.Model/MeterConfig/MeterExPress.cs | 71 ++ CapMachine.Model/MeterConfig/MeterHVVol.cs | 70 ++ CapMachine.Model/MeterConfig/MeterInhPress.cs | 65 + CapMachine.Model/MeterConfig/MeterInhTemp.cs | 66 + CapMachine.Model/MeterConfig/MeterLVVol.cs | 70 ++ CapMachine.Model/MeterConfig/MeterLoPress.cs | 71 ++ CapMachine.Model/MeterConfig/MeterOCR.cs | 70 ++ CapMachine.Model/MeterConfig/MeterOS1Temp.cs | 70 ++ CapMachine.Model/MeterConfig/MeterOS2Temp.cs | 70 ++ .../MeterConfig/MeterPTCEntTemp.cs | 70 ++ CapMachine.Model/MeterConfig/MeterPTCFlow.cs | 70 ++ CapMachine.Model/MeterConfig/MeterPTCPw.cs | 70 ++ CapMachine.Model/{ => MeterConfig}/MeterPd.cs | 0 CapMachine.Model/{ => MeterConfig}/MeterPs.cs | 0 .../{ => MeterConfig}/MeterSpeed.cs | 0 .../MeterConfig/MeterTestBoxRH.cs | 70 ++ .../MeterConfig/MeterTestBoxTemp.cs | 70 ++ CapMachine.Model/ProStep.cs | 23 +- CapMachine.Model/ProgramSeg.cs | 9 +- CapMachine.Shared/Controls/Meter.xaml.cs | 6 +- CapMachine.Wpf/App.xaml.cs | 22 +- CapMachine.Wpf/Assets/Images/favicon.ico | Bin 0 -> 67646 bytes CapMachine.Wpf/CapMachine.Wpf.csproj | 15 +- CapMachine.Wpf/Dtos/ActionLogDto.cs | 35 + .../MapperProfile/ActionLogProfile.cs | 20 + CapMachine.Wpf/Models/ComboBoxModel.cs | 33 + .../PrismEvent/ProStepDrawerEvent.cs | 14 + CapMachine.Wpf/Services/ConfigService.cs | 20 + CapMachine.Wpf/Services/ILogService.cs | 20 + CapMachine.Wpf/Services/LogService.cs | 83 ++ .../Services/NavigationMenuService.cs | 36 +- CapMachine.Wpf/Services/SysService.cs | 49 + .../ViewModels/ActionLogViewModel.cs | 387 ++++++ CapMachine.Wpf/ViewModels/FooterViewModel.cs | 17 + CapMachine.Wpf/ViewModels/MainViewModel.cs | 8 +- .../ViewModels/ProConfigViewModel.cs | 45 +- .../ViewModels/ProStepConfigMainViewModel.cs | 19 + .../ProStepConfigPsViewModel.cs | 14 + .../ViewModels/UserManageViewModel.cs | 20 + CapMachine.Wpf/Views/ActionLogView.xaml | 153 +++ CapMachine.Wpf/Views/ActionLogView.xaml.cs | 28 + CapMachine.Wpf/Views/FooterView.xaml | 86 ++ CapMachine.Wpf/Views/FooterView.xaml.cs | 28 + CapMachine.Wpf/Views/MainView.xaml | 87 +- CapMachine.Wpf/Views/MonitorView.xaml | 2 +- CapMachine.Wpf/Views/ProConfigView.xaml | 1077 ++++++++++------- CapMachine.Wpf/Views/ProConfigView.xaml.cs | 50 +- .../Views/ProStepConfigMainView.xaml | 22 + .../Views/ProStepConfigMainView.xaml.cs | 28 + .../ProStepConfigPsView.xaml | 18 + .../ProStepConfigPsView.xaml.cs | 28 + CapMachine.Wpf/Views/RealTimeChartView.xaml | 15 +- CapMachine.Wpf/Views/UserManageView.xaml | 14 + CapMachine.Wpf/Views/UserManageView.xaml.cs | 28 + 59 files changed, 3273 insertions(+), 586 deletions(-) create mode 100644 CapMachine.Model/ActionLog.cs create mode 100644 CapMachine.Model/MeterConfig/MeterCond1Temp.cs create mode 100644 CapMachine.Model/MeterConfig/MeterCond2Temp.cs create mode 100644 CapMachine.Model/MeterConfig/MeterCondPress.cs create mode 100644 CapMachine.Model/MeterConfig/MeterEVAPExpTemp.cs create mode 100644 CapMachine.Model/MeterConfig/MeterExPress.cs create mode 100644 CapMachine.Model/MeterConfig/MeterHVVol.cs create mode 100644 CapMachine.Model/MeterConfig/MeterInhPress.cs create mode 100644 CapMachine.Model/MeterConfig/MeterInhTemp.cs create mode 100644 CapMachine.Model/MeterConfig/MeterLVVol.cs create mode 100644 CapMachine.Model/MeterConfig/MeterLoPress.cs create mode 100644 CapMachine.Model/MeterConfig/MeterOCR.cs create mode 100644 CapMachine.Model/MeterConfig/MeterOS1Temp.cs create mode 100644 CapMachine.Model/MeterConfig/MeterOS2Temp.cs create mode 100644 CapMachine.Model/MeterConfig/MeterPTCEntTemp.cs create mode 100644 CapMachine.Model/MeterConfig/MeterPTCFlow.cs create mode 100644 CapMachine.Model/MeterConfig/MeterPTCPw.cs rename CapMachine.Model/{ => MeterConfig}/MeterPd.cs (100%) rename CapMachine.Model/{ => MeterConfig}/MeterPs.cs (100%) rename CapMachine.Model/{ => MeterConfig}/MeterSpeed.cs (100%) create mode 100644 CapMachine.Model/MeterConfig/MeterTestBoxRH.cs create mode 100644 CapMachine.Model/MeterConfig/MeterTestBoxTemp.cs create mode 100644 CapMachine.Wpf/Assets/Images/favicon.ico create mode 100644 CapMachine.Wpf/Dtos/ActionLogDto.cs create mode 100644 CapMachine.Wpf/MapperProfile/ActionLogProfile.cs create mode 100644 CapMachine.Wpf/Models/ComboBoxModel.cs create mode 100644 CapMachine.Wpf/PrismEvent/ProStepDrawerEvent.cs create mode 100644 CapMachine.Wpf/Services/ConfigService.cs create mode 100644 CapMachine.Wpf/Services/ILogService.cs create mode 100644 CapMachine.Wpf/Services/LogService.cs create mode 100644 CapMachine.Wpf/Services/SysService.cs create mode 100644 CapMachine.Wpf/ViewModels/ActionLogViewModel.cs create mode 100644 CapMachine.Wpf/ViewModels/FooterViewModel.cs create mode 100644 CapMachine.Wpf/ViewModels/ProStepConfigMainViewModel.cs create mode 100644 CapMachine.Wpf/ViewModels/ProStepConfigViewModelGroup/ProStepConfigPsViewModel.cs create mode 100644 CapMachine.Wpf/ViewModels/UserManageViewModel.cs create mode 100644 CapMachine.Wpf/Views/ActionLogView.xaml create mode 100644 CapMachine.Wpf/Views/ActionLogView.xaml.cs create mode 100644 CapMachine.Wpf/Views/FooterView.xaml create mode 100644 CapMachine.Wpf/Views/FooterView.xaml.cs create mode 100644 CapMachine.Wpf/Views/ProStepConfigMainView.xaml create mode 100644 CapMachine.Wpf/Views/ProStepConfigMainView.xaml.cs create mode 100644 CapMachine.Wpf/Views/ProStepConfigViewGroup/ProStepConfigPsView.xaml create mode 100644 CapMachine.Wpf/Views/ProStepConfigViewGroup/ProStepConfigPsView.xaml.cs create mode 100644 CapMachine.Wpf/Views/UserManageView.xaml create mode 100644 CapMachine.Wpf/Views/UserManageView.xaml.cs diff --git a/CapMachine.Model/ActionLog.cs b/CapMachine.Model/ActionLog.cs new file mode 100644 index 0000000..01d96a2 --- /dev/null +++ b/CapMachine.Model/ActionLog.cs @@ -0,0 +1,47 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// ActionLog + /// 动作日志 + /// + [Table(Name = "ActionLog")] + public class ActionLog + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 等级 + /// + [Column(Name = "Level")] + public int Level { get; set; } + + /// + /// 分类 + /// + [Column(Name = "Category", IsNullable = true, StringLength = 30)] + public string? Category { get; set; } + + /// + /// 内容 + /// + [Column(Name = "Content", IsNullable = true, StringLength = 300)] + public string? Content { get; set; } + + /// + /// 创建时间 + /// + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterCond1Temp.cs b/CapMachine.Model/MeterConfig/MeterCond1Temp.cs new file mode 100644 index 0000000..27d1e18 --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterCond1Temp.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// COND1温度 表设置 + /// + [Table(Name = "MeterCond1Temp")] + public class MeterCond1Temp + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterCond2Temp.cs b/CapMachine.Model/MeterConfig/MeterCond2Temp.cs new file mode 100644 index 0000000..869d470 --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterCond2Temp.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// COND2温度 表设置 + /// + [Table(Name = "MeterCond2Temp")] + public class MeterCond2Temp + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterCondPress.cs b/CapMachine.Model/MeterConfig/MeterCondPress.cs new file mode 100644 index 0000000..0248e1f --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterCondPress.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// COND2压力 表设置 + /// + [Table(Name = "MeterCondPress")] + public class MeterCondPress + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterEVAPExpTemp.cs b/CapMachine.Model/MeterConfig/MeterEVAPExpTemp.cs new file mode 100644 index 0000000..46383b0 --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterEVAPExpTemp.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// EVAP出口温度(℃) 表设置 + /// + [Table(Name = "MeterEVAPExpTemp")] + public class MeterEVAPExpTemp + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterExPress.cs b/CapMachine.Model/MeterConfig/MeterExPress.cs new file mode 100644 index 0000000..b278787 --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterExPress.cs @@ -0,0 +1,71 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// 排气压力设置 + /// + [Table(Name = "MeterExPress")] + public class MeterExPress + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + + } +} diff --git a/CapMachine.Model/MeterConfig/MeterHVVol.cs b/CapMachine.Model/MeterConfig/MeterHVVol.cs new file mode 100644 index 0000000..b123d1e --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterHVVol.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// HV电压 表设置 + /// + [Table(Name = "MeterHVVol")] + public class MeterHVVol + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterInhPress.cs b/CapMachine.Model/MeterConfig/MeterInhPress.cs new file mode 100644 index 0000000..8d98cb2 --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterInhPress.cs @@ -0,0 +1,65 @@ +using FreeSql.DataAnnotations; + +namespace CapMachine.Model +{ + /// + /// 吸气压力 表设置 + /// + [Table(Name = "MeterInhPress")] + public class MeterInhPress + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterInhTemp.cs b/CapMachine.Model/MeterConfig/MeterInhTemp.cs new file mode 100644 index 0000000..316a9d3 --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterInhTemp.cs @@ -0,0 +1,66 @@ +using FreeSql.DataAnnotations; + +namespace CapMachine.Model +{ + /// + /// 吸气温度 设置 + /// + [Table(Name = "MeterInhTemp")] + public class MeterInhTemp + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + + } +} diff --git a/CapMachine.Model/MeterConfig/MeterLVVol.cs b/CapMachine.Model/MeterConfig/MeterLVVol.cs new file mode 100644 index 0000000..19eb742 --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterLVVol.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// LV电压 表设置 + /// + [Table(Name = "MeterLVVol")] + public class MeterLVVol + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterLoPress.cs b/CapMachine.Model/MeterConfig/MeterLoPress.cs new file mode 100644 index 0000000..1f7eb3b --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterLoPress.cs @@ -0,0 +1,71 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// 润滑油压力 设置 + /// + [Table(Name = "MeterLoPress")] + public class MeterLoPress + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + + } +} diff --git a/CapMachine.Model/MeterConfig/MeterOCR.cs b/CapMachine.Model/MeterConfig/MeterOCR.cs new file mode 100644 index 0000000..bf44daf --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterOCR.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// OCR 表设置 + /// + [Table(Name = "MeterOCR")] + public class MeterOCR + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterOS1Temp.cs b/CapMachine.Model/MeterConfig/MeterOS1Temp.cs new file mode 100644 index 0000000..b767e9a --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterOS1Temp.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// OS1温度 表设置 + /// + [Table(Name = "MeterOS1Temp")] + public class MeterOS1Temp + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterOS2Temp.cs b/CapMachine.Model/MeterConfig/MeterOS2Temp.cs new file mode 100644 index 0000000..e9f01b7 --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterOS2Temp.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// OS2温度 表设置 + /// + [Table(Name = "MeterOS2Temp")] + public class MeterOS2Temp + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterPTCEntTemp.cs b/CapMachine.Model/MeterConfig/MeterPTCEntTemp.cs new file mode 100644 index 0000000..242e871 --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterPTCEntTemp.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// PTC入口温度(℃) 表设置 + /// + [Table(Name = "MeterPTCEntTemp")] + public class MeterPTCEntTemp + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterPTCFlow.cs b/CapMachine.Model/MeterConfig/MeterPTCFlow.cs new file mode 100644 index 0000000..4f765fc --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterPTCFlow.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// PTC流量 表设置 + /// + [Table(Name = "MeterPTCFlow")] + public class MeterPTCFlow + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterPTCPw.cs b/CapMachine.Model/MeterConfig/MeterPTCPw.cs new file mode 100644 index 0000000..e215c8f --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterPTCPw.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// PTC功率 表设置 + /// + [Table(Name = "MeterPTCPw")] + public class MeterPTCPw + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterPd.cs b/CapMachine.Model/MeterConfig/MeterPd.cs similarity index 100% rename from CapMachine.Model/MeterPd.cs rename to CapMachine.Model/MeterConfig/MeterPd.cs diff --git a/CapMachine.Model/MeterPs.cs b/CapMachine.Model/MeterConfig/MeterPs.cs similarity index 100% rename from CapMachine.Model/MeterPs.cs rename to CapMachine.Model/MeterConfig/MeterPs.cs diff --git a/CapMachine.Model/MeterSpeed.cs b/CapMachine.Model/MeterConfig/MeterSpeed.cs similarity index 100% rename from CapMachine.Model/MeterSpeed.cs rename to CapMachine.Model/MeterConfig/MeterSpeed.cs diff --git a/CapMachine.Model/MeterConfig/MeterTestBoxRH.cs b/CapMachine.Model/MeterConfig/MeterTestBoxRH.cs new file mode 100644 index 0000000..358f04f --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterTestBoxRH.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// 试验箱湿度 表设置 + /// + [Table(Name = "MeterTestBoxRH")] + public class MeterTestBoxRH + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/MeterConfig/MeterTestBoxTemp.cs b/CapMachine.Model/MeterConfig/MeterTestBoxTemp.cs new file mode 100644 index 0000000..4a15bcc --- /dev/null +++ b/CapMachine.Model/MeterConfig/MeterTestBoxTemp.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Model +{ + /// + /// 试验箱温度 表设置 + /// + [Table(Name = "MeterTestBoxTemp")] + public class MeterTestBoxTemp + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 程序步骤序号 + /// + [Column(Name = "StepNo")] + public int StepNo { get; set; } + + /// + /// 开始值 + /// + [Column(Name = "StartValue")] + public double StartValue { get; set; } + + /// + /// 结束值 + /// + [Column(Name = "EndValue")] + public double EndValue { get; set; } + + /// + /// 维持时间 + /// + [Column(Name = "KeepTime")] + public double KeepTime { get; set; } + + /// + /// 配置值类型 + /// + [Column(MapType = typeof(int))] + public ConfigValueType ValueType { get; set; } + + /// + /// 常值 + /// 在ValueType为常值时会使用 + /// + [Column(Name = "Constant")] + public double Constant { get; set; } + + + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] + public DateTime CreateTime { get; set; } + + /// + /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// + /// + + public long ProStepId { get; set; } + public ProStep? ProStep { get; set; } + } +} diff --git a/CapMachine.Model/ProStep.cs b/CapMachine.Model/ProStep.cs index f992cf8..9f67167 100644 --- a/CapMachine.Model/ProStep.cs +++ b/CapMachine.Model/ProStep.cs @@ -53,10 +53,27 @@ namespace CapMachine.Model /// public ICollection? MeterSpeeds { get; set; } - public ICollection? MeterPds { get; set; } - public ICollection? MeterPss { get; set; } - + public ICollection? MeterCond1Temps { get; set; } + public ICollection? MeterCond2Temps { get; set; } + public ICollection? MeterCondPresss { get; set; } + public ICollection? MeterEVAPExpTemps { get; set; } + public ICollection? MeterExPresss { get; set; } + public ICollection? MeterHVVols { get; set; } + public ICollection? MeterInhPresss { get; set; } + public ICollection? MeterInhTemps { get; set; } + public ICollection? MeterLoPresss { get; set; } + public ICollection? MeterLVVols { get; set; } + public ICollection? MeterOCRs { get; set; } + public ICollection? MeterOS1Temps { get; set; } + public ICollection? MeterOS2Temps { get; set; } + public ICollection? MeterPTCEntTemps { get; set; } + public ICollection? MeterPTCFlows { get; set; } + public ICollection? MeterPTCPws { get; set; } + public ICollection? MeterTestBoxRHs { get; set; } + public ICollection? MeterTestBoxTemps { get; set; } + //public ICollection? MeterPds { get; set; } + //public ICollection? MeterPss { get; set; } /// /// ///////////////////////////////////////////导航属性/////////////////////////////////////////////////////// diff --git a/CapMachine.Model/ProgramSeg.cs b/CapMachine.Model/ProgramSeg.cs index ebe4669..8d87e17 100644 --- a/CapMachine.Model/ProgramSeg.cs +++ b/CapMachine.Model/ProgramSeg.cs @@ -4,6 +4,9 @@ using System.Collections.Generic; namespace CapMachine.Model { + /// + /// 程序设置 + /// [Table(Name = "ProgramSeg")] public class ProgramSeg { @@ -18,7 +21,7 @@ namespace CapMachine.Model /// 工况名称 /// [Column(Name = "Name", IsNullable = false, StringLength = 50)] - public string Name { get; set; } + public string? Name { get; set; } /// /// 程序段反复 @@ -30,13 +33,13 @@ namespace CapMachine.Model /// 编辑者 /// [Column(Name = "UserName", IsNullable = false, StringLength = 20)] - public string UserName { get; set; } + public string? UserName { get; set; } /// /// 备注 /// [Column(Name = "Remark", IsNullable = false, StringLength = 100)] - public string Remark { get; set; } + public string? Remark { get; set; } [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] public DateTime CreateTime { get; set; } diff --git a/CapMachine.Shared/Controls/Meter.xaml.cs b/CapMachine.Shared/Controls/Meter.xaml.cs index 992f75e..6ac5ea3 100644 --- a/CapMachine.Shared/Controls/Meter.xaml.cs +++ b/CapMachine.Shared/Controls/Meter.xaml.cs @@ -32,14 +32,14 @@ namespace CapMachine.Shared.Controls { get { - return (string)base.GetValue(MeterConfig.MeterNameProperty); + return (string)base.GetValue(Meter.MeterNameProperty); } set { - base.SetValue(MeterConfig.MeterNameProperty, value); + base.SetValue(Meter.MeterNameProperty, value); } } - public static readonly DependencyProperty MeterNameProperty = DependencyProperty.Register("MeterName", typeof(string), typeof(MeterConfig), new PropertyMetadata("速度")); + public static readonly DependencyProperty MeterNameProperty = DependencyProperty.Register("MeterName", typeof(string), typeof(Meter), new PropertyMetadata("名称")); diff --git a/CapMachine.Wpf/App.xaml.cs b/CapMachine.Wpf/App.xaml.cs index 3bd39ed..d13b483 100644 --- a/CapMachine.Wpf/App.xaml.cs +++ b/CapMachine.Wpf/App.xaml.cs @@ -53,7 +53,9 @@ namespace CapMachine.Wpf protected override void RegisterTypes(IContainerRegistry containerRegistry) { ////注册日志服务 - //containerRegistry.RegisterSingleton(); + containerRegistry.RegisterSingleton(); + containerRegistry.RegisterSingleton(); + containerRegistry.RegisterSingleton(); ////注册设备服务 //containerRegistry.RegisterSingleton(); @@ -79,9 +81,12 @@ namespace CapMachine.Wpf containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); - //containerRegistry.RegisterForNavigation(); - //containerRegistry.RegisterForNavigation(); - + containerRegistry.RegisterForNavigation(); + containerRegistry.RegisterForNavigation(); + containerRegistry.RegisterForNavigation(); + containerRegistry.RegisterForNavigation(); + containerRegistry.RegisterForNavigation(); + //注册Dialog视图时绑定VM containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); @@ -120,6 +125,7 @@ namespace CapMachine.Wpf //从容器中获取MainView的实例对象 var container = ContainerLocator.Container; var shell = container.Resolve("MainView"); + if (shell is Window view) { //更新Prism注册区域信息 @@ -127,6 +133,10 @@ namespace CapMachine.Wpf RegionManager.SetRegionManager(view, regionManager); RegionManager.UpdateRegions(); + //给MainView的MainViewFooterContentRegion区域设置FooterView具体的信息 + regionManager.RequestNavigate("MainViewFooterContentRegion", nameof(FooterView)); + + //调用首页的INavigationAware 接口做一个初始化操作 if (view.DataContext is INavigationAware navigationAware) { @@ -134,6 +144,7 @@ namespace CapMachine.Wpf //呈现首页 App.Current.MainWindow = view; } + } //先加载服务,防止在ViewModel中使用时速度慢 @@ -141,8 +152,11 @@ namespace CapMachine.Wpf //var appVersionService1 = ContainerLocator.Container.Resolve(); //var appVersionService2 = ContainerLocator.Container.Resolve(); var appVersionService3 = ContainerLocator.Container.Resolve(); + var appVersionService4 = ContainerLocator.Container.Resolve(); base.OnInitialized(); + + } } diff --git a/CapMachine.Wpf/Assets/Images/favicon.ico b/CapMachine.Wpf/Assets/Images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f8e93e24bad880ccaa3fc758814a90398acffef9 GIT binary patch literal 67646 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

40Cr=Wl5YxoB1K%Dmm_W7xSZn1B$1N}FT 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 + @@ -28,15 +29,15 @@ + + + - - - @@ -56,5 +57,13 @@ C:\Program Files (x86)\Arction\LightningChart .NET SDK v.10\LibNET4\Arction.Wpf.Charting.LightningChart.dll + + + + + + PreserveNewest + + diff --git a/CapMachine.Wpf/Dtos/ActionLogDto.cs b/CapMachine.Wpf/Dtos/ActionLogDto.cs new file mode 100644 index 0000000..e376cd4 --- /dev/null +++ b/CapMachine.Wpf/Dtos/ActionLogDto.cs @@ -0,0 +1,35 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Dtos +{ + ///

+ /// + /// + public class ActionLogDto : BindableBase + { + /// + /// 等级 + /// + public int Level { get; set; } + + /// + /// 分类 + /// + public string? Category { get; set; } + + /// + /// 内容 + /// + public string? Content { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } + } +} diff --git a/CapMachine.Wpf/MapperProfile/ActionLogProfile.cs b/CapMachine.Wpf/MapperProfile/ActionLogProfile.cs new file mode 100644 index 0000000..107f9f1 --- /dev/null +++ b/CapMachine.Wpf/MapperProfile/ActionLogProfile.cs @@ -0,0 +1,20 @@ +using AutoMapper; +using CapMachine.Model; +using CapMachine.Wpf.Dtos; +using CapMachine.Wpf.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.MapperProfile +{ + public class ActionLogProfile:Profile + { + public ActionLogProfile() + { + CreateMap().ReverseMap(); + } + } +} diff --git a/CapMachine.Wpf/Models/ComboBoxModel.cs b/CapMachine.Wpf/Models/ComboBoxModel.cs new file mode 100644 index 0000000..93f2c52 --- /dev/null +++ b/CapMachine.Wpf/Models/ComboBoxModel.cs @@ -0,0 +1,33 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models +{ + public class ComboBoxModel:BindableBase + { + private string key; + /// + /// Key值 + /// + public string Key + { + get { return key; } + set { key = value; RaisePropertyChanged(); } + } + + + private string text; + /// + /// Text值 + /// + public string Text + { + get { return text; } + set { text = value; RaisePropertyChanged(); } + } + } +} diff --git a/CapMachine.Wpf/PrismEvent/ProStepDrawerEvent.cs b/CapMachine.Wpf/PrismEvent/ProStepDrawerEvent.cs new file mode 100644 index 0000000..58b4cfe --- /dev/null +++ b/CapMachine.Wpf/PrismEvent/ProStepDrawerEvent.cs @@ -0,0 +1,14 @@ +using Prism.Events; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.PrismEvent +{ + public class ProStepDrawerEvent : PubSubEvent + { + + } +} diff --git a/CapMachine.Wpf/Services/ConfigService.cs b/CapMachine.Wpf/Services/ConfigService.cs new file mode 100644 index 0000000..82e2f87 --- /dev/null +++ b/CapMachine.Wpf/Services/ConfigService.cs @@ -0,0 +1,20 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Services +{ + /// + /// 配置服务中心 + /// + public class ConfigService:BindableBase + { + public ConfigService() + { + + } + } +} diff --git a/CapMachine.Wpf/Services/ILogService.cs b/CapMachine.Wpf/Services/ILogService.cs new file mode 100644 index 0000000..6e06737 --- /dev/null +++ b/CapMachine.Wpf/Services/ILogService.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Services +{ + /// + /// NLog服务 + /// + public interface ILogService + { + void Debug(string msg); + void Error(string msg); + void Fatal(string msg); + void Info(string msg); + void Warn(string msg); + } +} diff --git a/CapMachine.Wpf/Services/LogService.cs b/CapMachine.Wpf/Services/LogService.cs new file mode 100644 index 0000000..2a75f80 --- /dev/null +++ b/CapMachine.Wpf/Services/LogService.cs @@ -0,0 +1,83 @@ +using NLog; +using Prism.Services.Dialogs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Services +{ + /// + /// NLog 服务 + /// + public class LogService : ILogService + { + private static Logger logger = LogManager.GetCurrentClassLogger(); //初始化日志类 + + /// + /// 调试日志 + /// + /// 日志内容 + public void Debug(string msg) + { + logger.Debug(msg); + } + + /// + /// 信息日志 + /// + /// 日志内容 + /// + /// 适用大部分场景 + /// 1.记录日志文件 + /// + public void Info(string msg) + { + logger.Info(msg); + } + + /// + /// 错误日志 + /// + /// 日志内容 + /// + /// 适用异常,错误日志记录 + /// 1.记录日志文件 + /// + public void Error(string msg) + { + logger.Error(msg); + } + + /// + /// 严重致命错误日志 + /// + /// 日志内容 + /// + /// 1.记录日志文件 + /// 2.控制台输出 + /// + public void Fatal(string msg) + { + logger.Fatal(msg); + } + + /// + /// 警告日志 + /// + /// 日志内容 + /// + /// 1.记录日志文件 + /// 2.发送日志邮件 + /// + public void Warn(string msg) + { + try + { + logger.Warn(msg); + } + catch { } + } + } +} diff --git a/CapMachine.Wpf/Services/NavigationMenuService.cs b/CapMachine.Wpf/Services/NavigationMenuService.cs index 2b7c80f..e36c5cd 100644 --- a/CapMachine.Wpf/Services/NavigationMenuService.cs +++ b/CapMachine.Wpf/Services/NavigationMenuService.cs @@ -26,38 +26,36 @@ namespace CapMachine.Wpf.Services public void Initialize() { MenuItems.Clear(); - MenuItems.Add(new NavigationItem("", "全部", "", new ObservableCollection() + MenuItems.Add(new NavigationItem("", "系统", "", new ObservableCollection() { - new NavigationItem("","模板匹配","",new ObservableCollection() + new NavigationItem("","系统配置","",new ObservableCollection() { - new NavigationItem("ShapeCirclePlus","轮廓匹配",""), - new NavigationItem("ShapeOutline","形状匹配",""), - new NavigationItem("Clouds", "相似性匹配",""), - new NavigationItem("ShapeOvalPlus","形变匹配",""), + new NavigationItem("ShapeCirclePlus","日志文件",""), + new NavigationItem("ShapeOutline","工况预设",""), + new NavigationItem("Clouds", "高速记录",""), + new NavigationItem("ShapeOvalPlus","系统配置",""), }), - new NavigationItem("", "比较测量","",new ObservableCollection() + new NavigationItem("", "计算信息","",new ObservableCollection() { - new NavigationItem("Circle","卡尺找圆",""), - new NavigationItem("Palette","颜色检测",""), - new NavigationItem("Ruler", "几何测量",""), + new NavigationItem("Circle","过热度",""), + new NavigationItem("Palette","过冷度",""), }), - new NavigationItem("","字符识别","",new ObservableCollection() + new NavigationItem("", "PID设置","",new ObservableCollection() { - new NavigationItem("FormatColorText", "字符识别",""), - new NavigationItem("Barcode", "一维码识别",""), - new NavigationItem("Qrcode", "二维码识别",""), + new NavigationItem("Circle","转速PID",""), }), - new NavigationItem("","缺陷检测","",new ObservableCollection() + new NavigationItem("","版本信息","",new ObservableCollection() { - new NavigationItem("Crop", "差分模型",""), - new NavigationItem("CropRotate", "形变模型",""), - }) + new NavigationItem("FormatColorText", "操作手册",""), + new NavigationItem("Barcode", "版本更新信息",""), + }), + })); MenuItems.Add(new NavigationItem("", "工艺过程", "MonitorView")); MenuItems.Add(new NavigationItem("", "工艺参数", "ProConfigView")); MenuItems.Add(new NavigationItem("", "工艺曲线", "RealTimeChartView")); MenuItems.Add(new NavigationItem("", "动作日志", "ActionLogView")); - MenuItems.Add(new NavigationItem("", "用户管理", "UserView")); + MenuItems.Add(new NavigationItem("", "用户管理", "UserManageView")); } } } diff --git a/CapMachine.Wpf/Services/SysService.cs b/CapMachine.Wpf/Services/SysService.cs new file mode 100644 index 0000000..6e938ca --- /dev/null +++ b/CapMachine.Wpf/Services/SysService.cs @@ -0,0 +1,49 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Services +{ + /// + /// 系统资源 + /// + public class SysService : BindableBase + { + public SysService() + { + // 创建一个定时器,设置间隔时间为2000毫秒(即2秒) + CurTimer = new System.Timers.Timer(5000); + CurTimer.AutoReset = true; + // 设置Elapsed事件处理程序 + CurTimer.Elapsed += CurTimer_Elapsed; + // 启动定时器 + CurTimer.Start(); + + } + + private void CurTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e) + { + CurDateTime=DateTime.Now; + + } + + /// + /// 定时器 + /// + private System.Timers.Timer CurTimer { get; set; } + + private DateTime _CurDateTime; + /// + /// 当前时间信息 + /// + public DateTime CurDateTime + { + get { return _CurDateTime; } + set { _CurDateTime = value; RaisePropertyChanged(); } + } + + } +} diff --git a/CapMachine.Wpf/ViewModels/ActionLogViewModel.cs b/CapMachine.Wpf/ViewModels/ActionLogViewModel.cs new file mode 100644 index 0000000..2cacaae --- /dev/null +++ b/CapMachine.Wpf/ViewModels/ActionLogViewModel.cs @@ -0,0 +1,387 @@ +using AutoMapper; +using CapMachine.Core; +using CapMachine.Model; +using CapMachine.Wpf.Dtos; +using CapMachine.Wpf.Models; +using CapMachine.Wpf.Services; +using Microsoft.Extensions.Logging; +using NPOI.HSSF.Util; +using NPOI.SS.UserModel; +using NPOI.XSSF.UserModel; +using Prism.Events; +using Prism.Services.Dialogs; +using Syncfusion.Windows.Shared; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; + +namespace CapMachine.Wpf.ViewModels +{ + public class ActionLogViewModel : NavigationViewModel + { + /// + /// 实例化 + /// + /// + /// + /// + public ActionLogViewModel(IDialogService dialogService, IFreeSql freeSql, IEventAggregator eventAggregator, IMapper mapper, ILogService logger) + { + DialogService = dialogService; + FreeSql = freeSql; + EventAggregator = eventAggregator; + Mapper = mapper; + Logger = logger; + + CategoryComboBoxList = new List() + { + new ComboBoxModel(){Key="0",Text="系统" }, + new ComboBoxModel(){Key="1",Text="程序步骤" }, + new ComboBoxModel(){Key="2",Text="报警" }, + }; + } + + private string CurrentName = "埋塞敲入螺旋钉安装"; + + private string CurrentTemplate = "BurPlugInstallTemplate.xlsx"; + + public IDialogService DialogService { get; } + public IFreeSql FreeSql { get; } + public IEventAggregator EventAggregator { get; } + public IMapper Mapper { get; } + public ILogService Logger { get; } + + //ActionLog + + private List _CategoryComboBoxList; + /// + /// 分类下拉框列表 + /// + public List CategoryComboBoxList + { + get { return _CategoryComboBoxList; } + set { _CategoryComboBoxList = value; RaisePropertyChanged(); } + } + + + private string _SearchCategory; + /// + /// 搜索条件-分类 + /// + public string SearchCategory + { + get + { + return _SearchCategory; + } + set + { + _SearchCategory = value; + RaisePropertyChanged(); + } + } + + /// + /// 列表集合 + /// + private ObservableCollection _ListModelDto=new ObservableCollection(); + /// + /// 列表集合 + /// + public ObservableCollection ListModelDto + { + get { return _ListModelDto; } + set { _ListModelDto = value; } + } + + #region 搜索条件属性 + + /// + /// 分类 + /// + private string _Category; + + public string Category + { + get + { + return _Category; + } + set + { + _Category = value; + RaisePropertyChanged(); + } + } + + + ///// + ///// 搜索条件-筒体编号 + ///// + //private string searchCylinderNo; + + //public string SearchCylinderNo + //{ + // get + // { + // return searchCylinderNo; + // } + // set + // { + // searchCylinderNo = value; + // RaisePropertyChanged(); + // } + //} + + + /// + /// 搜索条件-开始时间 + /// + private string _SearchStartDate; + + public string SearchStartDate + { + get + { + return _SearchStartDate; + } + set + { + _SearchStartDate = value; + RaisePropertyChanged(); + } + } + + /// + /// 搜索条件-结束时间 + /// + private string _SearchEndDate; + + public string SearchEndDate + { + get + { + return _SearchEndDate; + } + + set + { + _SearchEndDate = value; + RaisePropertyChanged(); + } + } + + #endregion + + #region 搜索命令 + + /// + /// 搜索命令 + /// + private DelegateCommand _SearchCmd; + public DelegateCommand SearchCmd + { + get + { + if (_SearchCmd == null) return new DelegateCommand((a) => Search()); + return _SearchCmd; + } + set + { + _SearchCmd = value; + } + } + + private void Search() + { + try + { + var MulConQueryable = FreeSql.Select(); + + //多条件查询 + if (!string.IsNullOrEmpty(SearchCategory)) + { + MulConQueryable = MulConQueryable.Where(t => t.Category == SearchCategory); + } + //多条件查询 + if (!string.IsNullOrEmpty(SearchStartDate)) + { + MulConQueryable = MulConQueryable.Where(t => t.CreateTime.Date >= Convert.ToDateTime(SearchStartDate)); + } + //多条件查询 + if (!string.IsNullOrEmpty(SearchEndDate)) + { + MulConQueryable = MulConQueryable.Where(t => t.CreateTime.Date < Convert.ToDateTime(SearchEndDate).AddDays(1)); + } + var ListDpI = MulConQueryable.OrderByDescending(a => a.CreateTime).ToList();//.Where(a => a.CreateTime >= DateTime.Now); + ListModelDto.Clear(); + + + foreach (var item in ListDpI) + { + ListModelDto.Add(Mapper.Map(item)); + + } + } + catch (Exception ex) + { + Logger.Error(String.Format("ErrSource : {0} ErrMsg : {1}", ex.StackTrace.ToString(), ex.Message.ToString())); + } + } + #endregion + + #region "导出数据" + + /// + /// 搜索命令 + /// + private DelegateCommand _OutputDataCmd; + public DelegateCommand OutputDataCmd + { + set + { + _OutputDataCmd = value; + } + get + { + if (_OutputDataCmd == null) + { + _OutputDataCmd = new DelegateCommand(a => OutputDataAction()); + } + return _OutputDataCmd; + } + } + + private void OutputDataAction() + { + return; + + try + { + if (ListModelDto != null && ListModelDto.Count > 0) + { + string FilePath = string.Empty; + //FolderBrowserDialog dialog = new FolderBrowserDialog(); + //dialog.Description = "请选择文件夹"; + //dialog.ShowNewFolderButton = true; // 显示 新建文件夹 按钮 + // //dialog.SelectedPath = Environment.CurrentDirectory; // 设置 选择的路径 为 当前项目路径 + //if (dialog.ShowDialog() == DialogResult.OK) + //{ + // // 判空 + // if (string.IsNullOrEmpty(dialog.SelectedPath)) { MessageBox.Show("文件夹路径不能为空", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Information); return; } + // FilePath = dialog.SelectedPath; // 获取 选择的 文件夹 路径 + //} + + + var ListData = ListModelDto.ToList(); + + /*********************** + 1.读取excel到workbook中 + ***********************/ + string TemplateFilePath = System.Environment.CurrentDirectory; + string tPath = TemplateFilePath + @"\ReportFile\" + CurrentTemplate; + //string tPath = @"D:\ReportTemplate\注油Template.xlsx"; + XSSFWorkbook wk = null; + using (FileStream fs = File.Open(tPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + wk = new XSSFWorkbook(fs); + fs.Close(); //把excel里的内容保存到workbook中之后,就可以关闭了 + } + NPOI.SS.UserModel.ISheet sheet = wk.GetSheetAt(0); //获得wk中第一个sheet,保存到sheet中 + + /*********************** + 2.操作数据 + ***********************/ + //2行 5行 + IDataFormat dataformat = wk.CreateDataFormat(); + ICellStyle style0 = wk.CreateCellStyle(); + + ICellStyle styleBag = wk.CreateCellStyle(); + styleBag.FillForegroundColor = HSSFColor.Red.Index; + styleBag.FillPattern = FillPattern.SolidForeground; + + for (int i = 0; i < ListData.Count; i++)// (int i = 2; i < 6; i += 3) + { + IRow row; + row = sheet.CreateRow(i + 1); + + //row.CreateCell(0).SetCellValue(ListData[i].StaticDiskNo.ToString()); + //row.CreateCell(1).SetCellValue(ListData[i].OpNo.ToString()); + //row.CreateCell(2).SetCellValue(ListData[i].CreateTime.ToString("yyyy-MM-dd HH:mm")); + + + //row.GetCell(10).CellStyle = style0; + + style0.DataFormat = dataformat.GetFormat("yyyy-MM-dd HH:mm:ss"); + row.GetCell(2).CellStyle = style0; + //row.GetCell(26).CellStyle = style0; + //if (ListDat[i].UpperGroupStandDiffResult == "NG") + //{ + // row.GetCell(4).CellStyle = styleBag; + //} + //if (ListDat[i].LowerGroupStandDiffResult == "NG") + //{ + // row.GetCell(6).CellStyle = styleBag; + //} + //if (ListDat[i].GroupStandDiffResult == "NG") + //{ + // row.GetCell(8).CellStyle = styleBag; + //} + //if (ListDat[i].FillReal >= ListDat[i].BeforLow && ListDat[i].FillReal <= ListDat[i].BeforUp) + //{ + + //} + //else + //{ + // row.GetCell(7).CellStyle = styleBag; + //} + + } + + + //DayDailyParameterInfo = null; + //NightDailyParameterInfo = null; + + /*********************** + 3.修改完成,写入到客户端 + ***********************/ + using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) + { + //tPath = @"D:\日立报表\"; + //判断文件夹是否存在,不存在就创建 + if (!Directory.Exists(FilePath)) + { + Directory.CreateDirectory(FilePath); + } + FilePath = FilePath + @"\" + Convert.ToDateTime(SearchStartDate).ToString("yyyy-MM-dd") + "-" + Convert.ToDateTime(SearchStartDate).ToString("yyyy-MM-dd") + "-" + CurrentName + ".xlsx"; + wk.Write(ms); + + using (FileStream fs = new FileStream(FilePath, FileMode.Create, FileAccess.Write)) + { + byte[] data = ms.ToArray(); + fs.Write(data, 0, data.Length); + fs.Flush(); + } + wk = null; + } + System.Windows.MessageBox.Show("生成成功"); + } + else + { + MessageBox.Show("请先搜索数据后再导出", "提示", MessageBoxButton.OK, MessageBoxImage.Information); + } + } + catch (Exception ex) + { + Logger.Error(String.Format("ErrSource : {0} ErrMsg : {1}", ex.StackTrace.ToString(), ex.Message.ToString())); + } + } + + #endregion + } +} diff --git a/CapMachine.Wpf/ViewModels/FooterViewModel.cs b/CapMachine.Wpf/ViewModels/FooterViewModel.cs new file mode 100644 index 0000000..83da003 --- /dev/null +++ b/CapMachine.Wpf/ViewModels/FooterViewModel.cs @@ -0,0 +1,17 @@ +using CapMachine.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.ViewModels +{ + public class FooterViewModel : NavigationViewModel + { + public FooterViewModel() + { + var dd = 1; + } + } +} diff --git a/CapMachine.Wpf/ViewModels/MainViewModel.cs b/CapMachine.Wpf/ViewModels/MainViewModel.cs index 020eb3a..9d0c182 100644 --- a/CapMachine.Wpf/ViewModels/MainViewModel.cs +++ b/CapMachine.Wpf/ViewModels/MainViewModel.cs @@ -1,6 +1,7 @@ using CapMachine.Core; using CapMachine.Core.IService; using CapMachine.Wpf.Models; +using CapMachine.Wpf.Services; using Prism.Commands; using Prism.Regions; @@ -8,15 +9,16 @@ namespace CapMachine.Wpf.ViewModels { public class MainViewModel : NavigationViewModel { - public MainViewModel(IRegionManager region, INavigationMenuService menuService) + public MainViewModel(IRegionManager region, INavigationMenuService menuService, SysService sysService) { this.region = region; MenuService = menuService; + SysService = sysService; NavigateCommand = new DelegateCommand(Navigate); } public INavigationMenuService MenuService { get; } - + public SysService SysService { get; } public DelegateCommand NavigateCommand { get; private set; } private int selectedIndex = -1; @@ -46,7 +48,7 @@ namespace CapMachine.Wpf.ViewModels { if (item == null) return; - if (item.Name.Equals("全部")) + if (item.Name.Equals("系统")) { IsTopDrawerOpen = true; return; diff --git a/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs b/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs index 10fd7c1..561406c 100644 --- a/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs +++ b/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs @@ -1,6 +1,11 @@ using CapMachine.Core; using CapMachine.Model; +using CapMachine.Wpf.PrismEvent; +using CapMachine.Wpf.Views; +using MaterialDesignThemes.Wpf; using Prism.Commands; +using Prism.Events; +using Prism.Regions; using Prism.Services.Dialogs; using System.Collections.ObjectModel; using System.Text; @@ -10,10 +15,13 @@ namespace CapMachine.Wpf.ViewModels { public class ProConfigViewModel : NavigationViewModel { - public ProConfigViewModel(IDialogService dialogService, IFreeSql freeSql) + public ProConfigViewModel(IDialogService dialogService, IFreeSql freeSql,IEventAggregator eventAggregator, IRegionManager regionManager) { //LogService = logService; FreeSql = freeSql; + EventAggregator = eventAggregator; + RegionManager = regionManager; + //MachineDataService = machineDataService; DialogService = dialogService; @@ -29,12 +37,16 @@ namespace CapMachine.Wpf.ViewModels //各个单独仪表的初始化 SelectedMeterSpeed = new MeterSpeed(); SelectedPs = new MeterPs(); + + } /// /// FreeSQL 实例函数 /// public IFreeSql FreeSql { get; } + public IEventAggregator EventAggregator { get; } + public IRegionManager RegionManager { get; } /// /// 弹窗服务 @@ -276,6 +288,37 @@ namespace CapMachine.Wpf.ViewModels #endregion + private DelegateCommand _ProStepPsCmd; + /// + /// 新增PS命令 + /// + public DelegateCommand ProStepPsCmd + { + set + { + _ProStepPsCmd = value; + } + get + { + if (_ProStepPsCmd == null) + { + _ProStepPsCmd = new DelegateCommand(() => ProStepPsCmdCmdMethod()); + } + return _ProStepPsCmd; + } + } + + private void ProStepPsCmdCmdMethod() + { + //var openDrawerCommand = MaterialDesignThemes.Wpf.DrawerHost.OpenDrawerCommand; + + RegionManager.RequestNavigate("ProStepDrawerContentRegion", nameof(ProStepConfigPsView)); + + //EventAggregator.GetEvent().Publish("Right"); + + + } + #region Ps表 private ObservableCollection _ListMeterPsItems; diff --git a/CapMachine.Wpf/ViewModels/ProStepConfigMainViewModel.cs b/CapMachine.Wpf/ViewModels/ProStepConfigMainViewModel.cs new file mode 100644 index 0000000..da6bf32 --- /dev/null +++ b/CapMachine.Wpf/ViewModels/ProStepConfigMainViewModel.cs @@ -0,0 +1,19 @@ +using CapMachine.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.ViewModels +{ + public class ProStepConfigMainViewModel : NavigationViewModel + { + public ProStepConfigMainViewModel() + { + + } + + + } +} diff --git a/CapMachine.Wpf/ViewModels/ProStepConfigViewModelGroup/ProStepConfigPsViewModel.cs b/CapMachine.Wpf/ViewModels/ProStepConfigViewModelGroup/ProStepConfigPsViewModel.cs new file mode 100644 index 0000000..21b650a --- /dev/null +++ b/CapMachine.Wpf/ViewModels/ProStepConfigViewModelGroup/ProStepConfigPsViewModel.cs @@ -0,0 +1,14 @@ +using CapMachine.Core; + +namespace CapMachine.Wpf.ViewModels +{ + public class ProStepConfigPsViewModel : NavigationViewModel + { + public ProStepConfigPsViewModel() + { + + } + + + } +} diff --git a/CapMachine.Wpf/ViewModels/UserManageViewModel.cs b/CapMachine.Wpf/ViewModels/UserManageViewModel.cs new file mode 100644 index 0000000..7423a58 --- /dev/null +++ b/CapMachine.Wpf/ViewModels/UserManageViewModel.cs @@ -0,0 +1,20 @@ +using CapMachine.Core; +using Prism.Events; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.ViewModels +{ + public class UserManageViewModel : NavigationViewModel + { + public UserManageViewModel(IEventAggregator eventAggregator) + { + //事件服务 + _EventAggregator = eventAggregator; + } + private IEventAggregator _EventAggregator { get; set; } + } +} diff --git a/CapMachine.Wpf/Views/ActionLogView.xaml b/CapMachine.Wpf/Views/ActionLogView.xaml new file mode 100644 index 0000000..5b61114 --- /dev/null +++ b/CapMachine.Wpf/Views/ActionLogView.xaml @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + + + + + + + + + + + + + - + diff --git a/CapMachine.Wpf/Views/ProConfigView.xaml.cs b/CapMachine.Wpf/Views/ProConfigView.xaml.cs index dbb7fe8..ee2e615 100644 --- a/CapMachine.Wpf/Views/ProConfigView.xaml.cs +++ b/CapMachine.Wpf/Views/ProConfigView.xaml.cs @@ -1,4 +1,7 @@ -using System.Windows; +using CapMachine.Wpf.PrismEvent; +using MaterialDesignThemes.Wpf; +using Prism.Events; +using System.Windows; using System.Windows.Controls; namespace CapMachine.Wpf.Views @@ -8,34 +11,45 @@ namespace CapMachine.Wpf.Views /// public partial class ProConfigView : UserControl { - public ProConfigView() + public ProConfigView(IEventAggregator eventAggregator) { InitializeComponent(); + + EventAggregator = eventAggregator; + EventAggregator.GetEvent().Subscribe(DrawerCmd); + } + + private void DrawerCmd(string obj) + { + ProDrawerHost.IsRightDrawerOpen = true; + //ProDrawerHost.IsLeftDrawerOpen = true; } public int TabSelectedIndex { get; set; } + public IEventAggregator EventAggregator { get; } + private void ProStepOtherTapLeft(object sender, RoutedEventArgs e) { - if (TabSelectedIndex > 0) - { - TabSelectedIndex--; - OtherTabControl.SelectedIndex = TabSelectedIndex; - // 将选定的 TabItem 滚动到可视范围内 - TabItem selectedItem = OtherTabControl.SelectedItem as TabItem; - selectedItem?.BringIntoView(); - } + //if (TabSelectedIndex > 0) + //{ + // TabSelectedIndex--; + // OtherTabControl.SelectedIndex = TabSelectedIndex; + // // 将选定的 TabItem 滚动到可视范围内 + // TabItem selectedItem = OtherTabControl.SelectedItem as TabItem; + // selectedItem?.BringIntoView(); + //} } private void ProStepOtherTapRight(object sender, RoutedEventArgs e) { - if (TabSelectedIndex < 12) - { - TabSelectedIndex++; - OtherTabControl.SelectedIndex = TabSelectedIndex; - // 将选定的 TabItem 滚动到可视范围内 - TabItem selectedItem = OtherTabControl.SelectedItem as TabItem; - selectedItem?.BringIntoView(); - } + //if (TabSelectedIndex < 12) + //{ + // TabSelectedIndex++; + // OtherTabControl.SelectedIndex = TabSelectedIndex; + // // 将选定的 TabItem 滚动到可视范围内 + // TabItem selectedItem = OtherTabControl.SelectedItem as TabItem; + // selectedItem?.BringIntoView(); + //} } } diff --git a/CapMachine.Wpf/Views/ProStepConfigMainView.xaml b/CapMachine.Wpf/Views/ProStepConfigMainView.xaml new file mode 100644 index 0000000..424ad7d --- /dev/null +++ b/CapMachine.Wpf/Views/ProStepConfigMainView.xaml @@ -0,0 +1,22 @@ + + + +