using Cognex.VisionPro; using Cognex.VisionPro.ToolBlock; 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.ComponentModel; using System.Diagnostics.Eventing.Reader; using System.IO; using System.Linq; using TeamAAS_VP; using TeamAAS_VP.Core; using TeamAAS_VP.Events; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; using TeamAAS_VP.Models.Calibration; using TeamAAS_VP.Models.Lights; using TeamAAS_VP.Models.Product; using TeamAAS_VP.Resources.Languages; using TeamAAS_VP.Services; namespace TeamAAS_VP.ViewModels.Product { public class ProcessBasicsViewModel : BindableBase, IConfirmNavigationRequest { IRegionManager _regionManager; IEventAggregator _eventAggregator; IContainerProvider _container; IDialogService _dialogService; IConfigService _configService; ICalibrationService _calibrationService; ISystemDatabaseService _systemDatabaseService; #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); if (value == null) { SelectRobot = null; SelectFeeder = null; SelectCalibration = null; } else { SelectRobot = _configService.GetAllRobots().FirstOrDefault(p => p.Id == value.RobotId); SelectFeeder = _configService.GetAllFeeders().FirstOrDefault(p => p.Id == value.FeederId); SelectCalibration = _calibrationService.GetAllCalibrations().FirstOrDefault(p => p.Id == value.CalibrationId); } } } private ObservableCollection _ProcedureModels; /// /// 流程集合 /// public ObservableCollection ProcedureModels { get { return _ProcedureModels; } set { SetProperty(ref _ProcedureModels,value); } } private RobotInfo _SelectRobot; public RobotInfo SelectRobot { get { if (SelectProcedure != null) { if (SelectProcedure.RobotId == Guid.Empty) { return null; } else { return _configService.GetAllRobots().FirstOrDefault(p => p.Id == SelectProcedure.RobotId); } } else { return null; } } set { SetProperty(ref _SelectRobot, value); if (value == null) { if (SelectProcedure!=null) { SelectProcedure.RobotId = Guid.Empty; } return; } if (SelectProcedure != null) SelectProcedure.RobotId = value.Id; } } private FeederInfo _SelectFeeder; public FeederInfo SelectFeeder { get { if (SelectProcedure != null) { if (SelectProcedure.FeederId==Guid.Empty) { return null; } else { return _configService.GetAllFeeders().FirstOrDefault(p => p.Id == SelectProcedure.FeederId); } } else { return null; } } set { SetProperty(ref _SelectFeeder, value); if (value == null) { if (SelectProcedure != null) { SelectProcedure.FeederId = Guid.Empty; } return; } if (SelectProcedure != null) SelectProcedure.FeederId = value.Id; } } private CalibrationInfo _SelectCalibration; public CalibrationInfo SelectCalibration { get { if (SelectProcedure != null) { return _calibrationService.GetAllCalibrations().FirstOrDefault(p => p.Id == SelectProcedure.CalibrationId); } else { return null; } } set { SetProperty(ref _SelectCalibration, value); if(SelectProcedure==null) return; try { if (value == null) { SelectProcedure.CalibrationId = Guid.Empty; } else { if (SelectProcedure != null) SelectProcedure.CalibrationId = value.Id; } } catch (Exception) { } } } private ObservableCollection _RobotList; public ObservableCollection RobotList { get { return _RobotList; } set { SetProperty(ref _RobotList, value); } } private ObservableCollection _FeederList; public ObservableCollection FeederList { get { return _FeederList; } set { SetProperty(ref _FeederList, value); } } private ObservableCollection _CalibrationList; public ObservableCollection CalibrationList { get { return _CalibrationList; } set { SetProperty(ref _CalibrationList, value); } } private ChannelConfig _SelectedLightChannel; public ChannelConfig SelectedLightChannel { get { return _SelectedLightChannel; } set { SetProperty(ref _SelectedLightChannel, value); // no additional action } } private bool CanNext { get { if (SelectProcedure!=null && !string.IsNullOrEmpty(SelectProcedure.TriggerCommand)) { return true; } else { return false; } } } #endregion #region 命令 private DelegateCommand _NextCommand; public DelegateCommand NextCommand => _NextCommand ?? (_NextCommand = new DelegateCommand(ExecuteNextCommand).ObservesCanExecute(()=> CanNext).ObservesProperty(()=> SelectProcedure).ObservesProperty(() => SelectProcedure.TriggerCommand)); private DelegateCommand _BackCommand; public DelegateCommand BackCommand => _BackCommand ?? (_BackCommand = new DelegateCommand(ExecuteBackCommand)); private DelegateCommand _PointPageCommand; public DelegateCommand PointPageCommand => _PointPageCommand ?? (_PointPageCommand = new DelegateCommand(ExecutePointPageCommand)); private DelegateCommand _LoadedCommand; public DelegateCommand LoadedCommand => _LoadedCommand ?? (_LoadedCommand = new DelegateCommand(ExecuteLoadedCommand)); private DelegateCommand _SelectLightChannelCommand; public DelegateCommand SelectLightChannelCommand => _SelectLightChannelCommand ?? (_SelectLightChannelCommand = new DelegateCommand(ExecuteSelectLightChannelCommand)); #endregion #region 事件 #endregion public ProcessBasicsViewModel(IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, IDialogService dialogService, IConfigService configService, ICalibrationService calibrationService, ISystemDatabaseService systemDatabaseService) { _regionManager = regionManager; _eventAggregator = ea; _container = container; _dialogService = dialogService; _configService = configService; _calibrationService = calibrationService; _systemDatabaseService = systemDatabaseService; //订阅权限登录事件 _eventAggregator.GetEvent().Subscribe(LoginChange); } #region 方法 /// /// 窗体加载事件 /// void ExecuteLoadedCommand() { if (_systemDatabaseService.GetCurrentUser().userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } } /// /// 下一步 /// void ExecuteNextCommand() { try { if(SelectProcedure==null) return; //if (SelectProduct.IsCreate && SelectProcedure.ToolBlock == null) //{ // SelectProcedure.ToolBlock = VisionProFileHelper.LoadObjectFromFileSafe(FilePath.SimpleProcedurePath) as CogToolBlock; //} //else if (SelectProcedure.ToolBlock == null) //{ // string prcPath = FilePath.ProductsPath + "//" + SelectProduct.Name + "//" + SelectProcedure.CameraName + "//" + SelectProcedure.Name + ".vpp"; // if (File.Exists(prcPath)) // { // SelectProcedure.ToolBlock = VisionProFileHelper.LoadObjectFromFileSafe(prcPath) as CogToolBlock; // } // else // { // SelectProcedure.ToolBlock = VisionProFileHelper.LoadObjectFromFileSafe(FilePath.SimpleProcedurePath) as CogToolBlock; // } //} NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); param.Add("SelectedProcedure", SelectProcedure); _regionManager.RequestNavigate("ProductRegionContext", "CameraParams", param); } catch (Exception ex) { _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 }); LogHelper.WriteLogError(Lang.产品配置加载流程时出错,ex); } } /// /// 上一步 /// void ExecuteBackCommand() { NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); param.Add("SelectedProcedure", SelectProcedure); _regionManager.RequestNavigate("ProductRegionContext", "ProductProcessManage", param); } /// /// 跳转至点位界面 /// void ExecutePointPageCommand() { NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); _regionManager.RequestNavigate("ProductRegionContext", "PlcPointParams", param); } /// /// 选择光源通道 /// void ExecuteSelectLightChannelCommand() { if (SelectProcedure == null) return; if (SelectProcedure.LightChannels == null) SelectProcedure.LightChannels=new ObservableCollection(); DialogParameters keyValues = new DialogParameters(); keyValues.Add("Channels", SelectProcedure.LightChannels.ToArray()); _dialogService.ShowDialog("LightChannelList", keyValues, rst => { //对话框关闭之后的回调函数,可以在这解析结果。 ButtonResult result1 = rst.Result; if (result1 == ButtonResult.OK) { ChannelConfig[] channels = rst.Parameters.GetValue("Channels"); SelectProcedure.LightChannels = new ObservableCollection(channels); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = $"{Lang.添加完成}", Duration = 1 }); } }); } /// /// 流程选择 /// /// /// public void ComboBox_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { //ProcedureModels.Clear(); //foreach (var item in SelectProduct.CameraProcedures) //{ // foreach (var item1 in item.ProcedureModels) // { // ProcedureModels.Add(item1); // } //} } #endregion #region 继承 /// /// 确认导航请求时调用。此方法允许您在导航之前执行一些操作。 /// /// /// public void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback) { continuationCallback(true); } /// /// 接收导航请求时调用。传入导航参数,包含有关导航目标的信息。 /// /// /// public async void OnNavigatedTo(NavigationContext navigationContext) { SelectProduct = navigationContext.Parameters.GetValue("SelectProduct"); ProcedureModels = new ObservableCollection(); foreach (var item in SelectProduct.CameraProcedures) { foreach (var item1 in item.ProcedureModels) { ProcedureModels.Add(item1); } } RobotList= new ObservableCollection(_configService.GetAllRobots()); FeederList= new ObservableCollection(_configService.GetAllFeeders()); CalibrationList= new ObservableCollection(_calibrationService.GetAllCalibrations()); if (navigationContext.Parameters.ContainsKey("SelectedProcedure")) { SelectProcedure = navigationContext.Parameters.GetValue("SelectedProcedure"); } } /// /// 是否允许导航到此视图模型。 /// /// /// public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } /// /// 导航离开此视图模型时调用。您可以在此处执行清理操作或保存状态。 /// /// public void OnNavigatedFrom(NavigationContext navigationContext) { } #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; } } } }