using MaterialDesignThemes.Wpf; using Prism.Commands; using Prism.Events; using Prism.Ioc; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using Team.FFFeederService.Interfaces; using Team.FFFeederService.Models; using Team.FFFeederService; using TeamAAS_VP.Controls; using TeamAAS_VP.Enums; using TeamAAS_VP.Events; using TeamAAS_VP.Core; using TeamAAS_VP.Models; using TeamAAS_VP.Views.Product; using TeamAAS_VP; using Cognex.VisionPro.ToolBlock; namespace TeamAAS_VP.ViewModels.Product { public class ProcedureVisionOutputViewModel : BindableBase { IRegionManager _regionManager; IEventAggregator _eventAggregator; IContainerProvider _container; IDialogService _dialogService; ProductsViewModel productsViewModel; #region 属性 private ProductModel _SelectProduct; /// /// 选中的产品 /// public ProductModel SelectProduct { get { return _SelectProduct; } set { SetProperty(ref _SelectProduct, value); } } private ProcedureModel _SelectProcedure; /// /// 选中的流程 /// public ProcedureModel SelectProcedure { get { return _SelectProcedure; } set { SetProperty(ref _SelectProcedure, value); } } private ObservableCollection _Outputs; /// /// VM流程输出集合 /// public ObservableCollection Outputs { get { return _Outputs; } set { SetProperty(ref _Outputs, value); } } private ProcedureOutput _SelectOutput; /// /// 选中的流程输出 /// public ProcedureOutput SelectOutput { get { return _SelectOutput; } set { SetProperty(ref _SelectOutput, value); } } private ProcedureOutputOpcAdr _SelectAdrOutput; /// /// 选中的流程输出 /// public ProcedureOutputOpcAdr SelectAdrOutput { get { return _SelectAdrOutput; } set { SetProperty(ref _SelectAdrOutput, value); } } private ProcedureOutput _SelectOutput1; /// /// 选中的流程输出 /// public ProcedureOutput SelectOutput1 { get { return _SelectOutput1; } set { SetProperty(ref _SelectOutput1, value); } } public Management management { get; set; } #endregion #region 命令 private DelegateCommand _NextCommand; public DelegateCommand NextCommand => _NextCommand ?? (_NextCommand = new DelegateCommand(ExecuteNextCommand)); private DelegateCommand _BackCommand; public DelegateCommand BackCommand => _BackCommand ?? (_BackCommand = new DelegateCommand(ExecuteBackCommand)); private DelegateCommand _LoadedCommand; public DelegateCommand LoadedCommand => _LoadedCommand ?? (_LoadedCommand = new DelegateCommand(ExecuteLoadedCommand)); private DelegateCommand _AddOutputCommand; public DelegateCommand AddOutputCommand => _AddOutputCommand ?? (_AddOutputCommand = new DelegateCommand(ExecuteAddOutputCommand, () => { return SelectOutput != null ? true : false; }).ObservesProperty(()=> SelectOutput)); private DelegateCommand _AddOpcOutputCommand; public DelegateCommand AddOpcOutputCommand => _AddOpcOutputCommand ?? (_AddOpcOutputCommand = new DelegateCommand(ExecuteAddAdrOutputCommand)); private DelegateCommand _RemoveOutputCommand; public DelegateCommand RemoveOutputCommand => _RemoveOutputCommand ?? (_RemoveOutputCommand = new DelegateCommand(ExecuteRemoveOutputCommand, p => { return SelectOutput1 != null ? true : false; })).ObservesProperty(() => SelectOutput1); private DelegateCommand _RemoveOpcOutputCommand; public DelegateCommand RemoveOpcOutputCommand => _RemoveOpcOutputCommand ?? (_RemoveOpcOutputCommand = new DelegateCommand(ExecuteRemoveAdrOutputCommand, p => { return SelectOutput1 != null ? true : false; })).ObservesProperty(() => SelectAdrOutput); #endregion #region 事件 #endregion public ProcedureVisionOutputViewModel(IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, IDialogService dialogService) { _regionManager = regionManager; _eventAggregator = ea; _container = container; _dialogService = dialogService; //订阅权限登录事件 _eventAggregator.GetEvent().Subscribe(LoginChange); management = _container.Resolve(); productsViewModel = _container.Resolve(); SelectProduct = productsViewModel.SelectProduct; SelectProcedure = _container.Resolve().SelectProcedure; } #region 方法 /// /// 添加输出 /// void ExecuteAddOutputCommand() { try { if (SelectOutput == null) return; if (SelectProcedure.ProcedureOutputs.FirstOrDefault(p=>p.Name== SelectOutput.Name) != null) return; if (SelectProcedure.ProcedureOutputs == null) SelectProcedure.ProcedureOutputs = new ObservableCollection(); if (SelectOutput.Name.Contains("Point")) { if (SelectProcedure.CalibrationId != Guid.Empty) { SelectOutput.IsPointTran = true; } } SelectProcedure.ProcedureOutputs.Add(SelectOutput); } catch (Exception ex) { LogHelper.WriteLogError("流程视觉输出-添加输出时出错", ex); } } /// /// 添加Opc输出 /// void ExecuteAddAdrOutputCommand() { try { if (SelectProcedure.ProcedureOutputsOpcAdrs == null) SelectProcedure.ProcedureOutputsOpcAdrs = new ObservableCollection(); SelectProcedure.ProcedureOutputsOpcAdrs.Add(new ProcedureOutputOpcAdr() ); } catch (Exception ex) { LogHelper.WriteLogError("流程视觉输出-添加输出时出错", ex); } } /// /// 移除输出 /// void ExecuteRemoveOutputCommand(object index) { try { if ((int)index < 0) return; if (SelectProcedure.ProcedureOutputs == null) SelectProcedure.ProcedureOutputs = new ObservableCollection(); SelectProcedure.ProcedureOutputs.RemoveAt((int)index); } catch (Exception ex) { LogHelper.WriteLogError("流程视觉输出-移除输出时出错", ex); } } /// /// 移除Opc输出 /// void ExecuteRemoveAdrOutputCommand(object index) { try { if ((int)index < 0) return; if (SelectProcedure.ProcedureOutputsOpcAdrs == null) SelectProcedure.ProcedureOutputsOpcAdrs = new ObservableCollection(); SelectProcedure.ProcedureOutputsOpcAdrs.RemoveAt((int)index); } catch (Exception ex) { LogHelper.WriteLogError("流程视觉输出-移除输出时出错", ex); } } /// /// 下一步 /// void ExecuteNextCommand() { _regionManager.RequestNavigate("ProductRegionContext", "ProcedureParams"); } /// /// 上一步 /// void ExecuteBackCommand() { if (SelectProcedure.FeederId == Guid.Empty) { if (SelectProcedure.VisionModel == Enums.VisionModel.Simple) { _regionManager.RequestNavigate("ProductRegionContext", "SimpleProcedure"); } else { _regionManager.RequestNavigate("ProductRegionContext", "AdvancedProcedure"); } } else { var feederService = management.FeederService; var Feeder = feederService.GetFeeder(SelectProcedure.FeederId); if (Feeder.FeederBrand==FeederBrand.AFAG) { _regionManager.RequestNavigate("ProductRegionContext", "AfagFeederParams"); } else { _regionManager.RequestNavigate("ProductRegionContext", "FeederParams"); } } } void ExecuteLoadedCommand() { if (_container.Resolve().CurrentUser.userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } try { //if (management.RobotService.GetRobot(SelectProcedure.RobotId).Brand == RobotBrand.XYZ_Platform) //{ //} productsViewModel = _container.Resolve(); SelectProduct = productsViewModel.SelectProduct; SelectProcedure = _container.Resolve().SelectProcedure; Outputs = new ObservableCollection(); CogToolBlockTerminalCollection outputCollection = SelectProcedure.ToolBlock.Outputs; foreach (CogToolBlockTerminal output in outputCollection) { Outputs.Add(new ProcedureOutput() { Name = output.Name, ValueType = output.ValueType }); } } catch (Exception ex) { LogHelper.WriteLogError("流程视觉输出-加载时出错", ex); } } #endregion private bool _IsAllowEdit = false; public bool IsAllowEdit { get { return _IsAllowEdit; } set { SetProperty(ref _IsAllowEdit, value); } } private void LoginChange(Models.User user) { if (user.userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } } } }