feat: 移植12306模拟

This commit is contained in:
denglihong2007
2025-08-30 11:23:09 +08:00
parent d71fea8799
commit 2ca60e8e16
6 changed files with 93 additions and 2 deletions

View File

@@ -1,4 +1,5 @@
using System.Diagnostics;
using CRSim.WebsiteSimulator;
using System.Diagnostics;
namespace CRSim
{
@@ -45,6 +46,8 @@ namespace CRSim
services.AddTransient<DashboardPageViewModel>();
services.AddTransient<StationManagementPageViewModel>();
services.AddTransient<TrainNumberManagementPageViewModel>();
services.AddTransient<WebsiteSimulatorPageViewModel>();
services.AddTransient<Simulator>();
services.AddTransient<ScreenSimulatorPageViewModel>();
services.AddTransient<SettingsPageViewModel>();
services.AddTransient<PluginManagementPageViewModel>();

View File

@@ -54,6 +54,7 @@
<PackageReference Include="CommunityToolkit.WinUI.Controls.Primitives" Version="8.2.250402" />
<PackageReference Include="CommunityToolkit.WinUI.Controls.SettingsControls" Version="8.2.250402" />
<PackageReference Include="CommunityToolkit.WinUI.Converters" Version="8.2.250402" />
<PackageReference Include="CRSim.WebsiteSimulator" Version="2.3.109" />
<PackageReference Include="EPPlus" Version="8.0.8" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.8" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.8" />
@@ -80,6 +81,9 @@
<Page Update="Views\DialogContents\PlatformDialog.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\WebsiteSimulatorPage.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\ScreenSimulatorPage.xaml">
<SubType>Designer</SubType>
</Page>

View File

@@ -48,7 +48,12 @@
<NavigationViewItem.Icon>
<FontIcon Glyph="&#xE786;" />
</NavigationViewItem.Icon>
</NavigationViewItem>
</NavigationViewItem>
<NavigationViewItem Content="12306" Tag="WebsiteSimulatorPage">
<NavigationViewItem.Icon>
<FontIcon Glyph="&#xEB41;" />
</NavigationViewItem.Icon>
</NavigationViewItem>
</NavigationView.MenuItems>
<Frame x:Name="contentFrame"/>
</NavigationView>

View File

@@ -0,0 +1,27 @@
using CRSim.WebsiteSimulator;
namespace CRSim.ViewModels;
public partial class WebsiteSimulatorPageViewModel(IDialogService _dialogService, Simulator _simulator) : ObservableObject
{
public string PageTitle = "12306模拟";
[RelayCommand]
public async Task StartSimulation()
{
try
{
await _simulator.Start();
}
catch (Exception e)
{
await _dialogService.ShowMessageAsync("认证失败", e.Message);
}
}
[RelayCommand]
public void StopSimulation()
{
_simulator.Stop();
}
}

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<Page
x:Class="CRSim.Views.WebsiteSimulatorPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:CRSim.Views"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewmodels="using:CRSim.ViewModels"
xmlns:winui="using:CommunityToolkit.WinUI"
xmlns:controls="using:CommunityToolkit.WinUI.Controls"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=viewmodels:WebsiteSimulatorPageViewModel}">
<Grid x:Name="ContentPagePane" Margin="36,40,0,36">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{x:Bind ViewModel.PageTitle}" Margin="0,0,0,36"
Style="{StaticResource TitleTextBlockStyle}"/>
<ScrollViewer Grid.Row="1" Padding="0,0,36,0">
<StackPanel>
<InfoBar Severity="Warning" IsOpen="True" Title="使用须知" Message="本系统仅用于个人学习及交流铁路网络售票业务使用,不作它用。严禁将本系统用于非法用途,由于不当使用本系统而产生法律责任的,开发组不承担任何民事、刑事责任,并将配合行政、司法机关的调查取证工作。如果您通过反编译客户端,劫持网络通讯、利用系统缺陷等技术手段不当使用本系统,所造成的一切后果将由您自己承担。"/>
<InfoBar Severity="Warning" IsOpen="True" Title="声明" Message="该模拟页面内涉及的任何数据(包括但不限于列车时刻、票额票价、旅客列车开行方案等)均为用户自行设置,与任何一家铁路运输企业的真实生产数据都没有相关性。本软件中“中国铁道科学研究院集团有限公司”、“铁旅科技有限公司”等字样皆为虚构,与现实并无关联。如果该系统侵犯到您的权益,请立即联系电子邮件 support@mstscn.com 告知作者,作者将会在第一时间删除相关内容。" Margin="0,4"/>
<InfoBar Severity="Informational" IsOpen="True" Title="注意" Message="本功能需要设置用户密钥后才可使用。" Margin="0,0,0,12">
<InfoBar.ActionButton>
<HyperlinkButton Content="了解更多" NavigateUri="https://docs.crsim.tech/app/key" />
</InfoBar.ActionButton>
</InfoBar>
<TextBlock Text="操作" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}" Margin="0,0,0,12"/>
<controls:SettingsCard Header="开始模拟" Description="启动一个新的模拟窗口" HeaderIcon="{winui:FontIcon Glyph=&#xE78B;}">
<Button Content="开始模拟" Command="{x:Bind ViewModel.StartSimulationCommand}" Style="{StaticResource AccentButtonStyle}"/>
</controls:SettingsCard>
<controls:SettingsCard Margin="0,4,0,0" Header="停止模拟" Description="停止模拟并关闭窗口" HeaderIcon="{winui:FontIcon Glyph=&#xF71D;}">
<Button Content="停止模拟" Command="{x:Bind ViewModel.StopSimulationCommand}" Style="{StaticResource AccentButtonStyle}"/>
</controls:SettingsCard>
</StackPanel>
</ScrollViewer>
</Grid>
</Page>

View File

@@ -0,0 +1,12 @@
namespace CRSim.Views;
public sealed partial class WebsiteSimulatorPage : Page
{
public WebsiteSimulatorPageViewModel ViewModel { get; } = App.AppHost.Services.GetService<WebsiteSimulatorPageViewModel>();
public WebsiteSimulatorPage()
{
InitializeComponent();
DataContext = ViewModel;
}
}