using ATS.Models; using ATS.Tools; using ATS.Windows; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace ATS.Views { /// /// SingleStepEdit.xaml 的交互逻辑 /// public partial class SingleStepEdit : UserControl { public StepModel SelectedStep => MainWindow.Instance.SelectedStep ?? new(); public SingleStepEdit() { InitializeComponent(); } private void SaveStep_Click(object sender, RoutedEventArgs e) { if (SelectedStep == null || (SelectedStep.Method == null && SelectedStep.SubProgram == null)) { return; } if (SelectedStep.OKExpression != null) { Dictionary paraDic = []; foreach (var item in MainWindow.Instance.Program.Parameters) { paraDic.TryAdd(item.Name, item.Value!); } //if (!ExpressionEvaluator.IsExpressionValid(SelectedStep.OKExpression, paraDic)) //{ // MessageBox.Show("合格条件表达式非法,请检查后重试"); // return; //} } if (StepsManager.Instance!.SelectedItem is StepModel originalStep) { originalStep.Name = SelectedStep.Name; originalStep.OKExpression = SelectedStep.OKExpression; originalStep.OKGotoStepID = SelectedStep.OKGotoStepID; originalStep.NGGotoStepID = SelectedStep.NGGotoStepID; originalStep.Description = SelectedStep.Description; // 更新参数 if (originalStep.Method != null) { if (originalStep.StepType == "循环开始") { try { originalStep.LoopCount = Convert.ToInt32(SelectedStep.Method!.Parameters[0].Value); } catch { Log.Error("循环指令参数设置错误:类型转换失败"); } } else { for (int i = 0; i < originalStep.Method.Parameters.Count; i++) { try { var editedParam = SelectedStep.Method!.Parameters[i]; var originalParam = originalStep.Method.Parameters[i]; if (editedParam.IsUseVar) { originalParam.VariableName = editedParam.VariableName; originalParam.VariableID = MainWindow.Instance.Program.Parameters.FirstOrDefault(x => x.Name == editedParam.VariableName)!.ID; } //originalParam.VariableName = editedParam.VariableName; //originalParam.VariableID = MainWindow.Instance.Program.Parameters.FirstOrDefault(x => x.Name == editedParam.VariableName)!.ID; originalParam.Value = editedParam.Value; originalParam.IsUseVar = editedParam.IsUseVar; originalParam.LowerLimit = editedParam.LowerLimit; originalParam.UpperLimit = editedParam.UpperLimit; originalParam.IsOutputToReport = editedParam.IsOutputToReport; } catch(Exception ex) { Log.Error(ex.Message); } } } } else if (originalStep.SubProgram != null) { for (int i = 0; i < originalStep.SubProgram.Parameters.Count; i++) { var editedParam = SelectedStep.SubProgram!.Parameters[i]; var originalParam = originalStep.SubProgram.Parameters[i]; if (editedParam.IsUseVar) { originalParam.VariableName = editedParam.VariableName; originalParam.VariableID = MainWindow.Instance.Program.Parameters.FirstOrDefault(x => x.Name == editedParam.VariableName)!.ID; } originalParam.Value = editedParam.Value; originalParam.IsUseVar = editedParam.IsUseVar; originalParam.LowerLimit = editedParam.LowerLimit; originalParam.UpperLimit = editedParam.UpperLimit; originalParam.IsOutputToReport = editedParam.IsOutputToReport; } } Log.Success($"用户 [ {MainWindow.Instance.User.UserName} ] 修改步骤 [ {originalStep.Index} ] [ {originalStep.Name} ] "); } MainWindow.Instance.SelectedStep = null; } private void CancelStepEdit_Click(object sender, RoutedEventArgs e) { MainWindow.Instance.SelectedStep = null; } } }