|
|
@@ -33,6 +33,7 @@ using TeamAAS_VP.Models;
|
|
|
using TeamAAS_VP.Resources.Languages;
|
|
|
using TeamAAS_VP.Services;
|
|
|
using TeamAAS_VP.Views;
|
|
|
+using TeamAAS_VP.Views.User;
|
|
|
using WPFLocalizeExtension.Engine;
|
|
|
using static MaterialDesignThemes.Wpf.Theme.ToolBar;
|
|
|
|
|
|
@@ -54,13 +55,14 @@ namespace TeamAAS_VP.ViewModels
|
|
|
ICalibrationService _calibrationService;
|
|
|
ISystemDatabaseService _systemDatabaseService;
|
|
|
IDatabaseInitializer _databaseInitializer;
|
|
|
-
|
|
|
+ ShiftWatcherService _shiftWatcherService;
|
|
|
private Management management;
|
|
|
private Guid CurrentTime;
|
|
|
private Guid RunTime;
|
|
|
private DateTime StartTime;
|
|
|
private Guid currentUser;
|
|
|
Timer timer;
|
|
|
+ private bool _loginShowing;
|
|
|
|
|
|
#region 属性
|
|
|
|
|
|
@@ -127,7 +129,7 @@ namespace TeamAAS_VP.ViewModels
|
|
|
|
|
|
public MainWindowViewModel(IRegionManager regionManager, IEventAggregator ea, IRegionNavigationService regionNavigationService, IContainerProvider container, IDialogService dialogService,
|
|
|
IConfigService configService, IRobotService robotService, ICameraService cameraService, IFeederService feederService, IPlcService plcService, IProductService productService,
|
|
|
- ICalibrationService calibrationService, ISystemDatabaseService systemDatabaseService, IDatabaseInitializer databaseInitializer)
|
|
|
+ ICalibrationService calibrationService, ISystemDatabaseService systemDatabaseService, IDatabaseInitializer databaseInitializer, ShiftWatcherService shiftWatcherService)
|
|
|
{
|
|
|
_regionManager = regionManager;
|
|
|
_regionNavigationService = regionNavigationService;
|
|
|
@@ -143,6 +145,7 @@ namespace TeamAAS_VP.ViewModels
|
|
|
_calibrationService = calibrationService;
|
|
|
_systemDatabaseService = systemDatabaseService;
|
|
|
_databaseInitializer = databaseInitializer;
|
|
|
+ _shiftWatcherService = shiftWatcherService;
|
|
|
//订阅权限登录事件
|
|
|
_eventAggregator.GetEvent<UserLoginNotification>().Subscribe(LoginChange);
|
|
|
management = _container.Resolve<Management>();
|
|
|
@@ -150,7 +153,6 @@ namespace TeamAAS_VP.ViewModels
|
|
|
LoadedCommand = new DelegateCommand(OnLoad);
|
|
|
ClosedCommand = new DelegateCommand(OnClose);
|
|
|
Status = management.Status;
|
|
|
-
|
|
|
|
|
|
|
|
|
}
|
|
|
@@ -208,7 +210,6 @@ namespace TeamAAS_VP.ViewModels
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
private async void OnLoad()
|
|
|
@@ -221,7 +222,6 @@ namespace TeamAAS_VP.ViewModels
|
|
|
systemconfig.SoftwareVersion = AppVersion;
|
|
|
_configService.SaveSystemConfiguration(systemconfig);
|
|
|
|
|
|
-
|
|
|
// 设置语言
|
|
|
//#region 设置语言
|
|
|
//var currentlanguage = _configService.GetSystemConfiguration().CurrentLanguage;
|
|
|
@@ -345,7 +345,12 @@ namespace TeamAAS_VP.ViewModels
|
|
|
_eventAggregator.GetEvent<ProgressNotification>().Publish(new UProgressBar.ProgressParameter { Maximum = max, Minimum = 0, SubTitle = $"{Lang.初始化中}...", Message = $"{Lang.正在开启}...", Value = curvalue });
|
|
|
}));
|
|
|
await management.InitSignal();
|
|
|
-
|
|
|
+
|
|
|
+ //-------------------SETP 13: 开启生产排班检测-----------------------------------------------------------------------
|
|
|
+ // 订阅班次切换事件,强制在UI线程执行(这样可以安全Hide/Show主窗口和弹窗)
|
|
|
+
|
|
|
+ _eventAggregator.GetEvent<WorkShiftChangedNotification>().Subscribe(OnShiftChanged, ThreadOption.UIThread);
|
|
|
+ _shiftWatcherService.Start();
|
|
|
|
|
|
//当前日期
|
|
|
CurrentTime = Guid.NewGuid();
|
|
|
@@ -400,6 +405,15 @@ namespace TeamAAS_VP.ViewModels
|
|
|
var d = Status.FirstOrDefault(b => b.ID == RunTime);
|
|
|
var run = (DateTime.Now - StartTime);
|
|
|
d.Message = string.Format(Lang.已运行时长, (int)run.TotalDays, run.Hours, run.Minutes, run.Seconds);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Stop()
|
|
|
+ {
|
|
|
+ timer?.Dispose();
|
|
|
+ timer = null;
|
|
|
}
|
|
|
|
|
|
private void LoginChange(Models.User user)
|
|
|
@@ -410,6 +424,41 @@ namespace TeamAAS_VP.ViewModels
|
|
|
us.Message = $"{Lang.当前用户}:{_systemDatabaseService.GetCurrentUser().UserName}[{_systemDatabaseService.GetCurrentUser().userPart.ToString()}]";
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // 中文注释:班次切换时触发:停流程→隐藏主窗口→弹登录→登录成功恢复
|
|
|
+ private void OnShiftChanged()
|
|
|
+ {
|
|
|
+ if (_loginShowing)
|
|
|
+ return;
|
|
|
+
|
|
|
+ _loginShowing = true;
|
|
|
+
|
|
|
+ // 1 隐藏主窗口
|
|
|
+ var mainWindow = Application.Current.MainWindow;
|
|
|
+ mainWindow?.Hide();
|
|
|
+
|
|
|
+ CardLoginWindow loginWindow = new CardLoginWindow();
|
|
|
+ loginWindow.Show();
|
|
|
+
|
|
|
+ bool? result = loginWindow.ShowDialog();
|
|
|
+
|
|
|
+ // 4️⃣ 根据登录结果处理
|
|
|
+ if (result == true)
|
|
|
+ {
|
|
|
+ // 登录成功 → 显示主窗口
|
|
|
+ mainWindow?.Show();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // 登录失败/取消:按需求决定(示例:仍显示主窗口但不启动流程)
|
|
|
+ //mainWindow?.Show();
|
|
|
+
|
|
|
+ // 如果你想强制退出可以用:
|
|
|
+ Application.Current.Shutdown();
|
|
|
+ }
|
|
|
+ _loginShowing = false;
|
|
|
+ }
|
|
|
+
|
|
|
#endregion
|
|
|
}
|
|
|
}
|