返回提交历史
Modified
XFEEDToolBox/ViewModels/AutomaticTradeViewModel.cs
+1
-1
Modified
XFEEDToolBox/ViewModels/ToolboxViewModel.cs
+1
-1
Modified
XFEEDToolBox/ViewModels/TradePlanningViewModel.cs
+3
-1
Modified
XFEEDToolBox/Views/PlannerPage.xaml
+1
-1
Modified
docs/INTERFACE-0.4.24.md
+1
-1
XFEstudio/XFEEDToolBox
fix: show the active CG destination and distinguish supply summaries
1331ec7
代码差异
5 个文件
+7
-5
@@ -176,7 +176,7 @@ public partial class ToolboxViewModel
176
176
TradeConfirmedProfit=$"{sessionProfit:N0} Cr";RefreshTradeElapsed();
177
177
RunStatus=value.Phase switch{"requires-recovery"=>"需要处理","stopped"=>"已取消",_=>"自动跑商中"};
178
178
RunMessage=value.Message;NextDestination=value.NextDestination;ActualProfit=$"{sessionProfit:N0} Cr";ProfitLabel="本次跑商已确认净利润";
179
if(value.SupplySelection is{} supply)AutomaticSupplySummary=$"货源:{supply.Source.DisplayName} · {supply.Order.Name} {supply.Order.Quantity:N0}/{supply.FreeCapacity:N0} t · 库存 {supply.Supply:N0} t · 预计 {supply.CreditsPerHour:N0} Cr/h · 风险 {supply.Delivery.RiskDisplay}";
179
if(value.SupplySelection is{} supply)AutomaticSupplySummary=$"CG 货源:{supply.Source.DisplayName} · {supply.Order.Name} {supply.Order.Quantity:N0}/{supply.FreeCapacity:N0} t · 库存 {supply.Supply:N0} t · 预计 {supply.CreditsPerHour:N0} Cr/h · 风险 {supply.Delivery.RiskDisplay}";
180
180
ProfitDetails=$"自 {financialSession.StartedAt.ToLocalTime():MM-dd HH:mm} 起累计,自动重连和修复重启延续本次累计。";
181
181
if(value.Estimate is{} expected){PlanProfit=$"{expected.NetProfit:N0} Cr";PlanHourly=$"{expected.Hourly:N0} Cr/h";PlanDuration=$"约 {expected.Minutes:F1} 分钟";PlanWarnings=expected.Basis;}
182
182
runtime.Log("自动跑商",value.Message);
@@ -405,7 +405,7 @@ public partial class ToolboxViewModel : ViewModelBase, IDisposable
405
405
StartNavigationCommand.NotifyCanExecuteChanged();
406
406
UpdateSystemControlAvailability();
407
407
}
408
partial void OnRunActiveChanged(bool value) { RefreshTradeExecutionTimer(value);RefreshTradePlanCommands(); PauseRunCommand.NotifyCanExecuteChanged();ResumeRunCommand.NotifyCanExecuteChanged();StartGameCommand.NotifyCanExecuteChanged(); RelogGameCommand.NotifyCanExecuteChanged(); RestartGameCommand.NotifyCanExecuteChanged();StartNavigationCommand.NotifyCanExecuteChanged();UpdateSystemControlAvailability(); }
408
partial void OnRunActiveChanged(bool value) { RefreshTradeExecutionTimer(value);RefreshTradePlanCommands();NotifyTradePlanningSummary(); PauseRunCommand.NotifyCanExecuteChanged();ResumeRunCommand.NotifyCanExecuteChanged();StartGameCommand.NotifyCanExecuteChanged(); RelogGameCommand.NotifyCanExecuteChanged(); RestartGameCommand.NotifyCanExecuteChanged();StartNavigationCommand.NotifyCanExecuteChanged();UpdateSystemControlAvailability(); }
409
409
private bool CanManageSession() => initialized && !DemoMode && !RunActive && !SessionBusy&&!NavigationActive&&!SystemFlightActive&&!NavigationRouteBusy;
410
410
private bool CanRelog() => CanManageSession() && sessions.CanRelog;
411
411
[RelayCommand(CanExecute = nameof(CanManageSession))] private Task StartGameAsync() => RunSessionAsync(SessionOperation.Start);
@@ -108,7 +108,9 @@ public partial class ToolboxViewModel
108
108
?$"可投入 {Math.Max(0,credits-(decimal)Math.Max(0,Reserve)):N0} Cr · 已留出 {Math.Max(0,Reserve):N0} Cr 运营与保险资金"
109
109
:"等待读取当前余额,投入金额将自动填入。";
110
110
public string TradeInvestmentMode=>investmentFollowsBalance?"全部可用资金":"自定义投入";
111
public string TradeSelectedRouteSummary=>SelectedTradeCandidate?.RouteSummary
111
public string TradeSelectedRouteSummary=>RunActive&&automaticTradeStop is not null&&automaticTradeParameters is{} automatic
112
?$"{(automatic.Mode==XFEEDToolBox.Core.Execution.AutomaticTradeMode.CommunityGoal?"CG 重复跑商":"重复跑商")} · 交付站 {automatic.Destination.DisplayName}"
113
:SelectedTradeCandidate?.RouteSummary
112
114
??(manualTradeConfigured&&SelectedStart is not null&&AutomaticDestination is not null?SelectedStart.Record.Name+" → "+AutomaticDestination.Record.Name:"选择方案后即可开始执行");
113
115
public bool TradeHasExistingCargo=>SelectedTradeCandidate is {} candidate&&(candidate.Plan.Request.OccupiedCargo>0||CurrentPlayer.CargoCount>0);
114
116
public bool TradeExecutesFullPlan=>SelectedTradeCandidate is {} candidate&&(candidate.Plan.IsCargoAlternative||!candidate.Plan.IsLoop||candidate.Plan.Legs.Count!=2
@@ -83,7 +83,7 @@
83
83
<Border x:Name="TradeRunCard" Style="{StaticResource CardStyle}" Padding="22,18"><StackPanel Spacing="16">
84
84
<Grid><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions><StackPanel Spacing="4"><TextBlock Text="执行概览" Style="{StaticResource SectionTitle}"/><TextBlock Text="{x:Bind ViewModel.TradeSelectedRouteSummary,Mode=OneWay}" Style="{StaticResource MutedText}" FontSize="12" TextTrimming="CharacterEllipsis"/></StackPanel><Button x:Name="ExecuteTradePlanButton" Grid.Column="1" Style="{StaticResource PrimaryButton}" MinWidth="148" VerticalAlignment="Center" controls:AsyncAction.Command="{x:Bind ViewModel.ExecuteTradePlanCommand}" controls:AsyncAction.CancelCommand="{x:Bind ViewModel.StopRunCommand}" controls:AsyncAction.IsRunning="{x:Bind ViewModel.RunActive,Mode=OneWay}" AutomationProperties.Name="开始执行跑商路线" AutomationProperties.AutomationId="ExecuteTradePlanButton"><StackPanel Orientation="Horizontal" Spacing="9"><FontIcon Glyph="" FontSize="15"/><TextBlock Text="{x:Bind ViewModel.TradeExecutionActionLabel,Mode=OneWay}"/></StackPanel></Button></Grid>
85
85
<Grid ColumnSpacing="20"><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="1.2*"/><ColumnDefinition Width="*"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><StackPanel Spacing="6"><TextBlock Text="已完成轮数" Style="{StaticResource MutedText}" FontSize="12"/><TextBlock Text="{x:Bind ViewModel.CompletedTradeRounds,Mode=OneWay}" FontSize="24" FontWeight="SemiBold"/></StackPanel><StackPanel Grid.Column="1" Spacing="6"><TextBlock Text="本次已确认净利润" Style="{StaticResource MutedText}" FontSize="12"/><TextBlock Text="{x:Bind ViewModel.TradeConfirmedProfit,Mode=OneWay}" Foreground="{StaticResource TealBrush}" FontSize="24" FontWeight="SemiBold"/></StackPanel><StackPanel Grid.Column="2" Spacing="6"><TextBlock Text="运行时长" Style="{StaticResource MutedText}" FontSize="12"/><TextBlock Text="{x:Bind ViewModel.TradeElapsed,Mode=OneWay}" FontSize="24" FontWeight="SemiBold"/></StackPanel><StackPanel Grid.Column="3" Spacing="6"><TextBlock Text="当前阶段" Style="{StaticResource MutedText}" FontSize="12"/><TextBlock Text="{x:Bind ViewModel.RunStatus,Mode=OneWay}" FontSize="20" FontWeight="SemiBold" TextTrimming="CharacterEllipsis"/></StackPanel></Grid>
86
<TextBlock Text="{x:Bind ViewModel.TradeExecutionPolicy,Mode=OneWay}" Style="{StaticResource MutedText}" FontSize="11"/><Border Height="1" Background="{StaticResource PanelStrokeBrush}"/><TextBlock Text="{x:Bind ViewModel.AutomaticSupplySummary,Mode=OneWay}" AutomationProperties.AutomationId="AutomaticSupplySummary" TextWrapping="Wrap" FontSize="12" Foreground="{StaticResource TealBrush}"/><TextBlock Text="{x:Bind ViewModel.RunMessage,Mode=OneWay}" TextWrapping="Wrap" FontSize="12" Foreground="{StaticResource MutedBrush}"/><Button Content="更新插件并继续" AutomationProperties.AutomationId="UpdateAndStartAutomaticTradeButton" Command="{x:Bind ViewModel.UpdateAndStartAutomaticTradeCommand}" Visibility="{x:Bind ViewModel.AutomaticUpdateVisibility,Mode=OneWay}" HorizontalAlignment="Left"/>
86
<TextBlock Text="{x:Bind ViewModel.TradeExecutionPolicy,Mode=OneWay}" Style="{StaticResource MutedText}" FontSize="11"/><Border Height="1" Background="{StaticResource PanelStrokeBrush}"/><TextBlock Text="{x:Bind ViewModel.AutomaticSupplySummary,Mode=OneWay}" AutomationProperties.AutomationId="AutomaticSupplySummary" TextWrapping="Wrap" FontSize="12" Foreground="#C3A6FF"/><TextBlock Text="{x:Bind ViewModel.RunMessage,Mode=OneWay}" TextWrapping="Wrap" FontSize="12" Foreground="{StaticResource MutedBrush}"/><Button Content="更新插件并继续" AutomationProperties.AutomationId="UpdateAndStartAutomaticTradeButton" Command="{x:Bind ViewModel.UpdateAndStartAutomaticTradeCommand}" Visibility="{x:Bind ViewModel.AutomaticUpdateVisibility,Mode=OneWay}" HorizontalAlignment="Left"/>
87
87
</StackPanel></Border>
88
88
<Expander Header="查看完整路线与逐站货单" Visibility="{x:Bind ViewModel.TradePlanVisibility,Mode=OneWay}" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"><StackPanel Spacing="16"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions><TextBlock Text="{x:Bind ViewModel.PlanInfo,Mode=OneWay}" FontWeight="SemiBold" VerticalAlignment="Center"/><Button Grid.Column="1" Content="导出路线 JSON" Command="{x:Bind ViewModel.ExportPlanCommand}"/></Grid><controls:RouteMap Plan="{x:Bind ViewModel.Plan,Mode=OneWay}" Height="220"/><ItemsControl ItemsSource="{x:Bind ViewModel.Plan.Legs,Mode=OneWay}"><ItemsControl.ItemTemplate><DataTemplate x:DataType="models:TradeLeg"><Border Background="{StaticResource PanelAltBrush}" CornerRadius="8" Padding="16" Margin="0,0,0,8"><StackPanel Spacing="7"><TextBlock Text="{x:Bind Title}" FontWeight="SemiBold"/><TextBlock Text="{x:Bind Systems}" Style="{StaticResource MutedText}"/><TextBlock Text="{x:Bind CargoSummary}" Foreground="{StaticResource AccentBrush}" TextWrapping="Wrap"/><TextBlock Text="{x:Bind Metrics}" Style="{StaticResource MutedText}" FontSize="11"/></StackPanel></Border></DataTemplate></ItemsControl.ItemTemplate></ItemsControl><TextBlock Text="{x:Bind ViewModel.PlanWarnings,Mode=OneWay}" Style="{StaticResource MutedText}" FontSize="11"/></StackPanel></Expander>
89
89
</StackPanel>
@@ -14,6 +14,6 @@ CG 自动跑商现在会在交付完成后、到达货源读取真实行情后
14
14
15
15
自动降落接管失败需要通过同模式重进恢复时,先释放旧输入上下文,再重新核验连续船体健康并授权菜单恢复,避免旧会话的停止标记拦住恢复操作。实际受损和紧急保护仍由原保护监测决定。
16
16
17
执行概览显示选择的货源、商品、可装载吨数/空舱、该商品库存、预计每小时收益和风险;真实已确认利润仍独立按交易及服务回执统计。
17
执行概览显示选择的货源、商品、可装载吨数/空舱、该商品库存、预计每小时收益和风险;CG 货源使用紫色和文字标识,运行标题显示实际交付站。真实已确认利润仍独立按交易及服务回执统计。
18
18
19
19
本次修改不要求手动打包原生驱动;发布仍通过项目引用编译并内嵌底层支持。