From 9fe20dc87bb6944afbea93cb6ebda704a8b934e4 Mon Sep 17 00:00:00 2001 From: wxl0430 <141288415+wxl0430@users.noreply.github.com> Date: Wed, 23 Apr 2025 13:37:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=A4=A7=E5=BA=86?= =?UTF-8?q?=E4=B8=9C=E7=AB=99=E7=AB=99=E5=8F=B0=E5=B1=8F=E5=92=8C=E5=93=88?= =?UTF-8?q?=E5=B0=94=E6=BB=A8=E8=A5=BF=E7=AB=99=E7=AB=99=E5=8F=B0=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/DaqingDong/PlatformScreen.png | Bin 0 -> 6120 bytes .../Assets/HarbinXi/PlatformScreen.png | Bin 0 -> 9866 bytes .../CRSim.ScreenSimulator.csproj | 2 + .../Models/StylesInfoData.json | 25 ++++++ .../DaqingDong/PlatformScreenViewModel.cs | 62 +++++++++++++ .../HarbinXi/PlatformScreenViewModel.cs | 62 +++++++++++++ .../Views/DaqingDong/PlatformScreenView.xaml | 79 +++++++++++++++++ .../DaqingDong/PlatformScreenView.xaml.cs | 38 ++++++++ .../Views/HarbinXi/PlatformScreenView.xaml | 82 ++++++++++++++++++ .../Views/HarbinXi/PlatformScreenView.xaml.cs | 38 ++++++++ 10 files changed, 388 insertions(+) create mode 100644 CRSim.ScreenSimulator/Assets/DaqingDong/PlatformScreen.png create mode 100644 CRSim.ScreenSimulator/Assets/HarbinXi/PlatformScreen.png create mode 100644 CRSim.ScreenSimulator/ViewModels/DaqingDong/PlatformScreenViewModel.cs create mode 100644 CRSim.ScreenSimulator/ViewModels/HarbinXi/PlatformScreenViewModel.cs create mode 100644 CRSim.ScreenSimulator/Views/DaqingDong/PlatformScreenView.xaml create mode 100644 CRSim.ScreenSimulator/Views/DaqingDong/PlatformScreenView.xaml.cs create mode 100644 CRSim.ScreenSimulator/Views/HarbinXi/PlatformScreenView.xaml create mode 100644 CRSim.ScreenSimulator/Views/HarbinXi/PlatformScreenView.xaml.cs diff --git a/CRSim.ScreenSimulator/Assets/DaqingDong/PlatformScreen.png b/CRSim.ScreenSimulator/Assets/DaqingDong/PlatformScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..e485ca6b29ea3d1b2cb1eb5196f1bbc124fb3e6e GIT binary patch literal 6120 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 literal 0 HcmV?d00001 diff --git a/CRSim.ScreenSimulator/Assets/HarbinXi/PlatformScreen.png b/CRSim.ScreenSimulator/Assets/HarbinXi/PlatformScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..a071b050bb3488bf40cbf80ee28dc58b347b950d GIT binary patch literal 9866 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 literal 0 HcmV?d00001 diff --git a/CRSim.ScreenSimulator/CRSim.ScreenSimulator.csproj b/CRSim.ScreenSimulator/CRSim.ScreenSimulator.csproj index 7bb15db..5ba60b0 100644 --- a/CRSim.ScreenSimulator/CRSim.ScreenSimulator.csproj +++ b/CRSim.ScreenSimulator/CRSim.ScreenSimulator.csproj @@ -91,6 +91,7 @@ + @@ -98,6 +99,7 @@ + diff --git a/CRSim.ScreenSimulator/Models/StylesInfoData.json b/CRSim.ScreenSimulator/Models/StylesInfoData.json index f7635c6..c268a50 100644 --- a/CRSim.ScreenSimulator/Models/StylesInfoData.json +++ b/CRSim.ScreenSimulator/Models/StylesInfoData.json @@ -261,5 +261,30 @@ "Platform", "Location" ] + }, + { + "UniqueId": "DaqingDong.PlatformScreen", + "Title": "大庆东站站台看板", + "Station": "大庆东", + "Author": "wxl0430", + "Type": "站台屏", + "Parameters": [ + "Station", + "Platform", + "Location" + ] + }, + { + "UniqueId": "HarbinXi.PlatformScreen", + "Title": "哈尔滨西站站台看板", + "Station": "哈尔滨西", + "Author": "wxl0430", + "Type": "站台屏", + "Parameters": [ + "Station", + "Platform", + "Location", + "Text" + ] } ] \ No newline at end of file diff --git a/CRSim.ScreenSimulator/ViewModels/DaqingDong/PlatformScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/DaqingDong/PlatformScreenViewModel.cs new file mode 100644 index 0000000..0841574 --- /dev/null +++ b/CRSim.ScreenSimulator/ViewModels/DaqingDong/PlatformScreenViewModel.cs @@ -0,0 +1,62 @@ +using CRSim.Core.Services; +using CRSim.ScreenSimulator.Models; +using System.Collections.ObjectModel; +using System.Windows; +namespace CRSim.ScreenSimulator.ViewModels.DaqingDong +{ + public class PlatformScreenViewModel : ScreenViewModel + { + private ITimeService _timeService; + public ObservableCollection Screen { get; set; } = []; + public PlatformScreenViewModel(ITimeService timeService, ISettingsService settingsService) + : base(timeService, settingsService) + { + _timeService = timeService; + timeService.RefreshSecondsElapsed += RefreshDisplay; + Text = $"请站在白色安全线以内排队候车"; + Initialize(); + } + private async void Initialize() + { + await WaitForDataLoadAsync(); + RefreshDisplay(null,null); + } + private void RefreshDisplay(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + Screen.Add(TrainInfo.Count > 0 ? TrainInfo[0] : new()); + if (Screen.Count == 1) return; + Screen.RemoveAt(0); + }); + } + public override void RefreshData(object? sender, EventArgs e) + { + if (CurrentPageIndex == 0) + { + List itemsToRemove = []; + foreach (TrainInfo trainInfo in TrainInfo) + { + if (trainInfo.DepartureTime == null) + { + if (trainInfo.ArrivalTime.Value.Add(_settings.StopDisplayFromArrivalDuration) < _timeService.GetDateTimeNow()) + { + itemsToRemove.Add(trainInfo); + } + } + else + { + if (trainInfo.DepartureTime.Value < _timeService.GetDateTimeNow()) + { + itemsToRemove.Add(trainInfo); + } + } + } + foreach (var item in itemsToRemove) + { + TrainInfo.Remove(item); + } + } + } + } +} diff --git a/CRSim.ScreenSimulator/ViewModels/HarbinXi/PlatformScreenViewModel.cs b/CRSim.ScreenSimulator/ViewModels/HarbinXi/PlatformScreenViewModel.cs new file mode 100644 index 0000000..ce99dfb --- /dev/null +++ b/CRSim.ScreenSimulator/ViewModels/HarbinXi/PlatformScreenViewModel.cs @@ -0,0 +1,62 @@ +using CRSim.Core.Services; +using CRSim.ScreenSimulator.Models; +using System.Collections.ObjectModel; +using System.Windows; +namespace CRSim.ScreenSimulator.ViewModels.HarbinXi +{ + public class PlatformScreenViewModel : ScreenViewModel + { + private ITimeService _timeService; + public ObservableCollection Screen { get; set; } = []; + public PlatformScreenViewModel(ITimeService timeService, ISettingsService settingsService) + : base(timeService, settingsService) + { + _timeService = timeService; + timeService.RefreshSecondsElapsed += RefreshDisplay; + Text = $"请在白线内行走,乘降列车时注意脚下站台与列车之间的空隙,看护好老人和儿童。"; + Initialize(); + } + private async void Initialize() + { + await WaitForDataLoadAsync(); + RefreshDisplay(null,null); + } + private void RefreshDisplay(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + Screen.Add(TrainInfo.Count > 0 ? TrainInfo[0] : new()); + if (Screen.Count == 1) return; + Screen.RemoveAt(0); + }); + } + public override void RefreshData(object? sender, EventArgs e) + { + if (CurrentPageIndex == 0) + { + List itemsToRemove = []; + foreach (TrainInfo trainInfo in TrainInfo) + { + if (trainInfo.DepartureTime == null) + { + if (trainInfo.ArrivalTime.Value.Add(_settings.StopDisplayFromArrivalDuration) < _timeService.GetDateTimeNow()) + { + itemsToRemove.Add(trainInfo); + } + } + else + { + if (trainInfo.DepartureTime.Value < _timeService.GetDateTimeNow()) + { + itemsToRemove.Add(trainInfo); + } + } + } + foreach (var item in itemsToRemove) + { + TrainInfo.Remove(item); + } + } + } + } +} diff --git a/CRSim.ScreenSimulator/Views/DaqingDong/PlatformScreenView.xaml b/CRSim.ScreenSimulator/Views/DaqingDong/PlatformScreenView.xaml new file mode 100644 index 0000000..811edb2 --- /dev/null +++ b/CRSim.ScreenSimulator/Views/DaqingDong/PlatformScreenView.xaml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CRSim.ScreenSimulator/Views/DaqingDong/PlatformScreenView.xaml.cs b/CRSim.ScreenSimulator/Views/DaqingDong/PlatformScreenView.xaml.cs new file mode 100644 index 0000000..adb32e2 --- /dev/null +++ b/CRSim.ScreenSimulator/Views/DaqingDong/PlatformScreenView.xaml.cs @@ -0,0 +1,38 @@ +using CRSim.ScreenSimulator.ViewModels.DaqingDong; +using System.Windows; +using System.Windows.Input; +using System.Windows.Media; + +namespace CRSim.ScreenSimulator.Views.DaqingDong +{ + /// + /// SecondaryScreen.xaml 的交互逻辑 + /// + public partial class PlatformScreenView : Window + { + public PlatformScreenViewModel ViewModel { get; } + public PlatformScreenView(PlatformScreenViewModel viewModel) + { + + InitializeComponent(); + RenderOptions.SetEdgeMode(this, EdgeMode.Aliased); + ViewModel = viewModel; + DataContext = viewModel; + } + private void Window_MouseDown(object sender, MouseButtonEventArgs e) + { + if (e.ChangedButton == MouseButton.Left) + { + DragMove(); + } + } + + private void Window_KeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Escape) + { + Close(); + } + } + } +} diff --git a/CRSim.ScreenSimulator/Views/HarbinXi/PlatformScreenView.xaml b/CRSim.ScreenSimulator/Views/HarbinXi/PlatformScreenView.xaml new file mode 100644 index 0000000..0cffb4c --- /dev/null +++ b/CRSim.ScreenSimulator/Views/HarbinXi/PlatformScreenView.xaml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CRSim.ScreenSimulator/Views/HarbinXi/PlatformScreenView.xaml.cs b/CRSim.ScreenSimulator/Views/HarbinXi/PlatformScreenView.xaml.cs new file mode 100644 index 0000000..a288fa9 --- /dev/null +++ b/CRSim.ScreenSimulator/Views/HarbinXi/PlatformScreenView.xaml.cs @@ -0,0 +1,38 @@ +using CRSim.ScreenSimulator.ViewModels.HarbinXi; +using System.Windows; +using System.Windows.Input; +using System.Windows.Media; + +namespace CRSim.ScreenSimulator.Views.HarbinXi +{ + /// + /// SecondaryScreen.xaml 的交互逻辑 + /// + public partial class PlatformScreenView : Window + { + public PlatformScreenViewModel ViewModel { get; } + public PlatformScreenView(PlatformScreenViewModel viewModel) + { + + InitializeComponent(); + RenderOptions.SetEdgeMode(this, EdgeMode.Aliased); + ViewModel = viewModel; + DataContext = viewModel; + } + private void Window_MouseDown(object sender, MouseButtonEventArgs e) + { + if (e.ChangedButton == MouseButton.Left) + { + DragMove(); + } + } + + private void Window_KeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Escape) + { + Close(); + } + } + } +}