202 lines
8.2 KiB
C#
202 lines
8.2 KiB
C#
using UIShare.UIViewModel;
|
|
using UIShare.PubEvent;
|
|
using Logger;
|
|
using Microsoft.IdentityModel.Logging;
|
|
using SqlSugar.Extensions;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Input;
|
|
using UIShare.ViewModelBase;
|
|
using Prism.Dialogs;
|
|
using Prism.Events;
|
|
using UIShare.GlobalVariable;
|
|
|
|
namespace TestingModule.ViewModels
|
|
{
|
|
public class SingleStepEditViewModel:NavigateViewModelBase
|
|
{
|
|
#region 属性
|
|
private Guid _ID;
|
|
public Guid ID
|
|
{
|
|
get => _ID;
|
|
set => SetProperty(ref _ID, value);
|
|
}
|
|
private StepModel _SelectedStep;
|
|
public StepModel SelectedStep
|
|
{
|
|
get => _SelectedStep;
|
|
set => SetProperty(ref _SelectedStep, value);
|
|
}
|
|
public ProgramModel Program
|
|
{
|
|
get => _ScopedContext.Program;
|
|
set
|
|
{
|
|
if (_ScopedContext.Program != value)
|
|
{
|
|
_ScopedContext.Program = value;
|
|
RaisePropertyChanged();
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
private ScopedContext _ScopedContext;
|
|
#region 命令
|
|
public ICommand CancelEditCommand { get; set; }
|
|
public ICommand SaveStepCommand { get; set; }
|
|
#endregion
|
|
public SingleStepEditViewModel(IContainerProvider containerProvider, ScopedContext scopedContext) : base(containerProvider)
|
|
{
|
|
_ScopedContext = scopedContext;
|
|
_eventAggregator.GetEvent<EditSetpEvent>().Subscribe(EditSingleStep);
|
|
CancelEditCommand = new DelegateCommand(CancelEdit);
|
|
SaveStepCommand = new DelegateCommand(SaveStep);
|
|
_eventAggregator.GetEvent<DeletedStepEvent>().Subscribe(DisposeSelectedStep);
|
|
_eventAggregator.GetEvent<ParamsChangedEvent>().Subscribe(ParamsChanged);
|
|
}
|
|
|
|
#region 委托命令
|
|
private void ParamsChanged()
|
|
{
|
|
CancelEdit();
|
|
}
|
|
|
|
private void DisposeSelectedStep(Guid id)
|
|
{
|
|
if (SelectedStep == null) return;
|
|
if(id== SelectedStep.ID)
|
|
SelectedStep = null;
|
|
}
|
|
|
|
private void CancelEdit()
|
|
{
|
|
SelectedStep = null;
|
|
}
|
|
|
|
private void SaveStep()
|
|
{
|
|
if (SelectedStep == null || (SelectedStep.Method == null && SelectedStep.SubProgram == null))
|
|
{
|
|
return;
|
|
}
|
|
var steps = _ScopedContext.SelectedStepList=="主程序"?_ScopedContext.Program.StepCollection: _ScopedContext.Program.ErrorStepCollection;
|
|
int index = steps.ToList().FindIndex(x => x.ID == ID);
|
|
if (index >= 0)
|
|
{
|
|
steps[index] = SelectedStep;
|
|
if (steps[index].Method != null)
|
|
{
|
|
if (steps[index].StepType == "循环开始")
|
|
{
|
|
try
|
|
{
|
|
steps[index].LoopCount = Convert.ToInt32(SelectedStep.Method!.Parameters[0].Value);
|
|
}
|
|
catch
|
|
{
|
|
LoggerHelper.ErrorWithNotify("循环指令参数设置错误:类型转换失败");
|
|
}
|
|
}
|
|
else
|
|
{ //设置步骤参数
|
|
(steps[index].OKGotoStepID, steps[index].NGGotoStepID) = GetOKNGGotoStepID(SelectedStep.GotoSettingString);
|
|
for (int i = 0; i < steps[index].Method.Parameters.Count; i++)
|
|
{
|
|
var editedParam = SelectedStep.Method!.Parameters[i];
|
|
var originalParam = steps[index].Method.Parameters[i];
|
|
if (editedParam.IsUseVar)
|
|
{
|
|
originalParam.VariableName = editedParam.VariableName;
|
|
originalParam.VariableID = _ScopedContext.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;
|
|
}
|
|
var parameters = new DialogParameters
|
|
{
|
|
{ "Title", "提示" },
|
|
{ "Message", "保存成功!" },
|
|
{ "Icon", "info" },
|
|
{ "ShowOk", true }
|
|
};
|
|
_dialogService.ShowDialog("MessageBox", parameters);
|
|
}
|
|
}
|
|
else if (steps[index].SubProgram != null)
|
|
{
|
|
if (SelectedStep.SubProgram.Parameters.Where(x => x.VariableName == null && x.IsUseVar == true).FirstOrDefault() != null)
|
|
{
|
|
var parameters1 = new DialogParameters
|
|
{
|
|
{ "Title", "警告" },
|
|
{ "Message", "选中变量不得为空!" },
|
|
{ "Icon", "warn" },
|
|
{ "ShowOk", true },
|
|
};
|
|
_dialogService.ShowDialog("MessageBox",parameters1);
|
|
return;
|
|
}
|
|
(steps[index].OKGotoStepID, steps[index].NGGotoStepID) = GetOKNGGotoStepID(SelectedStep.GotoSettingString);
|
|
for (int i = 0; i < steps[index].SubProgram.Parameters.Count; i++)
|
|
{
|
|
var editedParam = SelectedStep.SubProgram!.Parameters[i];
|
|
var originalParam = steps[index].SubProgram.Parameters[i];
|
|
if (editedParam.IsUseVar)
|
|
{
|
|
originalParam.VariableName = editedParam.VariableName;
|
|
originalParam.VariableID = _ScopedContext.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;
|
|
}
|
|
var parameters = new DialogParameters
|
|
{
|
|
{ "Title", "提示" },
|
|
{ "Message", "保存成功!" },
|
|
{ "Icon", "info" },
|
|
{ "ShowOk", true }
|
|
};
|
|
_dialogService.ShowDialog("MessageBox", parameters);
|
|
}
|
|
}
|
|
|
|
}
|
|
private (Guid,Guid) GetOKNGGotoStepID(string GotoSettingString)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(GotoSettingString))
|
|
return (Guid.Empty, Guid.Empty);
|
|
|
|
var match = Regex.Match(GotoSettingString, @"^(\d+)\s*/\s*(\d+)$");
|
|
if (match.Success)
|
|
{
|
|
int ok = int.Parse(match.Groups[1].Value);
|
|
int ng = int.Parse(match.Groups[2].Value);
|
|
|
|
Guid okGuid = _ScopedContext.Program.StepCollection.ElementAtOrDefault(ok-1)?.ID ?? Guid.Empty;
|
|
Guid ngGuid = _ScopedContext.Program.StepCollection.ElementAtOrDefault(ng-1)?.ID ?? Guid.Empty;
|
|
|
|
return (okGuid, ngGuid);
|
|
}
|
|
return (Guid.Empty, Guid.Empty);
|
|
}
|
|
private void EditSingleStep()
|
|
{
|
|
if (_ScopedContext.SelectedStep == null) return;
|
|
ID = _ScopedContext.SelectedStep.ID;
|
|
SelectedStep = new StepModel(_ScopedContext.SelectedStep);
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
}
|